Skip to content

Instantly share code, notes, and snippets.

@davidsteinar
Created April 20, 2017 19:49
Show Gist options
  • Save davidsteinar/b462882c1f2498095b4b870d808d71b0 to your computer and use it in GitHub Desktop.
Save davidsteinar/b462882c1f2498095b4b870d808d71b0 to your computer and use it in GitHub Desktop.
Kosningahegðun þingmanna
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": true,
"deletable": true,
"editable": true
},
"source": [
"# Kosningahegðun Alþingismanna\n",
"\n",
"Gögn yfir atkvæði þingmanna eru aðeins til á vefsíðuformi. Því þarf að scrape-a althingi.is til að nálgast gögnin og síðan þarf að vinna úr þeim til að fá þau á form til greiningar.\n",
"\n",
"Nota https://github.com/busla/althingi-rest-api scraper til að fá atkvæði 145. löggjafarþings og vista sem json file.\n",
"\n",
"## Data cleanup "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Loading tidyverse: ggplot2\n",
"Loading tidyverse: tibble\n",
"Loading tidyverse: tidyr\n",
"Loading tidyverse: readr\n",
"Loading tidyverse: purrr\n",
"Loading tidyverse: dplyr\n",
"Conflicts with tidy packages ---------------------------------------------------\n",
"filter(): dplyr, stats\n",
"lag(): dplyr, stats\n",
"\n",
"Attaching package: ‘jsonlite’\n",
"\n",
"The following object is masked from ‘package:purrr’:\n",
"\n",
" flatten\n",
"\n"
]
}
],
"source": [
"library(tidyverse,quietly = TRUE)\n",
"library(jsonlite)\n",
"\n",
"allt <- fromJSON('atkvaedi145.json')\n",
"atkvaedi <- allt$items\n",
"atkvaedi <- atkvaedi %>% select(signatures, issue_id, petition_id) "
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Vill fá hverja línu sem atkvæði frá einum þingmanni í einu máli:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Warning message in bind_rows_(x, .id):\n",
"“Unequal factor levels: coercing to character”"
]
}
],
"source": [
"df <- data.frame()\n",
"for(i in 1:nrow(atkvaedi)){\n",
" if (nrow(atkvaedi[[i,1]]) > 0){\n",
" tempdf <- data.frame(atkvaedi[i,1], 'petition_id'=rep(atkvaedi$petition_id[i],63))\n",
" df <- bind_rows(df, tempdf)\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>signature</th><th scope=col>member_id</th><th scope=col>petition_id</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>já </td><td>678 </td><td>51983</td></tr>\n",
"\t<tr><td>já </td><td>707 </td><td>51983</td></tr>\n",
"\t<tr><td>já </td><td>1157 </td><td>51983</td></tr>\n",
"\t<tr><td>já </td><td>1214 </td><td>51983</td></tr>\n",
"\t<tr><td>já </td><td>650 </td><td>51983</td></tr>\n",
"\t<tr><td>já </td><td>728 </td><td>51983</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lll}\n",
" signature & member\\_id & petition\\_id\\\\\n",
"\\hline\n",
"\t já & 678 & 51983\\\\\n",
"\t já & 707 & 51983\\\\\n",
"\t já & 1157 & 51983\\\\\n",
"\t já & 1214 & 51983\\\\\n",
"\t já & 650 & 51983\\\\\n",
"\t já & 728 & 51983\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"signature | member_id | petition_id | \n",
"|---|---|---|---|---|---|\n",
"| já | 678 | 51983 | \n",
"| já | 707 | 51983 | \n",
"| já | 1157 | 51983 | \n",
"| já | 1214 | 51983 | \n",
"| já | 650 | 51983 | \n",
"| já | 728 | 51983 | \n",
"\n",
"\n"
],
"text/plain": [
" signature member_id petition_id\n",
"1 já 678 51983 \n",
"2 já 707 51983 \n",
"3 já 1157 51983 \n",
"4 já 1214 51983 \n",
"5 já 650 51983 \n",
"6 já 728 51983 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"head(df)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>'boðaði fjarvist'</li>\n",
"\t<li>'fjarverandi'</li>\n",
"\t<li>'greiðir ekki atkvæði'</li>\n",
"\t<li>'já'</li>\n",
"\t<li>'nei'</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 'boðaði fjarvist'\n",
"\\item 'fjarverandi'\n",
"\\item 'greiðir ekki atkvæði'\n",
"\\item 'já'\n",
"\\item 'nei'\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 'boðaði fjarvist'\n",
"2. 'fjarverandi'\n",
"3. 'greiðir ekki atkvæði'\n",
"4. 'já'\n",
"5. 'nei'\n",
"\n",
"\n"
],
"text/plain": [
"[1] \"boðaði fjarvist\" \"fjarverandi\" \"greiðir ekki atkvæði\"\n",
"[4] \"já\" \"nei\" "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df$signature <- as.factor(df$signature) \n",
"df$member_id <- as.factor(df$member_id) \n",
"df$petition_id <- as.factor(df$petition_id)\n",
"levels(df$signature)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Atkvæðin eru á mismunandi formi, þarf að breyta þeim yfir í numerical. Set já sem 1, nei sem -1 og ekki atkvæði sem 0. Þetta gæti haft áhrif á lokaútkomu."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"levels(df$signature) <- c(0,0,0,1,-1)\n",
"df$signature <- as.numeric(as.character(df$signature))"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Taflan þarf að vera á því formi að hver lína er eitt málefni og hver dálkur er þingmaður. "
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"df <- spread(df, key=member_id, value = signature)\n",
"df$petition_id <- NULL"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>1002</th><th scope=col>1012</th><th scope=col>1018</th><th scope=col>1031</th><th scope=col>1046</th><th scope=col>1157</th><th scope=col>1158</th><th scope=col>1159</th><th scope=col>1160</th><th scope=col>1161</th><th scope=col>⋯</th><th scope=col>719</th><th scope=col>721</th><th scope=col>722</th><th scope=col>726</th><th scope=col>728</th><th scope=col>729</th><th scope=col>730</th><th scope=col>737</th><th scope=col>934</th><th scope=col>999</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>NA</td><td>0 </td><td>0 </td><td>1 </td><td>NA</td><td>1 </td><td>NA</td><td>1 </td><td>0 </td><td>1 </td><td>⋯ </td><td>1 </td><td>0 </td><td>1 </td><td>0 </td><td>1 </td><td>0 </td><td>0 </td><td>NA</td><td>0 </td><td>NA</td></tr>\n",
"\t<tr><td>NA</td><td>0 </td><td>0 </td><td>0 </td><td>NA</td><td>1 </td><td>NA</td><td>1 </td><td>0 </td><td>1 </td><td>⋯ </td><td>1 </td><td>0 </td><td>1 </td><td>0 </td><td>1 </td><td>0 </td><td>0 </td><td>NA</td><td>0 </td><td>NA</td></tr>\n",
"\t<tr><td>NA</td><td>0 </td><td>0 </td><td>0 </td><td>NA</td><td>1 </td><td>NA</td><td>1 </td><td>0 </td><td>1 </td><td>⋯ </td><td>1 </td><td>0 </td><td>1 </td><td>0 </td><td>1 </td><td>0 </td><td>0 </td><td>NA</td><td>0 </td><td>NA</td></tr>\n",
"\t<tr><td>NA</td><td>0 </td><td>0 </td><td>1 </td><td>NA</td><td>0 </td><td>NA</td><td>1 </td><td>1 </td><td>1 </td><td>⋯ </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>1 </td><td>NA</td><td>0 </td><td>NA</td></tr>\n",
"\t<tr><td>NA</td><td>0 </td><td>0 </td><td>1 </td><td>NA</td><td>0 </td><td>NA</td><td>1 </td><td>1 </td><td>1 </td><td>⋯ </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>1 </td><td>NA</td><td>0 </td><td>NA</td></tr>\n",
"\t<tr><td>NA</td><td>1 </td><td>0 </td><td>1 </td><td>NA</td><td>0 </td><td>NA</td><td>1 </td><td>1 </td><td>1 </td><td>⋯ </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>1 </td><td>NA</td><td>0 </td><td>NA</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll}\n",
" 1002 & 1012 & 1018 & 1031 & 1046 & 1157 & 1158 & 1159 & 1160 & 1161 & ⋯ & 719 & 721 & 722 & 726 & 728 & 729 & 730 & 737 & 934 & 999\\\\\n",
"\\hline\n",
"\t NA & 0 & 0 & 1 & NA & 1 & NA & 1 & 0 & 1 & ⋯ & 1 & 0 & 1 & 0 & 1 & 0 & 0 & NA & 0 & NA\\\\\n",
"\t NA & 0 & 0 & 0 & NA & 1 & NA & 1 & 0 & 1 & ⋯ & 1 & 0 & 1 & 0 & 1 & 0 & 0 & NA & 0 & NA\\\\\n",
"\t NA & 0 & 0 & 0 & NA & 1 & NA & 1 & 0 & 1 & ⋯ & 1 & 0 & 1 & 0 & 1 & 0 & 0 & NA & 0 & NA\\\\\n",
"\t NA & 0 & 0 & 1 & NA & 0 & NA & 1 & 1 & 1 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 1 & NA & 0 & NA\\\\\n",
"\t NA & 0 & 0 & 1 & NA & 0 & NA & 1 & 1 & 1 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 1 & NA & 0 & NA\\\\\n",
"\t NA & 1 & 0 & 1 & NA & 0 & NA & 1 & 1 & 1 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 1 & NA & 0 & NA\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"1002 | 1012 | 1018 | 1031 | 1046 | 1157 | 1158 | 1159 | 1160 | 1161 | ⋯ | 719 | 721 | 722 | 726 | 728 | 729 | 730 | 737 | 934 | 999 | \n",
"|---|---|---|---|---|---|\n",
"| NA | 0 | 0 | 1 | NA | 1 | NA | 1 | 0 | 1 | ⋯ | 1 | 0 | 1 | 0 | 1 | 0 | 0 | NA | 0 | NA | \n",
"| NA | 0 | 0 | 0 | NA | 1 | NA | 1 | 0 | 1 | ⋯ | 1 | 0 | 1 | 0 | 1 | 0 | 0 | NA | 0 | NA | \n",
"| NA | 0 | 0 | 0 | NA | 1 | NA | 1 | 0 | 1 | ⋯ | 1 | 0 | 1 | 0 | 1 | 0 | 0 | NA | 0 | NA | \n",
"| NA | 0 | 0 | 1 | NA | 0 | NA | 1 | 1 | 1 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 1 | NA | 0 | NA | \n",
"| NA | 0 | 0 | 1 | NA | 0 | NA | 1 | 1 | 1 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 1 | NA | 0 | NA | \n",
"| NA | 1 | 0 | 1 | NA | 0 | NA | 1 | 1 | 1 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 1 | NA | 0 | NA | \n",
"\n",
"\n"
],
"text/plain": [
" 1002 1012 1018 1031 1046 1157 1158 1159 1160 1161 ⋯ 719 721 722 726 728 729\n",
"1 NA 0 0 1 NA 1 NA 1 0 1 ⋯ 1 0 1 0 1 0 \n",
"2 NA 0 0 0 NA 1 NA 1 0 1 ⋯ 1 0 1 0 1 0 \n",
"3 NA 0 0 0 NA 1 NA 1 0 1 ⋯ 1 0 1 0 1 0 \n",
"4 NA 0 0 1 NA 0 NA 1 1 1 ⋯ 0 0 0 0 0 0 \n",
"5 NA 0 0 1 NA 0 NA 1 1 1 ⋯ 0 0 0 0 0 0 \n",
"6 NA 1 0 1 NA 0 NA 1 1 1 ⋯ 0 0 0 0 0 0 \n",
" 730 737 934 999\n",
"1 0 NA 0 NA \n",
"2 0 NA 0 NA \n",
"3 0 NA 0 NA \n",
"4 1 NA 0 NA \n",
"5 1 NA 0 NA \n",
"6 1 NA 0 NA "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"head(df)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Nú þarf að taka ákvörðun um hvað eigi að gera við NA gildi. T-SNE ræður ekki við missing values. Ég segi því að þeir þingmenn með minna en 90% kosningahlutfall er hent út og þau NA gildi sem verða eftir verða sett sem 0, eða sem jafngildir \"greiðir ekki atkvæði\". Margir þeirra sem hent var út eru varaþingmenn."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>1012</th><th scope=col>1018</th><th scope=col>1031</th><th scope=col>1157</th><th scope=col>1158</th><th scope=col>1159</th><th scope=col>1160</th><th scope=col>1161</th><th scope=col>1162</th><th scope=col>1163</th><th scope=col>⋯</th><th scope=col>714</th><th scope=col>715</th><th scope=col>719</th><th scope=col>721</th><th scope=col>722</th><th scope=col>726</th><th scope=col>728</th><th scope=col>729</th><th scope=col>730</th><th scope=col>934</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>0 </td><td>0 </td><td>1 </td><td>1 </td><td>0.5</td><td>1 </td><td>0 </td><td>1 </td><td>1 </td><td>0 </td><td>⋯ </td><td>1 </td><td>1.0</td><td>1 </td><td>0 </td><td>1 </td><td>0 </td><td>1 </td><td>0 </td><td>0 </td><td>0 </td></tr>\n",
"\t<tr><td>0 </td><td>0 </td><td>0 </td><td>1 </td><td>0.5</td><td>1 </td><td>0 </td><td>1 </td><td>1 </td><td>0 </td><td>⋯ </td><td>0 </td><td>1.0</td><td>1 </td><td>0 </td><td>1 </td><td>0 </td><td>1 </td><td>0 </td><td>0 </td><td>0 </td></tr>\n",
"\t<tr><td>0 </td><td>0 </td><td>0 </td><td>1 </td><td>0.5</td><td>1 </td><td>0 </td><td>1 </td><td>1 </td><td>0 </td><td>⋯ </td><td>0 </td><td>1.0</td><td>1 </td><td>0 </td><td>1 </td><td>0 </td><td>1 </td><td>0 </td><td>0 </td><td>0 </td></tr>\n",
"\t<tr><td>0 </td><td>0 </td><td>1 </td><td>0 </td><td>0.5</td><td>1 </td><td>1 </td><td>1 </td><td>1 </td><td>0 </td><td>⋯ </td><td>1 </td><td>0.5</td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>1 </td><td>0 </td></tr>\n",
"\t<tr><td>0 </td><td>0 </td><td>1 </td><td>0 </td><td>0.5</td><td>1 </td><td>1 </td><td>1 </td><td>1 </td><td>0 </td><td>⋯ </td><td>1 </td><td>0.5</td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>1 </td><td>0 </td></tr>\n",
"\t<tr><td>1 </td><td>0 </td><td>1 </td><td>0 </td><td>0.5</td><td>1 </td><td>1 </td><td>1 </td><td>1 </td><td>0 </td><td>⋯ </td><td>1 </td><td>0.5</td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>0 </td><td>1 </td><td>0 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lllllllllllllllllllllllllllllllllllllllllllllllllllllllllll}\n",
" 1012 & 1018 & 1031 & 1157 & 1158 & 1159 & 1160 & 1161 & 1162 & 1163 & ⋯ & 714 & 715 & 719 & 721 & 722 & 726 & 728 & 729 & 730 & 934\\\\\n",
"\\hline\n",
"\t 0 & 0 & 1 & 1 & 0.5 & 1 & 0 & 1 & 1 & 0 & ⋯ & 1 & 1.0 & 1 & 0 & 1 & 0 & 1 & 0 & 0 & 0 \\\\\n",
"\t 0 & 0 & 0 & 1 & 0.5 & 1 & 0 & 1 & 1 & 0 & ⋯ & 0 & 1.0 & 1 & 0 & 1 & 0 & 1 & 0 & 0 & 0 \\\\\n",
"\t 0 & 0 & 0 & 1 & 0.5 & 1 & 0 & 1 & 1 & 0 & ⋯ & 0 & 1.0 & 1 & 0 & 1 & 0 & 1 & 0 & 0 & 0 \\\\\n",
"\t 0 & 0 & 1 & 0 & 0.5 & 1 & 1 & 1 & 1 & 0 & ⋯ & 1 & 0.5 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\\\\n",
"\t 0 & 0 & 1 & 0 & 0.5 & 1 & 1 & 1 & 1 & 0 & ⋯ & 1 & 0.5 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\\\\n",
"\t 1 & 0 & 1 & 0 & 0.5 & 1 & 1 & 1 & 1 & 0 & ⋯ & 1 & 0.5 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"1012 | 1018 | 1031 | 1157 | 1158 | 1159 | 1160 | 1161 | 1162 | 1163 | ⋯ | 714 | 715 | 719 | 721 | 722 | 726 | 728 | 729 | 730 | 934 | \n",
"|---|---|---|---|---|---|\n",
"| 0 | 0 | 1 | 1 | 0.5 | 1 | 0 | 1 | 1 | 0 | ⋯ | 1 | 1.0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | \n",
"| 0 | 0 | 0 | 1 | 0.5 | 1 | 0 | 1 | 1 | 0 | ⋯ | 0 | 1.0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | \n",
"| 0 | 0 | 0 | 1 | 0.5 | 1 | 0 | 1 | 1 | 0 | ⋯ | 0 | 1.0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | \n",
"| 0 | 0 | 1 | 0 | 0.5 | 1 | 1 | 1 | 1 | 0 | ⋯ | 1 | 0.5 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | \n",
"| 0 | 0 | 1 | 0 | 0.5 | 1 | 1 | 1 | 1 | 0 | ⋯ | 1 | 0.5 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | \n",
"| 1 | 0 | 1 | 0 | 0.5 | 1 | 1 | 1 | 1 | 0 | ⋯ | 1 | 0.5 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | \n",
"\n",
"\n"
],
"text/plain": [
" 1012 1018 1031 1157 1158 1159 1160 1161 1162 1163 ⋯ 714 715 719 721 722 726\n",
"1 0 0 1 1 0.5 1 0 1 1 0 ⋯ 1 1.0 1 0 1 0 \n",
"2 0 0 0 1 0.5 1 0 1 1 0 ⋯ 0 1.0 1 0 1 0 \n",
"3 0 0 0 1 0.5 1 0 1 1 0 ⋯ 0 1.0 1 0 1 0 \n",
"4 0 0 1 0 0.5 1 1 1 1 0 ⋯ 1 0.5 0 0 0 0 \n",
"5 0 0 1 0 0.5 1 1 1 1 0 ⋯ 1 0.5 0 0 0 0 \n",
"6 1 0 1 0 0.5 1 1 1 1 0 ⋯ 1 0.5 0 0 0 0 \n",
" 728 729 730 934\n",
"1 1 0 0 0 \n",
"2 1 0 0 0 \n",
"3 1 0 0 0 \n",
"4 0 0 1 0 \n",
"5 0 0 1 0 \n",
"6 0 0 1 0 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"nacols <- c()\n",
"for( i in 1:ncol(df)){\n",
" if(sum(is.na(df[,i])) > 100){\n",
" nacols <- c(nacols,i)\n",
" }\n",
"}\n",
"dff <- subset(df,select=-c(nacols))\n",
"dff[is.na(dff)] <- 0.5\n",
"\n",
"head(dff)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Þetta eru gögnin sem fara í T-SNE, en til að geta skilið betur gögnin bæti ég við nöfnum og flokkum og vista sem .csv"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"flokkar <- read.csv('flokkarid.csv',header = FALSE)\n",
"names(flokkar) <- c('ID','Þingmaður','Flokkur')\n",
"\n",
"dff <- data.frame(t(dff))\n",
"#write.csv(dff,file='althingivotes.csv',quote = FALSE)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>ID</th><th scope=col>Þingmaður</th><th scope=col>Flokkur</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>1012 </td><td>Bjarkey Olsen Gunnarsdóttir</td><td>Vinstri græn </td></tr>\n",
"\t<tr><td>1018 </td><td>Sigríður Á. Andersen </td><td>Sjálfstæðisflokkur </td></tr>\n",
"\t<tr><td>1031 </td><td>Steinunn Þóra Árnadóttir </td><td>Vinstri græn </td></tr>\n",
"\t<tr><td>1157 </td><td>Ásmundur Friðriksson </td><td>Sjálfstæðisflokkur </td></tr>\n",
"\t<tr><td>1158 </td><td>Björt Ólafsdóttir </td><td>Björt framtíð </td></tr>\n",
"\t<tr><td>1159 </td><td>Brynhildur Pétursdóttir </td><td>Björt framtíð </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lll}\n",
" ID & Þingmaður & Flokkur\\\\\n",
"\\hline\n",
"\t 1012 & Bjarkey Olsen Gunnarsdóttir & Vinstri græn \\\\\n",
"\t 1018 & Sigríður Á. Andersen & Sjálfstæðisflokkur \\\\\n",
"\t 1031 & Steinunn Þóra Árnadóttir & Vinstri græn \\\\\n",
"\t 1157 & Ásmundur Friðriksson & Sjálfstæðisflokkur \\\\\n",
"\t 1158 & Björt Ólafsdóttir & Björt framtíð \\\\\n",
"\t 1159 & Brynhildur Pétursdóttir & Björt framtíð \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"ID | Þingmaður | Flokkur | \n",
"|---|---|---|---|---|---|\n",
"| 1012 | Bjarkey Olsen Gunnarsdóttir | Vinstri græn | \n",
"| 1018 | Sigríður Á. Andersen | Sjálfstæðisflokkur | \n",
"| 1031 | Steinunn Þóra Árnadóttir | Vinstri græn | \n",
"| 1157 | Ásmundur Friðriksson | Sjálfstæðisflokkur | \n",
"| 1158 | Björt Ólafsdóttir | Björt framtíð | \n",
"| 1159 | Brynhildur Pétursdóttir | Björt framtíð | \n",
"\n",
"\n"
],
"text/plain": [
" ID Þingmaður Flokkur \n",
"1 1012 Bjarkey Olsen Gunnarsdóttir Vinstri græn \n",
"2 1018 Sigríður Á. Andersen Sjálfstæðisflokkur\n",
"3 1031 Steinunn Þóra Árnadóttir Vinstri græn \n",
"4 1157 Ásmundur Friðriksson Sjálfstæðisflokkur\n",
"5 1158 Björt Ólafsdóttir Björt framtíð \n",
"6 1159 Brynhildur Pétursdóttir Björt framtíð "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"head(flokkar)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## T-SNE high dimensional visualization \n",
"\n",
"Nú get ég keyrt T-SNE reikniritið á gögnin. 59 þingmenn og 1289 málefni, semsagt gögnin hafa N = 1290 víddir. Aðeins 59 þingmenn af 63 voru með meira en 90% kosningahlutfall."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": false
},
"outputs": [],
"source": [
"library(Rtsne)\n",
"library(plotly,quietly = TRUE)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"isltsne <- Rtsne(dff,\n",
" check_duplicates = FALSE, \n",
" theta=0, \n",
" perplexity = 19, \n",
" max_iter = 5000,\n",
" pca = FALSE)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"flokkar$x <- isltsne$Y[,1] / max(isltsne$Y[,1]) #normalized\n",
"flokkar$y <- isltsne$Y[,2] / max(isltsne$Y[,2])"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\nK4fDsXbt2nHjxqWlpY0dO/bYsWPz589v27ZtTk7Ok08+KYSodrg//OEPt99+e3Tb/Pz83//+\n9+PGjfP5fMuWLfv73//elOekuRHsAAAJ88/dKev32ct8ckSIEo/hrX+nfLDfrnZRuDApGJSO\nHanZLh88EO+uFEUJhUKhUKi0tPTll1/evXv3rFmzqq1wxRVXHD58eNWqVatWrSoqKpoyZYqi\nKNF7582bN2TIkAULFmzdurWwsHDJkiXr1q2ruvm6deumTJny4IMPfvzxx9U2EULMnj3b7/e/\n/vrrb775ZiQSmTdvXmzDe++9d/HixW+99db+/ft79uzpdDo3btw4bdq0BQsWlJeX13U4RVEu\nv/zykpKSd999d926dZdccsmCBQsCgUC8T0vSMBQLAEiMU+XGHUet1Ro/2G8fme9zWBRVSkJD\nKWFR64WfSjjePT3yyCOPPPJIbPGBBx4YPHhw1RU2b968c+fOQ4cO5eXlCSFWrVrVpUuXTZs2\njR07VggxderUJUuWRNeUJMlgMBgMhqqbGwwGWZZlWTYav8swsU0URZk1a9b06dN79OghhDh1\n6tT8+fNjG86fPz96htzVV1+9YcOG3/3ud5IkLVq06IUXXjh58mT0so+ah9u0adNXX31VVFTU\nqVMnIcSKFSu6dOny/vvvX3755fE+M8lBsAMAJMaJUkPNRkURp8sN3XMIdi1axGKN5LSRzp2t\n3t4pL95d/fSnP73zzjuFEJFI5PDhww888MC5c+eef/752Ar79u3Lz8+PpjohRF5eXufOnfft\n2xcNdrHz8xoutoksywsXLty2bdv69et37NixevXqqqvl5+dHb2RkZOTn50uSFL1d/8737dvX\npUuXaKoTQuTm5nbu3PnAgbg7MpOGYAcADRXwnQp4j5ltuWZre7VraYmsptrbLUbOs9OA0JRp\nppefq9qidOuh9O4X737at28/bNiw6O3hw4fLsjxz5sw//vGP0QsRaiXLcigUit52OBzxHjG2\nicfjmTx5cnFx8fTp02fMmHHJJZfcf//9sdWiSa7m7fpJklRtEjtJksxmc7xFJg3BDgAuLOgv\nPvjFXcUn3o4uZrS7ovPAx4zmOj+oWqeuWQG7OeIJ/OAjM9Me7pgWUqskNFwkLz/089vkTR/K\nZ08rNnukd7/wxaNFgwNQnbuNRIQQVZNQr169ioqKjh8/Hu0GO3bsWFFRUd++fZt4ICHERx99\n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\nTtepd5Tw95PXS7KlfY974tqJUY7cMrrs/W9S9p42+UNSXmbost6e9qktrscuyurobnXoYUJX\nQE8IdgCQALbUPt2GvXR0z6/8lYeFEGZbx9x+f3BkDK+6TkgRu09YT5QaHNZI33aBds5aEluK\nOTJtgHvagCSVDUBnCHYAkBhpOeMGjNvm9xyTpIjZlivED+afc/vlZz5OO+f+7kzz9/fZL+9X\neUlXnfw8JYAWgosnACCRLPZcsy2vWqoTQvxztyOW6oQQIUWs+cp+soxv1wASiWAHAM0upEhf\n15iOLqRIX55qaXPUAdA2viwCQLMLhISi1NLuD7a4nwuDjlmt1sTusNoMwGgJCHYA0Oxs5kia\nTSnzVv8UbJ+W4KmDgXqQw1oDgh0ANDtJiCv7V76y3Vm1sVN6aEinOH77HGgin8+n1Np13FgW\ni4VfnmhpCHYAkAwDO/hnDxPv7bMXuw1mY6R/+8AV/SqNdKAgiRRFSfjvy6GlIdgBQJIM6ugf\n1NEfVCSjHOHcOgDNgWAHAEllkiNqlwBAtxgGAAAA0AmCHQAAgE4Q7AAAAHSCYAcAAKATBDsA\nAJAYM2bMkKrIy8u78847KyoqYiv88Y9/zMvLO3TokIpF6htXxQIAgO+dDBRnGJ022dK4zUeN\nGvXYY48JIYLB4Oeff/6b3/zG6/U+//zzQoj9+/e/+OKLGzdu7NKlSwP3Nnbs2MmTJz/wwAON\nK6YVUj/YRSKRV155ZePGjeFweNSoUT/72c9qTmPdkHUAAEBT/O/ptx4+/sr5UJksyZemDX+0\ny+2dLe3i3UlGRsbFF18cvf2jH/2ouLh4+fLlzz33nCRJ6enpn3zySVZWVqILx/fUH4pduXLl\n2rVrf/azn/3yl7/8+OOPX3jhhcatAwAAGu3ls+/eW/TU+VCZEEKJKOtKP7tm3yKP0tRfvUtP\nT/d6vdGfMvvDH/5w++23R9utVuvWrVsvvfTSq666Sgixb9++SZMmpaWlOZ3OwsLCnTt3CiGG\nDRu2cePGBx98cOLEiXWtU3NXrZzKwS4cDq9Zs+aGG24YNWrUiBEjbr755g8++MDv98e7DgAA\naLSIiPzu2IvVGvd7j604tz7eXSmKEgqFQqGQz+fbsmXLk08+OXbs2FrH2ebNmzdkyJAFCxYI\nIWbPnu33+19//fU333wzEonMmzdPCLF169bCwsIlS5asW7eurnVq7qqVa+hQ7G233TZnzpyR\nI0dKUiJ/CKeoqKisrKygoCC6WFBQ4PV69+/fP2DAgLjWAQAAjVYacp8Numq2f+M5Gu+u1q5d\nazKZYouDBw9+5plnal1z6tSpS5YsEUIoijJr1qzp06f36NFDCHHq1Kn58+cLIYxGoyRJBoPB\nYDDUtU61XaGhwe5///d/n3nmmS5dusyePXv27Nm9e/dOyOFdLpcQIjbcbrfbrVZraWlpXOtU\nVlb+/ve/jy2OGzdu7NixdR3RaDSmpKRE+4S1QpIkWZadTqfahcRBlmXN1Rz9Qmmz2SyWRp4y\nrIro8xyJaOxXqgwGg+ZeHtEPGLULiYPRaBRCpKSkaOvlIUmStl4b0f4Ok8mkrbKrSZGtZtkU\nUILV2jNNqfHuavTo0U888UT0dnZ2dufOnevqEoqdiifL8sKFC7dt27Z+/fodO3asXr265sr1\nrxPbFRoa7E6dOvXaa6+tXLly6dKlS5YsKSgomDNnzrXXXtu+ffumHN7tdptMpqrvlXa7vep1\n0Q1ZJxAIvP/++7HFrl271v/BLMvqn1kYL0mStJU2orT1KRhV9YumVpjNZrVLiJssy7ykk0OL\nLw+Nvja0+PKIMcum6ZljVha/X7XRJlumZ42Jd1fp6enDhg1ryJoOhyN6w+PxTJ48ubi4ePr0\n6TNmzLjkkkvuv//+aivXv05sV2hosMvJyfnlL3/5y1/+8sSJE6+++urKlSsXLFiwcOHCiRMn\nzpkz56qrrmrcNxWHwxEMBsPhcOz/wePxVPvzXHCd9PT0Dz/8MLaoKMr58+frOqLT6fR6vaFQ\nqBHVqiUzM1NRlGodmS2cyWSyWCxut1vtQuJgs9mi3xkCgYDatcQhPT29rKxMQ10ykiRlZmYG\ng8Hy8nK1a4mD1WqVZdnj8ahdSBwcDofFYiktLQ2Hw2rXEoeMjIzoQI1WGAyG9PR0n89XWVmZ\nqH2qct3oI11uP+A79rn7m+iiTbY81uWOXra8JBz6o48+2rFjh8vlimb6p59+unHrQDRiupOO\nHTsuWLBgwYIF27Ztmzt37nvvvffee+/ZbLZp06bdddddI0eOjGtvGRkZQgiXy5WdnS2E8Pl8\nPp8v2tjwdSRJSk39vq/Y4/HU/+YbiUQ09CkYo62aI/+hdiFx02LZWqxZYJ8d0gAAIABJREFU\n8JJuftFqNVe20NprI0ajZcekGVI+6Pff60q3fVl5MMuUNiljRK65TXIOnZKS4vV6ly9fPnLk\nyA0bNjzxxBMVFRWff/55QUGBwWA4cODA6dOn61knOUVqRdyDkkePHn3yySfHjRs3cuTIr7/+\nukuXLvfee+8NN9ywdu3aUaNGxZug8/Pz09LSdu3aFV3cvXu31WqNnhcZ1zoAAKCJZEmeknHx\n/Z1m/7ztj5OW6oQQY8aMWbRo0bJly6688sovvvhiy5Ytw4cPv++++4QQN91007/+9a9bb721\nnnVQldTAbxh79+5944033njjjR07dgghevbsOWPGjGuuuWbIkCHRkyJLS0snTZp0+PDhc+fO\nxVXB3//+9/Xr199///2yLP/5z3+OTmgihFi3bp3f7586dWo969Sq/h671NRUj8ejraHYrKws\nRVG0NTahxaFYu91ut9vLy8u1NRSbkZFRWlqqoa4CSZKysrKCwWBZWZnatcRBo0OxVqvV5XJp\nayg2MzOzpKRE7SriYDQao0OxCXzHi45QJZzH40nsi8Fut2v6zEJdauhQbN++fYUQ/fr1++1v\nfztjxox+/fpVu8glPT195MiRp0+fjreC66+/PhwOP/bYY4qijB49eu7cudH2LVu2lJeXR4Nd\nXesAAAAgpqE9dkuXLp0xY0avXr3qWSccDkcikegF9iqix64loMcuaeixSw567JKGHjtBjx2a\noKEhbNGiRRdch78uAACAirQ3oxsAAABqRbADAADQCYIdAACAThDsAAAAdELlK1gBAEBy2O32\nxF5BX23iM7QEBDsAAFoLopjuEewAAGgVmMeuNeAcOwAAAJ0g2AEAAOgEwQ4AAEAnCHYAAAA6\nQbADAADQCYIdAACAThDsAAAAdIJgBwAAEiMSibz00kvDhg1zOp1t27a97LLLNm/enJA9b9q0\nKTc3d8yYMXWtIEnS1q1b9+3bJ0lSaWlp1buKiookSXr22WfjPWijN1QRwQ4AAHznaCC4prT8\nM7fHpyiN2Hz58uW/+MUvZs6c+eGHH65cubJTp04TJkzYvn170wtbvnz5oEGDVq1a1YhtU1NT\nFy5cOGjQoKRtqCJ+eQIAAIhgJHL3keOvnHdFF/PMpmfzcy9xOuLayTPPPHPPPff86le/ii6O\nHTv20KFDzz///PDhw5tYnsfjGTx4cLt27RqxbWZm5qOPPprMDVVEjx0AABBLT56JpTohxNFA\n8IZDR08FgnHt5Ny5c1WHQSVJeuqpp26++ebo4r59+yZNmpSWluZ0OgsLC3fu3Bltdzgca9eu\nHTduXFpa2tixY48dOzZ//vy2bdvm5OQ8+eSTQoiJEyeuXr166dKlF1988f33319YWBg7xO9/\n//t+/fpFIpGaxWzbti0tLe3pp58WQlit1g0bNkRvbNmyZfr06RkZGd26dXvttdeiKx87duzK\nK6/MyMgYNmzY5s2bHQ7Hnj17GrJhS0OwAwCgtQtHIv97trha4/lQaFVJaa3r1+WnP/3pX/7y\nl8suu2zFihWnTp0SQvTt2zfWXTd79my/3//666+/+eabkUhk3rx5sQ3vvffexYsXv/XWW/v3\n7+/Zs6fT6dy4ceO0adMWLFhQXl6+bt26KVOmPPjggx9//PHMmTM//vjj06dPCyEikciKFStu\nuOEGSZKqVbJr167LLrvsoYceuu2226rddeutt1577bWbN28ePnz4nDlzvF5vMBgcP358JBJZ\ns2bNr3/967lz53q93pqPruaGcT05yUGwAwCgtSsLK+7aTqo7HgjEtZ9HHnlkxYoVVqv19ttv\n79ChQ9++fZctWxYIBIQQiqLMmjXr+eefnzhx4oQJE2655ZbDhw/HNpw/f35hYeHYsWOvvvrq\nrl27/u53v+vdu/eiRYsURTl58qTBYJBlWZZlo9E4bNiwvLy8N998Uwixa9eub775Zvbs2dXK\n+Prrry+99NLbbrttwYIFNYu85pprrr322v79+y9evNjv9584ceKtt946c+bMihUrRo4cOX36\n9N/85jdKbc9GzQ3jenKSg2AHAEBrl2aQnYZaIkGexRzXfmRZvu666956663i4uLt27cXFhY+\n9NBDc+bMid618P9v787jo6jy/f+fquotnZA9IbKDKIuyOCxKWEQEVEYQUBDkCoM6zAjMuMA8\n7oAz96v3OogDDC7gxZ/w9asyyi6C4iCCRBRwY1FQRAajBAhr9u5Od1fV74/Wpk06IYEk1VV5\nPf/g0XX6dPUnxUn3O6e2GTPOnDnzwgsv3HfffTNmzIh8YZs2bUIPUlJS2rRpE5qBS0lJqfwW\nkiSNGTMmtCf09ddfHzhwYMuWLSv0GT58uK7rR44ciVpkeAYxLS0t9ODAgQNdu3ZNTEwMLfbt\n27eGL4xBBDsAABo7RZIezMyo0Jhus92dmlzzlXzzzTd33XVXWVmZEEJRlJ49ey5ZsuS5555b\nvXp1SUmJx+MZNGjQAw88cOLEibvuuuupp56KfG3kvtTK+1UrGDNmzPbt28+cOfPGG2/ce++9\n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\nJePHj//www9PnjwZWszLy/v000/Hjh0bWnS5XNu3bw892LVr1+jRo1NSUq688so1a9aEOqxf\nv7579+5xcXGtW7desGCBEKJnz545OTmzZs0aPHhw6IW7d+8eMmTIyJEjI1cY6dixY8OHD09J\nSenZs+eOHTsSEhIOHDhQ+bVbt27t3bt3fHx8q1atHnzwwcLCwgcffLBFixYpKSljx449fvx4\nuOaopcYsgh0AAI2d5BfS0SgZTv62dsFu+PDhbrd77dq1ocX169enpKSEMlkFv//97+++++4d\nO3b06tXrP/7jP7xeb25u7pgxY26++eacnJypU6fOnDlz586du3fvHjBgwJNPPrl58+bQC6dM\nmXLdddc98sgjUQsIBAKDBg3SdX3Tpk2zZ8+ePHmy1+sNPxt+rd/vHzVqVMeOHbds2bJkyZId\nO3a0aNEiPz9/9erVb7311tmzZwcPHuz3+6sqtVbbpIGxKxYAgMZO13ShR2tXo7VWLT4+/o47\n7li5cuX06dOFEOvWrRs9erTdbq/c884777z77ruFEE888cTKlSuPHz+em5sbDAanTZvWrl27\nXr16tW/fvmnTpjabTZIkRVEURQm9cMSIEU8++WRVBbz11lunTp364osvEhMThRDFxcWTJ08O\nPxt+rdfrXbduXXZ2ttvtFkJ8+eWXCxYsWLFihdPpFEKsXr06IyPj0KFDXbt2jVpq+/bta7VZ\nGhLBDgCARs8liSxF5KsV29vUOifcc889t99++/Hjx51O54cffjhr1qyo3Xr16hV6kJaWFnrQ\np0+fvn37du3adeTIkUOGDBkzZkwodVVwww03VPPuBw4c6Nq1ayjVCSH69u0b9bVxcXH9+/ff\nsmXL119/nZubu3v37sLCwtatW4d76rp+9OjRULCrXGoss2Cwk2U5lLiretZut4eDv1lIklTN\nDxWDQn9dma5mIYTdbpckyehaaiE0NnS9dn9VGyi0eU03pG02W/WfLTEoNKQdDoemaUbXUgum\nGxuyLAshTPeJV5l2l0teVBbRoOsd7XrXKJNt1RsyZEhqauqaNWsSExNTUlJuuummqN3i4iqe\nlhEfH//RRx99+umnb7zxxty5c2fMmPHqq68OGzasQreEhIRq3j0YDEZ+hof+dyq/9ocffujX\nr9/IkSPHjx//yCOPLFu2bPHixVu2bInsHE6HlUuNZRYMdpIk2WxV/lyhZ831MScu9kPFIFmW\n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\nhh7PmzevZcuWF31JQkJCIBBQVTWc7TweT0LChXsh2O323r17hxevuOKKaub/FEXRNE2vz6ty\nNLOlR3lfSc6Uk6sprBp2u13X9WoOQzRWohCVfy5JkmRZNtf5y7IsK4oSDAbrdXjUOZvNFrNj\noyoxPqSjkmVZCKFp0U8bik2KosiyzJCub5Ik2Ww2TdPq8BPPbrfX1arQ2DR0sOvWrdtzzz0X\nelzDaYaUlBQhREFBQXp6uhDC5/P5fL5QY0hCQsILL7wQXvR4PEVFRVWtLTEx0ePx1Ounxo2O\nrq0dWRX2xo5NGWTziCJRZWHVSEtL0zTtjWN57xSXFajBa13O36WnpkVMYcYgu93udDpLS0uN\nLqQW3G632+32eDx+f5SL+cWslJSU4uJiE31zS5KUlpYWDAar+T2NQS6XS5Zlj8djdCG1kJCQ\n4HK5SkpKzPUnVmpqqrnGhs1mS05O9vv9dfiJF/q+Ay5BQ1/HzuVyZf7MZqtRrGzTpk1SUtK+\nfftCi/v373e5XFdddVV9lnlZ4mXXK+1md3K1DreMSO77VMvfXc46//jv3Ek/nlhVWLSlpGzh\nmfN9vvv+e/+lTP4BAAALi91j7DZv3lxeXj5ixAhFUW699dbly5c3a9ZMluVly5YNHTo0xg9l\nuCau7baOzx70fp8fON8hrlUbR9blrG1bQdELJ34x/1cQVB85nr++7cV3ZAMAgMYjdoPdrl27\niouLR4wYIYS45557VFVdsGCBpml9+/adPHmy0dVdnE1Surnbd6uLVb0XcQpw2M4yj1fT42RO\nwgIAAD+JlWDXvn37DRs2RLY8/vjj4ceSJE2cOHHixIkNXVZs8Ee7nYMuRFDXf7qZFwAAQOzc\nKxbV6JOYULmxk8sZ9b6uAACg0SIZmMBdGelDU5IqNM5v1tSQYgAAQMwi2JmAJMTazh3+3DS9\ni8vZ3G6/NTHh/Stb93ab70KpAACgXsXKMXaoXpwsz8hIm5FhvquxAwCABsOMHQAAgEUQ7AAA\nACyCYAcAAGARBDsAAACLINgBAABYBMEOAADAIgh2AAAAFkGwAwAAsAiCHQAAgEUQ7AAAACyC\nYAcAAGARBDsAAACLINgBAABYBMEOAADAIgh2AAAAFkGwAwAAsAiCHQAAgEUQ7AAAACyCYAcA\nAGARBDsAAACLINgBAABYBMEOAADAIgh2AAAAFkGwAwAAsAiCHQAAgEUQ7AAAACyCYAcAAGAR\n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\ngg==",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt <- ggplot(flokkar,aes(x,y,group=Þingmaður)) + geom_point(aes(color=Flokkur))\n",
"\n",
"#ggplotly(plt)\n",
"print(plt)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Það er mjög áhugavert að bera saman við gögn frá öðru landi, hér eru svipuð gögn frá Svíþjóð sett fram með 349 þingmönnum og 327 málum."
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": true,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"swe <- read.csv('saenskatkvaedi2016.csv')\n",
"swemat <- as.data.frame.matrix(swe[c(3:329)])\n",
"\n",
"swetsne <- Rtsne(swemat,\n",
" check_duplicates = FALSE, \n",
" theta=0, \n",
" perplexity=19, \n",
" max_iter = 5000,\n",
" pca = FALSE)\n",
"\n",
"swe$x <- swetsne$Y[,1] / max(swetsne$Y[,1])\n",
"swe$y <- swetsne$Y[,2] / max(swetsne$Y[,2])\n",
"\n",
"levels(swe$Flokkur) <- c(\"-\",\"Centerpartiet\",\"Kristdemokraterna\",\"Liberalerna\",\"Moderata samlingspartiet\",\n",
" \"Miljöpartiet\",\"Socialdemokraterna\",\"Sverigedemokraterna\",\"Vänsterpartiet\")"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"image/png": "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\narFYOnfuXL1NUVHRgw8+GB7NcrvdJ0+ebN26dUPXCgBAPfjggw/69ev3+eefT58+ffr06fv2\n7evfv//69esjmrlcrttuu23v3r3vv//+9ddfH+dDNSkrKxs9evTBgwfDh7+gD0k+FKsoyogR\nI954442WLVvKsvzKK68MHz48dGr8+vXrvV7vmDFjunXrVlFR8eyzz95+++1ms3nlypXNmjW7\n4YYbkls5AACxLV++fO/evdW3dOrUKTQrNiwYDD7yyCPNmjXbtWtX6Ljw3Llze/bsOW/evGHD\nhoXPAfV4PGPHjt2xY8f777/ft2/f6j3EeCiGf/7zn48//viSJUtS8DRTXI7kn6J71113BYPB\nZcuWqao6YMCA6dOnh7Zv3br13LlzY8aMsdlsixYteuWVV5555hmz2dyzZ8/Zs2en/jmzAIBG\nbt26devWrau+ZciQIRHBrqSk5PPPP1+8eHH4bL+cnJz77rtvwYIF3377bfv27YUQPp9v4sSJ\nGzZsePrppwsKCqrvHuOh2Gw2289+9jNSnf4kP9hJkjR16tSpU6dGbF+4cGH4drt27Z588skG\nLQsAgMvz+uuvX3JW7IEDB4QQ3bt3r74xdDLcwYMHQ8Huf//3f61Wa3Z29u9+97uf/OQnNpst\n3DLGQ7G1adPGarXW6uXgikBUBwAgtYQG0gKBQOiu2Wx+//33f/nLX5aUlCxdurR6yxgPRfB4\nPNXvptrahEgUgh0AAEnToUMHIcTnn39efeNnn30mhAhPJbz77rv79es3ffr0G2+88Ze//OXB\ngwfDLWM8pKpq+Lamafv376/XF4IUQbADACBpOnTo0KVLl5deeim8jNeJEydeeumlrl27hhci\nCQ3gybL84osv+ny+hx9+OLxwZk0P2Wy2L774wufzhZqtXbv266+/bthXhuQg2AEAkDSKovzq\nV786fvz49ddf/9hjj82bN+/6668/derUc889d/FVdnr37n3fffetW7du7dq1sR8aOnTo4cOH\nb7311pdffnnu3Lk//vGPBw0a1DCvCMlFsAMAIJlGjhz58ccfd+3a9c9//vNrr712zTXXbNmy\n5ZZbbonaeMmSJU2aNHn44YfdbneMh+bPn//II4/s27fviSee+Pzzz9955x2uUdtISCl1HaSE\nuORVsLikWDy4pFicuKRYPLikWJy4pFicuKQYUBNG7AAAAHSCYAcAAKATBDsAAC5XmMoAACAA\n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",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sweplt <- ggplot(data = swe,aes(x,y, group=Nafn)) + geom_point(aes(color = Flokkur)) \n",
"\n",
"#ggplotly(sweplt)\n",
"print(sweplt)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Getum einnig notað 3D:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"isl3d <- Rtsne(dff,\n",
" dims = 3,\n",
" check_duplicates = FALSE, \n",
" theta=0, \n",
" perplexity = 19, \n",
" max_iter = 5000,\n",
" pca = FALSE)\n",
"flokkar$x <- isl3d$Y[,1] / max(isl3d$Y[,1]) #normalized\n",
"flokkar$y <- isl3d$Y[,2] / max(isl3d$Y[,2])\n",
"flokkar$z <- isl3d$Y[,3] / max(isl3d$Y[,3])\n",
"\n",
"p <- plot_ly(flokkar, x = ~x, y = ~y, z = ~z, color = ~Flokkur) %>%\n",
" add_markers() %>%\n",
" layout(scene = list(xaxis = list(title = 'x'),\n",
" yaxis = list(title = 'y'),\n",
" zaxis = list(title = 'z')))"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
"<!DOCTYPE html>\n",
"<html>\n",
"<head>\n",
"<meta charset=\"utf-8\" />\n",
"<script src=\"data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gZXZhbCgiKCIgKyB0YXNrICsgIikiKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5pdFNpemluZyhlbCkgewogICAgdmFyIHNpemluZyA9IHNpemluZ1BvbGljeShlbCk7CiAgICBpZiAoIXNpemluZykKICAgICAgcmV0dXJuOwoKICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsKICAgIGlmICghY2VsKQogICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZihzaXppbmcucGFkZGluZykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOwogICAgfQoKICAgIGlmIChzaXppbmcuZmlsbCkgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGlmIChjZWwpIHsKICAgICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHZhciBwYWQgPSB1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKTsKICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUuYm90dG9tID0gcGFkLmJvdHRvbSArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7CiAgICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwoKICAgIH0gZWxzZSB7CiAgICAgIGVsLnN0eWxlLndpZHRoID0gcHgoc2l6aW5nLndpZHRoKTsKICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKICAgIH0KICB9CgogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzCiAgdmFyIGRlZmF1bHRzID0gewogICAgZmluZDogZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7CiAgICB9LAogICAgcmVuZGVyRXJyb3I6IGZ1bmN0aW9uKGVsLCBlcnIpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwoKICAgICAgdGhpcy5jbGVhckVycm9yKGVsKTsKCiAgICAgIC8vIEFkZCBhbGwgdGhlc2UgZXJyb3IgY2xhc3NlcywgYXMgU2hpbnkgZG9lcwogICAgICB2YXIgZXJyQ2xhc3MgPSAic2hpbnktb3V0cHV0LWVycm9yIjsKICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7CiAgICAgICAgLy8gdXNlIHRoZSBjbGFzc2VzIG9mIHRoZSBlcnJvciBjb25kaXRpb24gYXMgQ1NTIGNsYXNzIG5hbWVzCiAgICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgIiArICQubWFwKGFzQXJyYXkoZXJyLnR5cGUpLCBmdW5jdGlvbih0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOwogICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgfQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7CgogICAgICAvLyBJcyBlbCBpbmxpbmUgb3IgYmxvY2s/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQoKICAgIC8vIFN1cHBvcnQgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zLiBPbGQtc3R5bGUgY2xhc3MtYm91bmQKICAgIC8vIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldCAib2JqZWN0IiBwZXIgd2lkZ2V0IHBlciB0eXBlL2NsYXNzIG9mCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cwogICAgLy8gdGFrZSBlbCBhbmQgaW5zdGFuY2UgYXJndW1lbnRzLCBiZWNhdXNlIHRoZSB3aWRnZXQgb2JqZWN0IGNhbid0CiAgICAvLyBzdG9yZSB0aGVtLiBOZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0CiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0CiAgICAvLyBwcm92aWRlIHJlbmRlclZhbHVlIG9yIHJlc2l6ZSBtZXRob2RzIGF0IGFsbCwganVzdCB0aGUgc2luZ2xlIG1ldGhvZAogICAgLy8gICBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4KICAgIC8vIFRoaXMgZW5hYmxlcyBhIGZhciBtb3JlIG5hdHVyYWwgcHJvZ3JhbW1pbmcgc3R5bGUgZm9yIHRoZSB3aWRnZXQKICAgIC8vIGF1dGhvciwgd2hvIGNhbiBzdG9yZSBwZXItaW5zdGFuY2Ugc3RhdGUgdXNpbmcgZWl0aGVyIE9PLXN0eWxlCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzCiAgICAvLyBpcyBpbiBjb250cmFzdCB0byB3aGF0IGNhbiBvbmx5IGJlIGNhbGxlZCBDLXN0eWxlIHBzZXVkby1PTyB3aGljaCBpcwogICAgLy8gd2hhdCB3ZSByZXF1aXJlZCBiZWZvcmUpLgogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgewogICAgICBkZWZpbml0aW9uID0gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmaW5pdGlvbik7CiAgICB9CgogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4KICAgICAgLy8gVGhlIGRlZmluaXRpb24gaXRzZWxmIHdpbGwgbm90IGJlIHRoZSBvdXRwdXQgYmluZGluZywgaW5zdGVhZAogICAgICAvLyB3ZSB3aWxsIG1ha2UgYW4gb3V0cHV0IGJpbmRpbmcgb2JqZWN0IHRoYXQgZGVsZWdhdGVzIHRvIHRoZQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kCiAgICAgIC8vIG5hbWUgKHJlbmRlclZhbHVlKSBmb3IgaHRtbHdpZGdldHMgZGVmaW5pdGlvbiBhbmQgU2hpbnkgYmluZGluZ3MKICAgICAgLy8gYnV0IHRoZXkgYWN0dWFsbHkgaGF2ZSBxdWl0ZSBkaWZmZXJlbnQgc2VtYW50aWNzICh0aGUgU2hpbnkKICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0CiAgICAgIC8vIHN0cmlwcyBvZmYgYmVmb3JlIGNhbGxpbmcgaHRtbHdpZGdldHMgcmVuZGVyVmFsdWUpLiBXZSBjYW4ndAogICAgICAvLyBqdXN0IGlnbm9yZSB0aGUgZGlmZmVyZW5jZSBiZWNhdXNlIGluIHNvbWUgd2lkZ2V0cyBpdCdzIGhlbHBmdWwKICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZgogICAgICAvLyB3ZSdyZSBub3QgZGVsZWdhdGluZywgdGhlbiB0aGF0IGNhbGwgd2lsbCBnbyB0byB0aGUgU2hpbnkKICAgICAgLy8gdmVyc2lvbiBpbnN0ZWFkIG9mIHRoZSBodG1sd2lkZ2V0cyB2ZXJzaW9uLgoKICAgICAgLy8gTWVyZ2UgZGVmYXVsdHMgd2l0aCBkZWZpbml0aW9uLCB3aXRob3V0IG11dGF0aW5nIGVpdGhlci4KICAgICAgdmFyIGJpbmRpbmdEZWYgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKCiAgICAgIC8vIFRoaXMgb2JqZWN0IHdpbGwgYmUgb3VyIGFjdHVhbCBTaGlueSBiaW5kaW5nLgogICAgICB2YXIgc2hpbnlCaW5kaW5nID0gbmV3IFNoaW55Lk91dHB1dEJpbmRpbmcoKTsKCiAgICAgIC8vIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgd2UnbGwgd2FudCB0byBzaW1wbHkgdXNlIHRoZSBiaW5kaW5nRGVmJ3MKICAgICAgLy8gdmVyc2lvbiBvZiBtZXRob2RzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwKICAgICAgLy8gbWV0aG9kcyBpbiB0aGUgZnV0dXJlLCBhbmQgd2Ugd2FudCB0aGVtIHRvIGJlIG92ZXJyaWRlYWJsZSBieQogICAgICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcgZGVmaW5pdGlvbnMsIHRoZW4gd2UnbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGlzCiAgICAgIC8vIGxpc3QuCiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImdldElkIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVDaGFuZ2UiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInJlbmRlckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImNsZWFyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7CgogICAgICAvLyBUaGUgZmluZCwgcmVuZGVyVmFsdWUsIGFuZCByZXNpemUgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHksIGJlY2F1c2Ugd2UKICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4KCiAgICAgIHNoaW55QmluZGluZy5maW5kID0gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7CgogICAgICAgIC8vIE9ubHkgcmV0dXJuIGVsZW1lbnRzIHRoYXQgYXJlIFNoaW55IG91dHB1dHMsIG5vdCBzdGF0aWMgb25lcwogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7CgogICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuCiAgICAgICAgLy8gU2luY2UgdGhlcmUgbWlnaHQgYmUgbG90cyBvZiBkaWZmZXJlbnQgaHRtbHdpZGdldHMgYmluZGluZ3MsIHdlCiAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAvLyB0aW1lcy4KICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IGR5bmFtaWNSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgIHJldHVybiBkeW5hbWljUmVzdWx0czsKICAgICAgfTsKCiAgICAgIC8vIFdyYXAgcmVuZGVyVmFsdWUgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzbid0CiAgICAgIC8vIHN1cHBvcnRlZCBuYXRpdmVseSBieSBTaGlueSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCgogICAgICBzaGlueUJpbmRpbmcucmVuZGVyVmFsdWUgPSBmdW5jdGlvbihlbCwgZGF0YSkgewogICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5ldmFscyAmJiBpIDwgZGF0YS5ldmFscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICghYmluZGluZ0RlZi5yZW5kZXJPbk51bGxWYWx1ZSkgewogICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICBpbml0U2l6aW5nKGVsKTsKCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICBpZiAoYmluZGluZ0RlZi5pbml0aWFsaXplKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiaW5kaW5nRGVmLmluaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBTaGlueS5yZW5kZXJEZXBlbmRlbmNpZXMoZGF0YS5kZXBzKTsKICAgICAgICBiaW5kaW5nRGVmLnJlbmRlclZhbHVlKGVsLCBkYXRhLngsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7CiAgICAgIH07CgogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQKICAgICAgaWYgKGJpbmRpbmdEZWYucmVzaXplKSB7CiAgICAgICAgc2hpbnlCaW5kaW5nLnJlc2l6ZSA9IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuCiAgICAgICAgICAvLyBjYWxsZWQsIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3Igd2lkZ2V0cy4KICAgICAgICAgIGlmIChlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgU2hpbnkub3V0cHV0QmluZGluZ3MucmVnaXN0ZXIoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLm5hbWUpOwogICAgfQogIH07CgogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogIGZ1bmN0aW9uIHNjaGVkdWxlU3RhdGljUmVuZGVyKCkgewogICAgaWYgKCFzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQpIHsKICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfQoKICAvLyBSZW5kZXIgc3RhdGljIHdpZGdldHMgYWZ0ZXIgdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmcKICAvLyBTdGF0aWNhbGx5IHJlbmRlciBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2YgdGhpcyB3aWRnZXQncyBjbGFzcwogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBiaW5kaW5ncyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgewogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOwogICAgICBmb3JFYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdmFyIHNpemVPYmogPSBpbml0U2l6aW5nKGVsLCBiaW5kaW5nKTsKCiAgICAgICAgaWYgKGhhc0NsYXNzKGVsLCAiaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOwoKICAgICAgICB2YXIgaW5pdFJlc3VsdDsKICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7CiAgICAgICAgICBpbml0UmVzdWx0ID0gYmluZGluZy5pbml0aWFsaXplKGVsLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICApOwogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIGluaXRSZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGJpbmRpbmcucmVzaXplKSB7CiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCiAgLy8gV2FpdCB1bnRpbCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGxvYWRlZCB0byByZW5kZXIgdGhlIHdpZGdldHMuCiAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsKICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgfSwgZmFsc2UpOwogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9CiAgICB9KTsKICB9CgoKICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0QXR0YWNobWVudFVybCA9IGZ1bmN0aW9uKGRlcG5hbWUsIGtleSkgewogICAgLy8gSWYgbm8ga2V5LCBkZWZhdWx0IHRvIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSAxOwoKICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0YWNobWVudCAiICsgZGVwbmFtZSArICIvIiArIGtleSArICIgbm90IGZvdW5kIGluIGRvY3VtZW50Iik7CiAgICB9CiAgICByZXR1cm4gbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyA9IGZ1bmN0aW9uKGRmKSB7CiAgICB2YXIgbmFtZXMgPSBbXTsKICAgIHZhciBsZW5ndGg7CiAgICBmb3IgKHZhciBuYW1lIGluIGRmKSB7CiAgICAgICAgaWYgKGRmLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOwogICAgICAgIGlmICh0eXBlb2YoZGZbbmFtZV0pICE9PSAib2JqZWN0IiB8fCB0eXBlb2YoZGZbbmFtZV0ubGVuZ3RoKSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGl0ZW07CiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBsZW5ndGg7IHJvdysrKSB7CiAgICAgICAgaXRlbSA9IHt9OwogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsKICAgICAgICAgICAgaXRlbVtuYW1lc1tjb2xdXSA9IGRmW25hbWVzW2NvbF1dW3Jvd107CiAgICAgICAgfQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEID0gZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5OwogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gZXZhbCgiKCIgKyBvW3BhcnRdICsgIikiKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIC8vIFJldHJpZXZlIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4KICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0Iik7CiAgfTsKCiAgLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudCwgaWYgYW55LiBJZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIG51bGwgaXMgcmV0dXJuZWQuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmQgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgZWwgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChlbCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UoZWwpOwogICAgfQogIH07CgogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZAogIC8vIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2VzIChpLmUuIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdAogIC8vIG1hdGNoIHRoZSBzZWxlY3RvciBkb24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSFRNTFdpZGdldAogIC8vIGluc3RhbmNlLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIG51bGxzLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kQWxsID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIG5vZGVzID0gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRzLnB1c2god2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKG5vZGVzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB2YXIgcG9zdFJlbmRlckhhbmRsZXJzID0gW107CiAgZnVuY3Rpb24gaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCkgewogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBwb3N0UmVuZGVySGFuZGxlcnMuc2hpZnQoKTsKICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICBoYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIHBvc3RSZW5kZXJIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTsKICB9OwoKICAvLyBUYWtlcyBhIG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9uLCBhbmQgcmV0dXJucyBhbgogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nCiAgLy8gdG8gcmV3cml0ZSBhbGwgdGhlIGxvZ2ljIGluIHRoaXMgZmlsZSB0byBhY2NvbW9kYXRlIGJvdGgKICAvLyB0eXBlcyBvZiBkZWZpbml0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7CiAgICB2YXIgcmVzdWx0ID0gewogICAgICBuYW1lOiBkZWZuLm5hbWUsCiAgICAgIHR5cGU6IGRlZm4udHlwZSwKICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICByZXR1cm4gZGVmbi5mYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSwKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXJWYWx1ZSh4KTsKICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICB9CiAgICB9OwoKICAgIGlmIChkZWZuLmZpbmQpCiAgICAgIHJlc3VsdC5maW5kID0gZGVmbi5maW5kOwogICAgaWYgKGRlZm4ucmVuZGVyRXJyb3IpCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7CiAgICBpZiAoZGVmbi5jbGVhckVycm9yKQogICAgICByZXN1bHQuY2xlYXJFcnJvciA9IGRlZm4uY2xlYXJFcnJvcjsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfSkoKTsKCg==\"></script>\n",
"<link href=\"data:text/css;charset=utf-8,%0Aslide%3Anot%28%2Ecurrent%29%20%2Eplotly%2Ehtml%2Dwidget%7B%0Adisplay%3A%20none%3B%0A%7D%0A\" rel=\"stylesheet\" />\n",
"<script src=\"data:application/x-javascript;base64,LyoqCiogcGxvdGx5LmpzIHYxLjE2LjMKKiBDb3B5cmlnaHQgMjAxMi0yMDE2LCBQbG90bHksIEluYy4KKiBBbGwgcmlnaHRzIHJlc2VydmVkLgoqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQoqLwohZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNle3ZhciBlO2U9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLGUuUGxvdGx5PXQoKX19KGZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uIGUodCxyLG4pe2Z1bmN0aW9uIGkoYSxzKXtpZighclthXSl7aWYoIXRbYV0pe3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFzJiZsKXJldHVybiBsKGEsITApO2lmKG8pcmV0dXJuIG8oYSwhMCk7dmFyIHU9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrYSsiJyIpO3Rocm93IHUuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsdX12YXIgYz1yW2FdPXtleHBvcnRzOnt9fTt0W2FdWzBdLmNhbGwoYy5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciByPXRbYV1bMV1bZV07cmV0dXJuIGkocj9yOmUpfSxjLGMuZXhwb3J0cyxlLHQscixuKX1yZXR1cm4gclthXS5leHBvcnRzfWZvcih2YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxhPTA7YTxuLmxlbmd0aDthKyspaShuW2FdKTtyZXR1cm4gaX0oezE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc3JjL3Bsb3RseSIpLGk9eyJYLFggZGl2IjoiZm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO21hcmdpbjowO3BhZGRpbmc6MDsiLCJYIGlucHV0LFggYnV0dG9uIjoiZm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOyIsIlggaW5wdXQ6Zm9jdXMsWCBidXR0b246Zm9jdXMiOiJvdXRsaW5lOm5vbmU7IiwiWCBhIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCBhOmhvdmVyIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCAuY3Jpc3AiOiJzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczsiLCJYIC51c2VyLXNlbGVjdC1ub25lIjoiLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7IiwiWCBzdmciOiJvdmVyZmxvdzpoaWRkZW47IiwiWCBzdmcgYSI6ImZpbGw6IzQ0N2FkYjsiLCJYIHN2ZyBhOmhvdmVyIjoiZmlsbDojM2M2ZGM1OyIsIlggLm1haW4tc3ZnIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7IiwiWCAubWFpbi1zdmcgLmRyYWdsYXllciI6InBvaW50ZXItZXZlbnRzOmFsbDsiLCJYIC5jdXJzb3ItcG9pbnRlciI6ImN1cnNvcjpwb2ludGVyOyIsIlggLmN1cnNvci1jcm9zc2hhaXIiOiJjdXJzb3I6Y3Jvc3NoYWlyOyIsIlggLmN1cnNvci1tb3ZlIjoiY3Vyc29yOm1vdmU7IiwiWCAuY3Vyc29yLWNvbC1yZXNpemUiOiJjdXJzb3I6Y29sLXJlc2l6ZTsiLCJYIC5jdXJzb3Itcm93LXJlc2l6ZSI6ImN1cnNvcjpyb3ctcmVzaXplOyIsIlggLmN1cnNvci1ucy1yZXNpemUiOiJjdXJzb3I6bnMtcmVzaXplOyIsIlggLmN1cnNvci1ldy1yZXNpemUiOiJjdXJzb3I6ZXctcmVzaXplOyIsIlggLmN1cnNvci1zdy1yZXNpemUiOiJjdXJzb3I6c3ctcmVzaXplOyIsIlggLmN1cnNvci1zLXJlc2l6ZSI6ImN1cnNvcjpzLXJlc2l6ZTsiLCJYIC5jdXJzb3Itc2UtcmVzaXplIjoiY3Vyc29yOnNlLXJlc2l6ZTsiLCJYIC5jdXJzb3Itdy1yZXNpemUiOiJjdXJzb3I6dy1yZXNpemU7IiwiWCAuY3Vyc29yLWUtcmVzaXplIjoiY3Vyc29yOmUtcmVzaXplOyIsIlggLmN1cnNvci1udy1yZXNpemUiOiJjdXJzb3I6bnctcmVzaXplOyIsIlggLmN1cnNvci1uLXJlc2l6ZSI6ImN1cnNvcjpuLXJlc2l6ZTsiLCJYIC5jdXJzb3ItbmUtcmVzaXplIjoiY3Vyc29yOm5lLXJlc2l6ZTsiLCJYIC5tb2RlYmFyIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDtyaWdodDoycHg7ei1pbmRleDoxMDAxO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwwLjcpOyIsIlggLm1vZGViYXItLWhvdmVyIjoib3BhY2l0eTowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstbW96LXRyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7LW8tdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczt0cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzOyIsIlg6aG92ZXIgLm1vZGViYXItLWhvdmVyIjoib3BhY2l0eToxOyIsIlggLm1vZGViYXItZ3JvdXAiOiJmbG9hdDpsZWZ0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW4tbGVmdDo4cHg7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDsiLCJYIC5tb2RlYmFyLWdyb3VwOmZpcnN0LWNoaWxkIjoibWFyZ2luLWxlZnQ6MHB4OyIsIlggLm1vZGViYXItYnRuIjoicG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE2cHg7cGFkZGluZzozcHggNHB4O2N1cnNvcjpwb2ludGVyO2xpbmUtaGVpZ2h0Om5vcm1hbDtib3gtc2l6aW5nOmJvcmRlci1ib3g7IiwiWCAubW9kZWJhci1idG4gc3ZnIjoicG9zaXRpb246cmVsYXRpdmU7dG9wOjJweDsiLCJYIC5tb2RlYmFyLWJ0biBwYXRoIjoiZmlsbDpyZ2JhKDAsMzEsOTUsMC4zKTsiLCJYIC5tb2RlYmFyLWJ0bi5hY3RpdmUgcGF0aCxYIC5tb2RlYmFyLWJ0bjpob3ZlciBwYXRoIjoiZmlsbDpyZ2JhKDAsMjIsNzIsMC41KTsiLCJYIC5tb2RlYmFyLWJ0bi5tb2RlYmFyLWJ0bi0tbG9nbyI6InBhZGRpbmc6M3B4IDFweDsiLCJYIC5tb2RlYmFyLWJ0bi5tb2RlYmFyLWJ0bi0tbG9nbyBwYXRoIjoiZmlsbDojNDQ3YWRiICFpbXBvcnRhbnQ7IiwiWCBbZGF0YS10aXRsZV06YmVmb3JlLFggW2RhdGEtdGl0bGVdOmFmdGVyIjoicG9zaXRpb246YWJzb2x1dGU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstby10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO2Rpc3BsYXk6bm9uZTtvcGFjaXR5OjA7ei1pbmRleDoxMDAxO3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjExMCU7cmlnaHQ6NTAlOyIsIlggW2RhdGEtdGl0bGVdOmhvdmVyOmJlZm9yZSxYIFtkYXRhLXRpdGxlXTpob3ZlcjphZnRlciI6ImRpc3BsYXk6YmxvY2s7b3BhY2l0eToxOyIsIlggW2RhdGEtdGl0bGVdOmJlZm9yZSI6ImNvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50O3otaW5kZXg6MTAwMjttYXJnaW4tdG9wOi0xMnB4O2JvcmRlci1ib3R0b20tY29sb3I6IzY5NzM4YTttYXJnaW4tcmlnaHQ6LTZweDsiLCJYIFtkYXRhLXRpdGxlXTphZnRlciI6ImNvbnRlbnQ6YXR0cihkYXRhLXRpdGxlKTtiYWNrZ3JvdW5kOiM2OTczOGE7Y29sb3I6d2hpdGU7cGFkZGluZzo4cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxMnB4O3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tcmlnaHQ6LTE4cHg7Ym9yZGVyLXJhZGl1czoycHg7IiwiWCAuc2VsZWN0LW91dGxpbmUiOiJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c2hhcGUtcmVuZGVyaW5nOmNyaXNwRWRnZXM7IiwiWCAuc2VsZWN0LW91dGxpbmUtMSI6InN0cm9rZTp3aGl0ZTsiLCJYIC5zZWxlY3Qtb3V0bGluZS0yIjoic3Ryb2tlOmJsYWNrO3N0cm9rZS1kYXNoYXJyYXk6MnB4IDJweDsiLFk6ImZvbnQtZmFtaWx5OidPcGVuIFNhbnMnO3Bvc2l0aW9uOmZpeGVkO3RvcDo1MHB4O3JpZ2h0OjIwcHg7ei1pbmRleDoxMDAwMDtmb250LXNpemU6MTBwdDttYXgtd2lkdGg6MTgwcHg7IiwiWSBwIjoibWFyZ2luOjA7IiwiWSAubm90aWZpZXItbm90ZSI6Im1pbi13aWR0aDoxODBweDttYXgtd2lkdGg6MjUwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZmZmO3otaW5kZXg6MzAwMDttYXJnaW46MDtiYWNrZ3JvdW5kLWNvbG9yOiM4Yzk3YWY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE0MCwxNTEsMTc1LDAuOSk7Y29sb3I6I2ZmZjtwYWRkaW5nOjEwcHg7IiwiWSAubm90aWZpZXItY2xvc2UiOiJjb2xvcjojZmZmO29wYWNpdHk6MC44O2Zsb2F0OnJpZ2h0O3BhZGRpbmc6MCA1cHg7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDsiLCJZIC5ub3RpZmllci1jbG9zZTpob3ZlciI6ImNvbG9yOiM0NDQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7In07Zm9yKHZhciBvIGluIGkpe3ZhciBhPW8ucmVwbGFjZSgvXiwvLCIgLCIpLnJlcGxhY2UoL1gvZywiLmpzLXBsb3RseS1wbG90IC5wbG90bHkiKS5yZXBsYWNlKC9ZL2csIi5wbG90bHktbm90aWZpZXIiKTtuLkxpYi5hZGRTdHlsZVJ1bGUoYSxpW29dKX19LHsiLi4vc3JjL3Bsb3RseSI6NjEyfV0sMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3VuZG86e3dpZHRoOjg1Ny4xLHBhdGg6Im04NTcgMzUwcTAtODctMzQtMTY2dC05MS0xMzctMTM3LTkyLTE2Ni0zNHEtOTYgMC0xODMgNDF0LTE0NyAxMTRxLTQgNi00IDEzdDUgMTFsNzYgNzdxNiA1IDE0IDUgOS0xIDEzLTcgNDEtNTMgMTAwLTgydDEyNi0yOXE1OCAwIDExMCAyM3Q5MiA2MSA2MSA5MSAyMiAxMTEtMjIgMTExLTYxIDkxLTkyIDYxLTExMCAyM3EtNTUgMC0xMDUtMjB0LTkwLTU3bDc3LTc3cTE3LTE2IDgtMzgtMTAtMjMtMzMtMjNoLTI1MHEtMTUgMC0yNSAxMXQtMTEgMjV2MjUwcTAgMjQgMjIgMzMgMjIgMTAgMzktOGw3Mi03MnE2MCA1NyAxMzcgODh0MTU5IDMxcTg3IDAgMTY2LTM0dDEzNy05MiA5MS0xMzcgMzQtMTY2eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LGhvbWU6e3dpZHRoOjkyOC42LHBhdGg6Im03ODYgMjk2di0yNjdxMC0xNS0xMS0yNnQtMjUtMTBoLTIxNHYyMTRoLTE0M3YtMjE0aC0yMTRxLTE1IDAtMjUgMTB0LTExIDI2djI2N3EwIDEgMCAydDAgMmwzMjEgMjY0IDMyMS0yNjRxMS0xIDEtNHogbTEyNCAzOWwtMzQtNDFxLTUtNS0xMi02aC0ycS03IDAtMTIgM2wtMzg2IDMyMi0zODYtMzIycS03LTQtMTMtNC03IDItMTIgN2wtMzUgNDFxLTQgNS0zIDEzdDYgMTJsNDAxIDMzNHExOCAxNSA0MiAxNXQ0My0xNWwxMzYtMTE0djEwOXEwIDggNSAxM3QxMyA1aDEwN3E4IDAgMTMtNXQ1LTEzdi0yMjdsMTIyLTEwMnE1LTUgNi0xMnQtNC0xM3oiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSwiY2FtZXJhLXJldHJvIjp7d2lkdGg6MWUzLHBhdGg6Im01MTggMzg2cTAgOC01IDEzdC0xMyA1cS0zNyAwLTYzLTI3dC0yNi02M3EwLTggNS0xM3QxMy01IDEyIDUgNSAxM3EwIDIzIDE2IDM4dDM4IDE2cTggMCAxMyA1dDUgMTN6IG0xMjUtNzNxMC01OS00Mi0xMDF0LTEwMS00Mi0xMDEgNDItNDIgMTAxIDQyIDEwMSAxMDEgNDIgMTAxLTQyIDQyLTEwMXogbS01NzItMzIwaDg1OHY3MWgtODU4di03MXogbTY0MyAzMjBxMCA4OS02MiAxNTJ0LTE1MiA2Mi0xNTEtNjItNjMtMTUyIDYzLTE1MSAxNTEtNjMgMTUyIDYzIDYyIDE1MXogbS01NzEgMzU4aDIxNHY3MmgtMjE0di03MnogbS03Mi0xMDdoODU4djE0M2gtNDYybC0zNi03MWgtMzYwdi03MnogbTkyOSAxNDN2LTcxNHEwLTMwLTIxLTUxdC01MC0yMWgtODU4cS0yOSAwLTUwIDIxdC0yMSA1MXY3MTRxMCAzMCAyMSA1MXQ1MCAyMWg4NThxMjkgMCA1MC0yMXQyMS01MXoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSx6b29tYm94Ont3aWR0aDoxZTMscGF0aDoibTEwMDAtMjVsLTI1MCAyNTFjNDAgNjMgNjMgMTM4IDYzIDIxOCAwIDIyNC0xODIgNDA2LTQwNyA0MDYtMjI0IDAtNDA2LTE4Mi00MDYtNDA2czE4My00MDYgNDA3LTQwNmM4MCAwIDE1NSAyMiAyMTggNjJsMjUwLTI1MCAxMjUgMTI1eiBtLTgxMiAyNTBsMCA0MzggNDM3IDAgMC00MzgtNDM3IDB6IG02MiAzNzVsMzEzIDAgMC0zMTItMzEzIDAgMCAzMTJ6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0scGFuOnt3aWR0aDoxZTMscGF0aDoibTEwMDAgMzUwbC0xODcgMTg4IDAtMTI1LTI1MCAwIDAgMjUwIDEyNSAwLTE4OCAxODctMTg3LTE4NyAxMjUgMCAwLTI1MC0yNTAgMCAwIDEyNS0xODgtMTg4IDE4Ni0xODcgMCAxMjUgMjUyIDAgMC0yNTAtMTI1IDAgMTg3LTE4OCAxODggMTg4LTEyNSAwIDAgMjUwIDI1MCAwIDAtMTI2IDE4NyAxODh6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sem9vbV9wbHVzOnt3aWR0aDoxZTMscGF0aDoibTEgNzg3bDAtODc1IDg3NSAwIDAgODc1LTg3NSAweiBtNjg3LTUwMGwtMTg3IDAgMC0xODctMTI1IDAgMCAxODctMTg4IDAgMCAxMjUgMTg4IDAgMCAxODcgMTI1IDAgMC0xODcgMTg3IDAgMC0xMjV6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sem9vbV9taW51czp7d2lkdGg6MWUzLHBhdGg6Im0wIDc4OGwwLTg3NiA4NzUgMCAwIDg3Ni04NzUgMHogbTY4OC01MDBsLTUwMCAwIDAgMTI1IDUwMCAwIDAtMTI1eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LGF1dG9zY2FsZTp7d2lkdGg6MWUzLHBhdGg6Im0yNTAgODUwbC0xODcgMC02MyAwIDAtNjIgMC0xODggNjMgMCAwIDE4OCAxODcgMCAwIDYyeiBtNjg4IDBsLTE4OCAwIDAtNjIgMTg4IDAgMC0xODggNjIgMCAwIDE4OCAwIDYyLTYyIDB6IG0tODc1LTkzOGwwIDE4OC02MyAwIDAtMTg4IDAtNjIgNjMgMCAxODcgMCAwIDYyLTE4NyAweiBtODc1IDE4OGwwLTE4OC0xODggMCAwLTYyIDE4OCAwIDYyIDAgMCA2MiAwIDE4OC02MiAweiBtLTEyNSAxODhsLTEgMC05My05NC0xNTYgMTU2IDE1NiAxNTYgOTItOTMgMiAwIDAgMjUwLTI1MCAwIDAtMiA5My05Mi0xNTYtMTU2LTE1NiAxNTYgOTQgOTIgMCAyLTI1MCAwIDAtMjUwIDAgMCA5MyA5MyAxNTctMTU2LTE1Ny0xNTYtOTMgOTQgMCAwIDAtMjUwIDI1MCAwIDAgMC05NCA5MyAxNTYgMTU3IDE1Ni0xNTctOTMtOTMgMCAwIDI1MCAwIDAgMjUweiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LHRvb2x0aXBfYmFzaWM6e3dpZHRoOjE1MDAscGF0aDoibTM3NSA3MjVsMCAwLTM3NS0zNzUgMzc1LTM3NCAwLTEgMTEyNSAwIDAgNzUwLTExMjUgMHoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSx0b29sdGlwX2NvbXBhcmU6e3dpZHRoOjExMjUscGF0aDoibTE4NyA3ODZsMCAyLTE4Ny0xODggMTg4LTE4NyAwIDAgOTM3IDAgMCAzNzMtOTM4IDB6IG0wLTQ5OWwwIDEtMTg3LTE4OCAxODgtMTg4IDAgMCA5MzcgMCAwIDM3Ni05MzgtMXoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSxwbG90bHlsb2dvOnt3aWR0aDoxNTQyLHBhdGg6Im0wLTEwaDE4MnYtMTQwaC0xODJ2MTQweiBtMjI4IDE0NmgxODN2LTI4NmgtMTgzdjI4NnogbTIyNSA3MTRoMTgydi0xMDAwaC0xODJ2MTAwMHogbTIyNS0yODVoMTgydi03MTVoLTE4MnY3MTV6IG0yMjUgMTQyaDE4M3YtODU3aC0xODN2ODU3eiBtMjMxLTQyOGgxODJ2LTQyOWgtMTgydjQyOXogbTIyNS0yOTFoMTgzdi0xMzhoLTE4M3YxMzh6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sInotYXhpcyI6e3dpZHRoOjFlMyxwYXRoOiJtODMzIDVsLTE3IDEwOHY0MWwtMTMwLTY1IDEzMC02NmMwIDAgMCAzOCAwIDM5IDAtMSAzNi0xNCAzOS0yNSA0LTE1LTYtMjItMTYtMzAtMTUtMTItMzktMTYtNTYtMjAtOTAtMjItMTg3LTIzLTI3OS0yMy0yNjEgMC0zNDEgMzQtMzUzIDU5IDMgNjAgMjI4IDExMCAyMjggMTEwLTE0MC04LTM1MS0zNS0zNTEtMTE2IDAtMTIwIDI5My0xNDIgNDc0LTE0MiAxNTUgMCA0NzcgMjIgNDc3IDE0MiAwIDUwLTc0IDc5LTE2MyA5NnogbS0zNzQgOTRjLTU4LTUtOTktMjEtOTktNDAgMC0yNCA2NS00MyAxNDQtNDMgNzkgMCAxNDMgMTkgMTQzIDQzIDAgMTktNDIgMzQtOTggNDB2MjE2aDg3bC0xMzIgMTM1LTEzMy0xMzVoODh2LTIxNnogbTE2NyA1MTVoLTEzNnYxYzE2IDE2IDMxIDM0IDQ2IDUybDg0IDEwOXY1NGgtMjMwdi03MWgxMjR2LTFjLTE2LTE3LTI4LTMyLTQ0LTUxbC04OS0xMTR2LTUxaDI0NXY3MnoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSwiM2Rfcm90YXRlIjp7d2lkdGg6MWUzLHBhdGg6Im05MjIgNjYwYy01IDQtOSA3LTE0IDExLTM1OSAyNjMtNTgwLTMxLTU4MC0zMWwtMTAyIDI4IDU4LTQwMGMwIDEgMSAxIDIgMiAxMTggMTA4IDM1MSAyNDkgMzUxIDI0OXMtNjIgMjctMTAwIDQyYzg4IDgzIDIyMiAxODMgMzQ3IDEyMiAxNi04IDMwLTE3IDQ0LTI3LTIgMS00IDItNiA0eiBtMzYtMzI5YzAgMCA2NCAyMjktODggMjk2LTYyIDI3LTEyNCAxNC0xNzUtMTEgMTU3LTc4IDIyNS0yMDggMjQ5LTI2NiA4LTE5IDExLTMxIDExLTMxIDIgNSA2IDE1IDExIDMyLTUtMTMtOC0yMC04LTIweiBtLTc3NS0yMzljNzAtMzEgMTE3LTUwIDE5OC0zMi0xMjEgODAtMTk5IDM0Ni0xOTkgMzQ2bC05Ni0xNS01OC0xMmMwIDAgNTUtMjI2IDE1NS0yODd6IG02MDMgMTMzbC0zMTctMTM5YzAgMCA0LTQgMTktMTQgNy01IDI0LTE1IDI0LTE1cy0xNzctMTQ3LTM4OSA0YzIzNS0yODcgNTM2LTExMiA1MzYtMTEybDMxLTIyIDEwMCAyOTktNC0xeiBtLTI5OC0xNTNjNi00IDE0LTkgMjQtMTUgMCAwLTE3IDEwLTI0IDE1eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LGNhbWVyYTp7d2lkdGg6MWUzLHBhdGg6Im01MDAgNDUwYy04MyAwLTE1MC02Ny0xNTAtMTUwIDAtODMgNjctMTUwIDE1MC0xNTAgODMgMCAxNTAgNjcgMTUwIDE1MCAwIDgzLTY3IDE1MC0xNTAgMTUweiBtNDAwIDE1MGgtMTIwYy0xNiAwLTM0IDEzLTM5IDI5bC0zMSA5M2MtNiAxNS0yMyAyOC00MCAyOGgtMzQwYy0xNiAwLTM0LTEzLTM5LTI4bC0zMS05NGMtNi0xNS0yMy0yOC00MC0yOGgtMTIwYy01NSAwLTEwMC00NS0xMDAtMTAwdi00NTBjMC01NSA0NS0xMDAgMTAwLTEwMGg4MDBjNTUgMCAxMDAgNDUgMTAwIDEwMHY0NTBjMCA1NS00NSAxMDAtMTAwIDEwMHogbS00MDAtNTUwYy0xMzggMC0yNTAgMTEyLTI1MCAyNTAgMCAxMzggMTEyIDI1MCAyNTAgMjUwIDEzOCAwIDI1MC0xMTIgMjUwLTI1MCAwLTEzOC0xMTItMjUwLTI1MC0yNTB6IG0zNjUgMzgwYy0xOSAwLTM1IDE2LTM1IDM1IDAgMTkgMTYgMzUgMzUgMzUgMTkgMCAzNS0xNiAzNS0zNSAwLTE5LTE2LTM1LTM1LTM1eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LG1vdmllOnt3aWR0aDoxZTMscGF0aDoibTkzOCA0MTNsLTE4OC0xMjVjMCAzNy0xNyA3MS00NCA5NCA2NCAzOCAxMDcgMTA3IDEwNyAxODcgMCAxMjEtOTggMjE5LTIxOSAyMTktMTIxIDAtMjE5LTk4LTIxOS0yMTkgMC02MSAyNS0xMTcgNjYtMTU2aC0xMTVjMzAgMzMgNDkgNzYgNDkgMTI1IDAgMTAzLTg0IDE4Ny0xODcgMTg3cy0xODgtODQtMTg4LTE4N2MwLTU3IDI2LTEwNyA2NS0xNDEtMzgtMjItNjUtNjItNjUtMTA5di0yNTBjMC03MCA1Ni0xMjYgMTI1LTEyNmg1MDBjNjkgMCAxMjUgNTYgMTI1IDEyNmwxODgtMTI2YzM0IDAgNjIgMjggNjIgNjN2Mzc1YzAgMzUtMjggNjMtNjIgNjN6IG0tNzUwIDBjLTY5IDAtMTI1IDU2LTEyNSAxMjVzNTYgMTI1IDEyNSAxMjUgMTI1LTU2IDEyNS0xMjUtNTYtMTI1LTEyNS0xMjV6IG00MDYtMWMtODcgMC0xNTcgNzAtMTU3IDE1NyAwIDg2IDcwIDE1NiAxNTcgMTU2czE1Ni03MCAxNTYtMTU2LTcwLTE1Ny0xNTYtMTU3eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LHF1ZXN0aW9uOnt3aWR0aDo4NTcuMSxwYXRoOiJtNTAwIDgydjEwN3EwIDgtNSAxM3QtMTMgNWgtMTA3cS04IDAtMTMtNXQtNS0xM3YtMTA3cTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTN6IG0xNDMgMzc1cTAgNDktMzEgOTF0LTc3IDY1LTk1IDIzcS0xMzYgMC0yMDctMTE5LTktMTQgNC0yNGw3NC01NXE0LTQgMTAtNCA5IDAgMTQgNyAzMCAzOCA0OCA1MSAxOSAxNCA0OCAxNCAyNyAwIDQ4LTE1dDIxLTMzcTAtMjEtMTEtMzR0LTM4LTI1cS0zNS0xNi02NS00OHQtMjktNzB2LTIwcTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTNxMCAxMCAxMiAyN3QzMCAyOHExOCAxMCAyOCAxNnQyNSAxOSAyNSAyNyAxNiAzNCA3IDQ1eiBtMjE0LTEwN3EwLTExNy01Ny0yMTV0LTE1Ni0xNTYtMjE1LTU4LTIxNiA1OC0xNTUgMTU2LTU4IDIxNSA1OCAyMTUgMTU1IDE1NiAyMTYgNTggMjE1LTU4IDE1Ni0xNTYgNTctMjE1eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LGRpc2s6e3dpZHRoOjg1Ny4xLHBhdGg6Im0yMTQtN2g0Mjl2MjE0aC00Mjl2LTIxNHogbTUwMCAwaDcydjUwMHEwIDgtNiAyMXQtMTEgMjBsLTE1NyAxNTZxLTUgNi0xOSAxMnQtMjIgNXYtMjMycTAtMjItMTUtMzh0LTM4LTE2aC0zMjJxLTIyIDAtMzcgMTZ0LTE2IDM4djIzMmgtNzJ2LTcxNGg3MnYyMzJxMCAyMiAxNiAzOHQzNyAxNmg0NjVxMjIgMCAzOC0xNnQxNS0zOHYtMjMyeiBtLTIxNCA1MTh2MTc4cTAgOC01IDEzdC0xMyA1aC0xMDdxLTcgMC0xMy01dC01LTEzdi0xNzhxMC04IDUtMTN0MTMtNWgxMDdxNyAwIDEzIDV0NSAxM3ogbTM1Ny0xOHYtNTE4cTAtMjItMTUtMzh0LTM4LTE2aC03NTBxLTIzIDAtMzggMTZ0LTE2IDM4djc1MHEwIDIyIDE2IDM4dDM4IDE2aDUxN3EyMyAwIDUwLTEydDQyLTI2bDE1Ni0xNTdxMTYtMTUgMjctNDJ0MTEtNDl6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sbGFzc286e3dpZHRoOjEwMzEscGF0aDoibTEwMTggNTM4Yy0zNiAyMDctMjkwIDMzNi01NjggMjg2LTI3Ny00OC00NzMtMjU2LTQzNi00NjMgMTAtNTcgMzYtMTA4IDc2LTE1MS0xMy02NiAxMS0xMzcgNjgtMTgzIDM0LTI4IDc1LTQxIDExNC00MmwtNTUtNzAgMCAwYy0yLTEtMy0yLTQtMy0xMC0xNC04LTM0IDUtNDUgMTQtMTEgMzQtOCA0NSA0IDEgMSAyIDMgMiA1bDAgMCAxMTMgMTQwYzE2IDExIDMxIDI0IDQ1IDQwIDQgMyA2IDcgOCAxMSA0OC0zIDEwMCAwIDE1MSA5IDI3OCA0OCA0NzMgMjU1IDQzNiA0NjJ6IG0tNjI0LTM3OWMtODAgMTQtMTQ5IDQ4LTE5NyA5NiA0MiA0MiAxMDkgNDcgMTU2IDkgMzMtMjYgNDctNjYgNDEtMTA1eiBtLTE4Ny03NGMtMTkgMTYtMzMgMzctMzkgNjAgNTAtMzIgMTA5LTU1IDE3NC02OC00Mi0yNS05NS0yNC0xMzUgOHogbTM2MCA3NWMtMzQtNy02OS05LTEwMi04IDggNjItMTYgMTI4LTY4IDE3MC03MyA1OS0xNzUgNTQtMjQ0LTUtOSAyMC0xNiA0MC0yMCA2MS0yOCAxNTkgMTIxIDMxNyAzMzMgMzU0czQwNy02MCA0MzQtMjE3YzI4LTE1OS0xMjEtMzE4LTMzMy0zNTV6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sc2VsZWN0Ym94Ont3aWR0aDoxZTMscGF0aDoibTAgODUwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODZsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg1bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtODU3IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg1IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfX19LHt9XSwzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvYmFyIil9LHsiLi4vc3JjL3RyYWNlcy9iYXIiOjY5N31dLDQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9ib3giKX0seyIuLi9zcmMvdHJhY2VzL2JveCI6NzA4fV0sNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGgiKX0seyIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGgiOjcxN31dLDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jb250b3VyIil9LHsiLi4vc3JjL3RyYWNlcy9jb250b3VyIjo3MjR9XSw3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4uL3NyYy9jb3JlIil9LHsiLi4vc3JjL2NvcmUiOjU4MH1dLDg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oZWF0bWFwIil9LHsiLi4vc3JjL3RyYWNlcy9oZWF0bWFwIjo3MzZ9XSw5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0iOjc0N31dLDEwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmQiKX0seyIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkIjo3NTJ9XSwxMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkY29udG91ciIpfSx7Ii4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmRjb250b3VyIjo3NTZ9XSwxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvcmUiKTtuLnJlZ2lzdGVyKFt0KCIuL2JhciIpLHQoIi4vYm94IiksdCgiLi9oZWF0bWFwIiksdCgiLi9oaXN0b2dyYW0iKSx0KCIuL2hpc3RvZ3JhbTJkIiksdCgiLi9oaXN0b2dyYW0yZGNvbnRvdXIiKSx0KCIuL3BpZSIpLHQoIi4vY29udG91ciIpLHQoIi4vc2NhdHRlcjNkIiksdCgiLi9zdXJmYWNlIiksdCgiLi9tZXNoM2QiKSx0KCIuL3NjYXR0ZXJnZW8iKSx0KCIuL2Nob3JvcGxldGgiKSx0KCIuL3NjYXR0ZXJnbCIpLHQoIi4vc2NhdHRlcnRlcm5hcnkiKSx0KCIuL3NjYXR0ZXJtYXBib3giKV0pLGUuZXhwb3J0cz1ufSx7Ii4vYmFyIjozLCIuL2JveCI6NCwiLi9jaG9yb3BsZXRoIjo1LCIuL2NvbnRvdXIiOjYsIi4vY29yZSI6NywiLi9oZWF0bWFwIjo4LCIuL2hpc3RvZ3JhbSI6OSwiLi9oaXN0b2dyYW0yZCI6MTAsIi4vaGlzdG9ncmFtMmRjb250b3VyIjoxMSwiLi9tZXNoM2QiOjEzLCIuL3BpZSI6MTQsIi4vc2NhdHRlcjNkIjoxNSwiLi9zY2F0dGVyZ2VvIjoxNiwiLi9zY2F0dGVyZ2wiOjE3LCIuL3NjYXR0ZXJtYXBib3giOjE4LCIuL3NjYXR0ZXJ0ZXJuYXJ5IjoxOSwiLi9zdXJmYWNlIjoyMH1dLDEzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvbWVzaDNkIil9LHsiLi4vc3JjL3RyYWNlcy9tZXNoM2QiOjc2MH1dLDE0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvcGllIil9LHsiLi4vc3JjL3RyYWNlcy9waWUiOjc2Nn1dLDE1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcjNkIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyM2QiOjgwMH1dLDE2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcmdlbyIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmdlbyI6ODA0fV0sMTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2wiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnbCI6ODA5fV0sMTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVybWFwYm94Iil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVybWFwYm94Ijo4MTV9XSwxOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJ0ZXJuYXJ5Iil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVydGVybmFyeSI6ODIxfV0sMjA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zdXJmYWNlIil9LHsiLi4vc3JjL3RyYWNlcy9zdXJmYWNlIjo4MzB9XSwyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gTWF0aC5taW4oZSxNYXRoLm1heCh0LHIpKX1mdW5jdGlvbiBpKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10Lmxlbmd0aCx0aGlzLmJvdW5kcz1bbmV3IEFycmF5KHRoaXMuZGltZW5zaW9uKSxuZXcgQXJyYXkodGhpcy5kaW1lbnNpb24pXTtmb3IodmFyIG49MDtuPHRoaXMuZGltZW5zaW9uOysrbil0aGlzLmJvdW5kc1swXVtuXT0tKDEvMCksdGhpcy5ib3VuZHNbMV1bbl09MS8wO3RoaXMuX3N0YXRlPXQuc2xpY2UoKS5yZXZlcnNlKCksdGhpcy5fdmVsb2NpdHk9ZS5zbGljZSgpLnJldmVyc2UoKSx0aGlzLl90aW1lPVtyXSx0aGlzLl9zY3JhdGNoPVt0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpXX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3Q+cjsrK3IpZVtyXT0wO3JldHVybiBlfWZ1bmN0aW9uIGEodCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBpKFswXSxbMF0sMCk7Y2FzZSAxOmlmKCJudW1iZXIiPT10eXBlb2YgdCl7dmFyIG49byh0KTtyZXR1cm4gbmV3IGkobixuLDApfXJldHVybiBuZXcgaSh0LG8odC5sZW5ndGgpLDApO2Nhc2UgMjppZigibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBuPW8odC5sZW5ndGgpO3JldHVybiBuZXcgaSh0LG4sK2UpfXI9MDtjYXNlIDM6aWYodC5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoInN0YXRlIGFuZCB2ZWxvY2l0eSBsZW5ndGhzIG11c3QgbWF0Y2giKTtyZXR1cm4gbmV3IGkodCxlLHIpfX1lLmV4cG9ydHM9YTt2YXIgcz10KCJjdWJpYy1oZXJtaXRlIiksbD10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLHU9aS5wcm90b3R5cGU7dS5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1sLmd0KHRoaXMuX3RpbWUsdCktMTswPj1lfHwodGhpcy5fdGltZS5zcGxpY2UoMCxlKSx0aGlzLl9zdGF0ZS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSx0aGlzLl92ZWxvY2l0eS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSl9LHUuY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLGk9bC5sZShlLHQpLG89dGhpcy5fc2NyYXRjaFswXSxhPXRoaXMuX3N0YXRlLHU9dGhpcy5fdmVsb2NpdHksYz10aGlzLmRpbWVuc2lvbixoPXRoaXMuYm91bmRzO2lmKDA+aSlmb3IodmFyIGY9Yy0xLHA9MDtjPnA7KytwLC0tZilvW3BdPWFbZl07ZWxzZSBpZihpPj1yLTEpZm9yKHZhciBmPWEubGVuZ3RoLTEsZD10LWVbci0xXSxwPTA7Yz5wOysrcCwtLWYpb1twXT1hW2ZdK2QqdVtmXTtlbHNle2Zvcih2YXIgZj1jKihpKzEpLTEsbT1lW2ldLGc9ZVtpKzFdLHY9Zy1tfHwxLHk9dGhpcy5fc2NyYXRjaFsxXSxiPXRoaXMuX3NjcmF0Y2hbMl0seD10aGlzLl9zY3JhdGNoWzNdLF89dGhpcy5fc2NyYXRjaFs0XSx3PSEwLHA9MDtjPnA7KytwLC0tZil5W3BdPWFbZl0seFtwXT11W2ZdKnYsYltwXT1hW2YrY10sX1twXT11W2YrY10qdix3PXcmJnlbcF09PT1iW3BdJiZ4W3BdPT09X1twXSYmMD09PXhbcF07aWYodylmb3IodmFyIHA9MDtjPnA7KytwKW9bcF09eVtwXTtlbHNlIHMoeSx4LGIsXywodC1tKS92LG8pfWZvcih2YXIgTT1oWzBdLGs9aFsxXSxwPTA7Yz5wOysrcClvW3BdPW4oTVtwXSxrW3BdLG9bcF0pO3JldHVybiBvfSx1LmRjdXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9ZS5sZW5ndGgsbj1sLmxlKGUsdCksaT10aGlzLl9zY3JhdGNoWzBdLG89dGhpcy5fc3RhdGUsYT10aGlzLl92ZWxvY2l0eSx1PXRoaXMuZGltZW5zaW9uO2lmKG4+PXItMSlmb3IodmFyIGM9by5sZW5ndGgtMSxoPSh0LWVbci0xXSwwKTt1Pmg7KytoLC0tYylpW2hdPWFbY107ZWxzZXtmb3IodmFyIGM9dSoobisxKS0xLGY9ZVtuXSxwPWVbbisxXSxkPXAtZnx8MSxtPXRoaXMuX3NjcmF0Y2hbMV0sZz10aGlzLl9zY3JhdGNoWzJdLHY9dGhpcy5fc2NyYXRjaFszXSx5PXRoaXMuX3NjcmF0Y2hbNF0sYj0hMCxoPTA7dT5oOysraCwtLWMpbVtoXT1vW2NdLHZbaF09YVtjXSpkLGdbaF09b1tjK3VdLHlbaF09YVtjK3VdKmQsYj1iJiZtW2hdPT09Z1toXSYmdltoXT09PXlbaF0mJjA9PT12W2hdO2lmKGIpZm9yKHZhciBoPTA7dT5oOysraClpW2hdPTA7ZWxzZXtzLmRlcml2YXRpdmUobSx2LGcseSwodC1mKS9kLGkpO2Zvcih2YXIgaD0wO3U+aDsrK2gpaVtoXS89ZH19cmV0dXJuIGl9LHUubGFzdFQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aW1lO3JldHVybiB0W3QubGVuZ3RoLTFdfSx1LnN0YWJsZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl92ZWxvY2l0eSxlPXQubGVuZ3RoLHI9dGhpcy5kaW1lbnNpb24tMTtyPj0wOy0tcilpZih0Wy0tZV0pcmV0dXJuITE7cmV0dXJuITB9LHUuanVtcD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10aGlzLmRpbWVuc2lvbjtpZighKGU+dHx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBpPXRoaXMuX3N0YXRlLG89dGhpcy5fdmVsb2NpdHksYT1pLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXRoaXMuYm91bmRzLGw9c1swXSx1PXNbMV07dGhpcy5fdGltZS5wdXNoKGUsdCk7Zm9yKHZhciBjPTA7Mj5jOysrYylmb3IodmFyIGg9MDtyPmg7KytoKWkucHVzaChpW2ErK10pLG8ucHVzaCgwKTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBoPXI7aD4wOy0taClpLnB1c2gobihsW2gtMV0sdVtoLTFdLGFyZ3VtZW50c1toXSkpLG8ucHVzaCgwKX19LHUucHVzaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10aGlzLmRpbWVuc2lvbjtpZighKGU+dHx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBpPXRoaXMuX3N0YXRlLG89dGhpcy5fdmVsb2NpdHksYT1pLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXQtZSxsPXRoaXMuYm91bmRzLHU9bFswXSxjPWxbMV0saD1zPjFlLTY/MS9zOjA7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgZj1yO2Y+MDstLWYpe3ZhciBwPW4odVtmLTFdLGNbZi0xXSxhcmd1bWVudHNbZl0pO2kucHVzaChwKSxvLnB1c2goKHAtaVthKytdKSpoKX19fSx1LnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpbWVuc2lvbjtpZighKHQ8dGhpcy5sYXN0VCgpfHxhcmd1bWVudHMubGVuZ3RoIT09ZSsxKSl7dmFyIHI9dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPXRoaXMuYm91bmRzLGE9b1swXSxzPW9bMV07dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgbD1lO2w+MDstLWwpci5wdXNoKG4oYVtsLTFdLHNbbC0xXSxhcmd1bWVudHNbbF0pKSxpLnB1c2goMCl9fSx1Lm1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoIShlPj10fHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIGk9dGhpcy5fc3RhdGUsbz10aGlzLl92ZWxvY2l0eSxhPWkubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dGhpcy5ib3VuZHMsbD1zWzBdLHU9c1sxXSxjPXQtZSxoPWM+MWUtNj8xL2M6MDt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBmPXI7Zj4wOy0tZil7dmFyIHA9YXJndW1lbnRzW2ZdO2kucHVzaChuKGxbZi0xXSx1W2YtMV0saVthKytdK3ApKSxvLnB1c2gocCpoKX19fSx1LmlkbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpO2lmKCEoZT50KSl7dmFyIHI9dGhpcy5kaW1lbnNpb24saT10aGlzLl9zdGF0ZSxvPXRoaXMuX3ZlbG9jaXR5LGE9aS5sZW5ndGgtcixzPXRoaXMuYm91bmRzLGw9c1swXSx1PXNbMV0sYz10LWU7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgaD1yLTE7aD49MDstLWgpaS5wdXNoKG4obFtoXSx1W2hdLGlbYV0rYypvW2FdKSksby5wdXNoKDApLGErPTF9fX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MjIsImN1YmljLWhlcm1pdGUiOjIzfV0sMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksbyl7dmFyIGE9WyJmdW5jdGlvbiAiLHQsIihhLGwsaCwiLG4uam9pbigiLCIpLCIpeyIsbz8iIjoidmFyIGk9IixyPyJsLTEiOiJoKzEiLCI7d2hpbGUobDw9aCl7dmFyIG09KGwraCk+Pj4xLHg9YSIsaT8iLmdldChtKSI6IlttXSJdO3JldHVybiBvP2UuaW5kZXhPZigiYyIpPDA/YS5wdXNoKCI7aWYoeD09PXkpe3JldHVybiBtfWVsc2UgaWYoeDw9eSl7Iik6YS5wdXNoKCI7dmFyIHA9Yyh4LHkpO2lmKHA9PT0wKXtyZXR1cm4gbX1lbHNlIGlmKHA8PTApeyIpOmEucHVzaCgiO2lmKCIsZSwiKXtpPW07Iikscj9hLnB1c2goImw9bSsxfWVsc2V7aD1tLTF9Iik6YS5wdXNoKCJoPW0tMX1lbHNle2w9bSsxfSIpLGEucHVzaCgifSIpLG8/YS5wdXNoKCJyZXR1cm4gLTF9OyIpOmEucHVzaCgicmV0dXJuIGl9OyIpLGEuam9pbigiIil9ZnVuY3Rpb24gaSh0LGUscixpKXt2YXIgbz1uZXcgRnVuY3Rpb24oW24oIkEiLCJ4Iit0KyJ5IixlLFsieSJdLCExLGkpLG4oIkIiLCJ4Iit0KyJ5IixlLFsieSJdLCEwLGkpLG4oIlAiLCJjKHgseSkiK3QrIjAiLGUsWyJ5IiwiYyJdLCExLGkpLG4oIlEiLCJjKHgseSkiK3QrIjAiLGUsWyJ5IiwiYyJdLCEwLGkpLCJmdW5jdGlvbiBkaXNwYXRjaEJzZWFyY2giLHIsIihhLHksYyxsLGgpe2lmKGEuc2hhcGUpe2lmKHR5cGVvZihjKT09PSdmdW5jdGlvbicpe3JldHVybiBRKGEsKGw9PT11bmRlZmluZWQpPzA6bHwwLChoPT09dW5kZWZpbmVkKT9hLnNoYXBlWzBdLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQihhLChjPT09dW5kZWZpbmVkKT8wOmN8MCwobD09PXVuZGVmaW5lZCk/YS5zaGFwZVswXS0xOmx8MCx5KX19ZWxzZXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUChhLChsPT09dW5kZWZpbmVkKT8wOmx8MCwoaD09PXVuZGVmaW5lZCk/YS5sZW5ndGgtMTpofDAseSxjKX1lbHNle3JldHVybiBBKGEsKGM9PT11bmRlZmluZWQpPzA6Y3wwLChsPT09dW5kZWZpbmVkKT9hLmxlbmd0aC0xOmx8MCx5KX19fXJldHVybiBkaXNwYXRjaEJzZWFyY2giLHJdLmpvaW4oIiIpKTtyZXR1cm4gbygpfWUuZXhwb3J0cz17Z2U6aSgiPj0iLCExLCJHRSIpLGd0OmkoIj4iLCExLCJHVCIpLGx0OmkoIjwiLCEwLCJMVCIpLGxlOmkoIjw9IiwhMCwiTEUiKSxlcTppKCItIiwhMCwiRVEiLCEwKX19LHt9XSwyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxvKXt2YXIgYT02KmkqaS02Kmkscz0zKmkqaS00KmkrMSxsPS02KmkqaSs2KmksdT0zKmkqaS0yKmk7aWYodC5sZW5ndGgpe298fChvPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgYz10Lmxlbmd0aC0xO2M+PTA7LS1jKW9bY109YSp0W2NdK3MqZVtjXStsKnJbY10rdSpuW2NdO3JldHVybiBvfXJldHVybiBhKnQrcyplK2wqcltjXSt1Km59ZnVuY3Rpb24gaSh0LGUscixuLGksbyl7dmFyIGE9aS0xLHM9aSppLGw9YSphLHU9KDErMippKSpsLGM9aSpsLGg9cyooMy0yKmkpLGY9cyphO2lmKHQubGVuZ3RoKXtvfHwobz1uZXcgQXJyYXkodC5sZW5ndGgpKTtmb3IodmFyIHA9dC5sZW5ndGgtMTtwPj0wOy0tcClvW3BdPXUqdFtwXStjKmVbcF0raCpyW3BdK2YqbltwXTtyZXR1cm4gb31yZXR1cm4gdSp0K2MqZStoKnIrZipufWUuZXhwb3J0cz1pLGUuZXhwb3J0cy5kZXJpdmF0aXZlPW59LHt9XSwyNDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLG89ZVsyXSxhPXJbMF0scz1yWzFdLGw9clsyXTtyZXR1cm4gdFswXT1pKmwtbypzLHRbMV09byphLW4qbCx0WzJdPW4qcy1pKmEsdH1lLmV4cG9ydHM9bn0se31dLDI1OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX1lLmV4cG9ydHM9bn0se31dLDI2OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIE1hdGguc3FydChlKmUrcipyK24qbil9ZS5leHBvcnRzPW59LHt9XSwyNzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGk9ZVswXSxvPWVbMV0sYT1lWzJdO3JldHVybiB0WzBdPWkrbiooclswXS1pKSx0WzFdPW8rbiooclsxXS1vKSx0WzJdPWErbiooclsyXS1hKSx0fWUuZXhwb3J0cz1ufSx7fV0sMjg6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLG89cipyK24qbitpKmk7cmV0dXJuIG8+MCYmKG89MS9NYXRoLnNxcnQobyksdFswXT1lWzBdKm8sdFsxXT1lWzFdKm8sdFsyXT1lWzJdKm8pLHR9ZS5leHBvcnRzPW59LHt9XSwyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMuX2NvbXBvbmVudHM9dC5zbGljZSgpLHRoaXMuX3RpbWU9WzBdLHRoaXMucHJldk1hdHJpeD10LnNsaWNlKCksdGhpcy5uZXh0TWF0cml4PXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkTWF0cml4PXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkSW52ZXJzZT10LnNsaWNlKCksdGhpcy5jb21wdXRlZEV5ZT1bMCwwLDBdLHRoaXMuY29tcHV0ZWRVcD1bMCwwLDBdLHRoaXMuY29tcHV0ZWRDZW50ZXI9WzAsMCwwXSx0aGlzLmNvbXB1dGVkUmFkaXVzPVswXSx0aGlzLl9saW1pdHM9Wy0oMS8wKSwxLzBdfWZ1bmN0aW9uIGkodCl7dD10fHx7fTt2YXIgZT10Lm1hdHJpeHx8WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO3JldHVybiBuZXcgbihlKX12YXIgbz10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGE9dCgibWF0NC1pbnRlcnBvbGF0ZSIpLHM9dCgiZ2wtbWF0NC9pbnZlcnQiKSxsPXQoImdsLW1hdDQvcm90YXRlWCIpLHU9dCgiZ2wtbWF0NC9yb3RhdGVZIiksYz10KCJnbC1tYXQ0L3JvdGF0ZVoiKSxoPXQoImdsLW1hdDQvbG9va0F0IiksZj10KCJnbC1tYXQ0L3RyYW5zbGF0ZSIpLHA9KHQoImdsLW1hdDQvc2NhbGUiKSx0KCJnbC12ZWMzL25vcm1hbGl6ZSIpKSxkPVswLDAsMF07ZS5leHBvcnRzPWk7dmFyIG09bi5wcm90b3R5cGU7bS5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPW8ubGUoZSx0KSxuPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoISgwPnIpKXt2YXIgaT10aGlzLl9jb21wb25lbnRzO2lmKHI9PT1lLmxlbmd0aC0xKWZvcih2YXIgbD0xNipyLHU9MDsxNj51OysrdSluW3VdPWlbbCsrXTtlbHNle2Zvcih2YXIgYz1lW3IrMV0tZVtyXSxsPTE2KnIsaD10aGlzLnByZXZNYXRyaXgsZj0hMCx1PTA7MTY+dTsrK3UpaFt1XT1pW2wrK107Zm9yKHZhciBkPXRoaXMubmV4dE1hdHJpeCx1PTA7MTY+dTsrK3UpZFt1XT1pW2wrK10sZj1mJiZoW3VdPT09ZFt1XTtpZigxZS02PmN8fGYpZm9yKHZhciB1PTA7MTY+dTsrK3Upblt1XT1oW3VdO2Vsc2UgYShuLGgsZCwodC1lW3JdKS9jKX12YXIgbT10aGlzLmNvbXB1dGVkVXA7bVswXT1uWzFdLG1bMV09bls1XSxtWzJdPW5bNl0scChtLG0pO3ZhciBnPXRoaXMuY29tcHV0ZWRJbnZlcnNlO3MoZyxuKTt2YXIgdj10aGlzLmNvbXB1dGVkRXllLHk9Z1sxNV07dlswXT1nWzEyXS95LHZbMV09Z1sxM10veSx2WzJdPWdbMTRdL3k7Zm9yKHZhciBiPXRoaXMuY29tcHV0ZWRDZW50ZXIseD1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKSx1PTA7Mz51OysrdSliW3VdPXZbdV0tblsyKzQqdV0qeH19LG0uaWRsZT1mdW5jdGlvbih0KXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7Zm9yKHZhciBlPXRoaXMuX2NvbXBvbmVudHMscj1lLmxlbmd0aC0xNixuPTA7MTY+bjsrK24pZS5wdXNoKGVbcisrXSk7dGhpcy5fdGltZS5wdXNoKHQpfX0sbS5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1vLmd0KHRoaXMuX3RpbWUsdCktMjswPmV8fCh0aGlzLl90aW1lLnNsaWNlKDAsZSksdGhpcy5fY29tcG9uZW50cy5zbGljZSgwLDE2KmUpKX0sbS5sYXN0VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90aW1lW3RoaXMuX3RpbWUubGVuZ3RoLTFdfSxtLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fHRoaXMuY29tcHV0ZWRFeWUscj1yfHxkLG49bnx8dGhpcy5jb21wdXRlZFVwLHRoaXMuc2V0TWF0cml4KHQsaCh0aGlzLmNvbXB1dGVkTWF0cml4LGUscixuKSk7Zm9yKHZhciBpPTAsbz0wOzM+bzsrK28paSs9TWF0aC5wb3cocltvXS1lW29dLDIpO2k9TWF0aC5sb2coTWF0aC5zcXJ0KGkpKSx0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWl9LG0ucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRJbnZlcnNlO2UmJnUoaSxpLGUpLHImJmwoaSxpLHIpLG4mJmMoaSxpLG4pLHRoaXMuc2V0TWF0cml4KHQscyh0aGlzLmNvbXB1dGVkTWF0cml4LGkpKX07dmFyIGc9WzAsMCwwXTttLnBhbj1mdW5jdGlvbih0LGUscixuKXtnWzBdPS0oZXx8MCksZ1sxXT0tKHJ8fDApLGdbMl09LShufHwwKSx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkSW52ZXJzZTtmKGksaSxnKSx0aGlzLnNldE1hdHJpeCh0LHMoaSxpKSl9LG0udHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2dbMF09ZXx8MCxnWzFdPXJ8fDAsZ1syXT1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7ZihpLGksZyksdGhpcy5zZXRNYXRyaXgodCxpKX0sbS5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgcj0wOzE2PnI7KytyKXRoaXMuX2NvbXBvbmVudHMucHVzaChlW3JdKX19LG0uc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWV9LG0uc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9saW1pdHM7clswXT10LHJbMV09ZX0sbS5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9saW1pdHM7cmV0dXJuIHQ/KHRbMF09ZVswXSx0WzFdPWVbMV0sdCk6ZX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjMwLCJnbC1tYXQ0L2ludmVydCI6MTQ4LCJnbC1tYXQ0L2xvb2tBdCI6MTQ5LCJnbC1tYXQ0L3JvdGF0ZVgiOjE1MywiZ2wtbWF0NC9yb3RhdGVZIjoxNTQsImdsLW1hdDQvcm90YXRlWiI6MTU1LCJnbC1tYXQ0L3NjYWxlIjoxNTYsImdsLW1hdDQvdHJhbnNsYXRlIjoxNTcsImdsLXZlYzMvbm9ybWFsaXplIjoyOCwibWF0NC1pbnRlcnBvbGF0ZSI6MzF9XSwzMDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMl1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIyfV0sMzE6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4pe2lmKDA9PT1jKGUpfHwwPT09YyhyKSlyZXR1cm4hMTt2YXIgaT11KGUsZi50cmFuc2xhdGUsZi5zY2FsZSxmLnNrZXcsZi5wZXJzcGVjdGl2ZSxmLnF1YXRlcm5pb24pLG89dShyLHAudHJhbnNsYXRlLHAuc2NhbGUscC5za2V3LHAucGVyc3BlY3RpdmUscC5xdWF0ZXJuaW9uKTtyZXR1cm4gaSYmbz8ocyhkLnRyYW5zbGF0ZSxmLnRyYW5zbGF0ZSxwLnRyYW5zbGF0ZSxuKSxzKGQuc2tldyxmLnNrZXcscC5za2V3LG4pLHMoZC5zY2FsZSxmLnNjYWxlLHAuc2NhbGUsbikscyhkLnBlcnNwZWN0aXZlLGYucGVyc3BlY3RpdmUscC5wZXJzcGVjdGl2ZSxuKSxoKGQucXVhdGVybmlvbixmLnF1YXRlcm5pb24scC5xdWF0ZXJuaW9uLG4pLGwodCxkLnRyYW5zbGF0ZSxkLnNjYWxlLGQuc2tldyxkLnBlcnNwZWN0aXZlLGQucXVhdGVybmlvbiksITApOiExfWZ1bmN0aW9uIGkoKXtyZXR1cm57dHJhbnNsYXRlOm8oKSxzY2FsZTpvKDEpLHNrZXc6bygpLHBlcnNwZWN0aXZlOmEoKSxxdWF0ZXJuaW9uOmEoKX19ZnVuY3Rpb24gbyh0KXtyZXR1cm5bdHx8MCx0fHwwLHR8fDBdfWZ1bmN0aW9uIGEoKXtyZXR1cm5bMCwwLDAsMV19dmFyIHM9dCgiZ2wtdmVjMy9sZXJwIiksbD10KCJtYXQ0LXJlY29tcG9zZSIpLHU9dCgibWF0NC1kZWNvbXBvc2UiKSxjPXQoImdsLW1hdDQvZGV0ZXJtaW5hbnQiKSxoPXQoInF1YXQtc2xlcnAiKSxmPWkoKSxwPWkoKSxkPWkoKTtlLmV4cG9ydHM9bn0seyJnbC1tYXQ0L2RldGVybWluYW50IjoxNDQsImdsLXZlYzMvbGVycCI6MjcsIm1hdDQtZGVjb21wb3NlIjozMiwibWF0NC1yZWNvbXBvc2UiOjM0LCJxdWF0LXNsZXJwIjozNX1dLDMyOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sbz1lWzJdLGE9ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qbytyWzEyXSphLHRbMV09clsxXSpuK3JbNV0qaStyWzldKm8rclsxM10qYSx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qbytyWzE0XSphLHRbM109clszXSpuK3JbN10qaStyWzExXSpvK3JbMTVdKmEsdH1mdW5jdGlvbiBpKHQsZSl7dFswXVswXT1lWzBdLHRbMF1bMV09ZVsxXSx0WzBdWzJdPWVbMl0sdFsxXVswXT1lWzRdLHRbMV1bMV09ZVs1XSx0WzFdWzJdPWVbNl0sdFsyXVswXT1lWzhdLHRbMl1bMV09ZVs5XSx0WzJdWzJdPWVbMTBdfWZ1bmN0aW9uIG8odCxlLHIsbixpKXt0WzBdPWVbMF0qbityWzBdKmksdFsxXT1lWzFdKm4rclsxXSppLHRbMl09ZVsyXSpuK3JbMl0qaX12YXIgYT10KCIuL25vcm1hbGl6ZSIpLHM9dCgiZ2wtbWF0NC9jcmVhdGUiKSxsPXQoImdsLW1hdDQvY2xvbmUiKSx1PXQoImdsLW1hdDQvZGV0ZXJtaW5hbnQiKSxjPXQoImdsLW1hdDQvaW52ZXJ0IiksaD10KCJnbC1tYXQ0L3RyYW5zcG9zZSIpLGY9e2xlbmd0aDp0KCJnbC12ZWMzL2xlbmd0aCIpLG5vcm1hbGl6ZTp0KCJnbC12ZWMzL25vcm1hbGl6ZSIpLGRvdDp0KCJnbC12ZWMzL2RvdCIpLGNyb3NzOnQoImdsLXZlYzMvY3Jvc3MiKX0scD1zKCksZD1zKCksbT1bMCwwLDAsMF0sZz1bWzAsMCwwXSxbMCwwLDBdLFswLDAsMF1dLHY9WzAsMCwwXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyx5LGIpe2lmKGV8fChlPVswLDAsMF0pLHJ8fChyPVswLDAsMF0pLHN8fChzPVswLDAsMF0pLHl8fCh5PVswLDAsMCwxXSksYnx8KGI9WzAsMCwwLDFdKSwhYShwLHQpKXJldHVybiExO2lmKGwoZCxwKSxkWzNdPTAsZFs3XT0wLGRbMTFdPTAsZFsxNV09MSxNYXRoLmFicyh1KGQpPDFlLTgpKXJldHVybiExO3ZhciB4PXBbM10sXz1wWzddLHc9cFsxMV0sTT1wWzEyXSxrPXBbMTNdLEE9cFsxNF0sVD1wWzE1XTtpZigwIT09eHx8MCE9PV98fDAhPT13KXttWzBdPXgsbVsxXT1fLG1bMl09dyxtWzNdPVQ7dmFyIEU9YyhkLGQpO2lmKCFFKXJldHVybiExO2goZCxkKSxuKHksbSxkKX1lbHNlIHlbMF09eVsxXT15WzJdPTAseVszXT0xO2lmKGVbMF09TSxlWzFdPWssZVsyXT1BLGkoZyxwKSxyWzBdPWYubGVuZ3RoKGdbMF0pLGYubm9ybWFsaXplKGdbMF0sZ1swXSksc1swXT1mLmRvdChnWzBdLGdbMV0pLG8oZ1sxXSxnWzFdLGdbMF0sMSwtc1swXSksclsxXT1mLmxlbmd0aChnWzFdKSxmLm5vcm1hbGl6ZShnWzFdLGdbMV0pLHNbMF0vPXJbMV0sc1sxXT1mLmRvdChnWzBdLGdbMl0pLG8oZ1syXSxnWzJdLGdbMF0sMSwtc1sxXSksc1syXT1mLmRvdChnWzFdLGdbMl0pLG8oZ1syXSxnWzJdLGdbMV0sMSwtc1syXSksclsyXT1mLmxlbmd0aChnWzJdKSxmLm5vcm1hbGl6ZShnWzJdLGdbMl0pLHNbMV0vPXJbMl0sc1syXS89clsyXSxmLmNyb3NzKHYsZ1sxXSxnWzJdKSxmLmRvdChnWzBdLHYpPDApZm9yKHZhciBTPTA7Mz5TO1MrKylyW1NdKj0tMSxnW1NdWzBdKj0tMSxnW1NdWzFdKj0tMSxnW1NdWzJdKj0tMTtyZXR1cm4gYlswXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMStnWzBdWzBdLWdbMV1bMV0tZ1syXVsyXSwwKSksYlsxXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMS1nWzBdWzBdK2dbMV1bMV0tZ1syXVsyXSwwKSksYlsyXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMS1nWzBdWzBdLWdbMV1bMV0rZ1syXVsyXSwwKSksYlszXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMStnWzBdWzBdK2dbMV1bMV0rZ1syXVsyXSwwKSksZ1syXVsxXT5nWzFdWzJdJiYoYlswXT0tYlswXSksZ1swXVsyXT5nWzJdWzBdJiYoYlsxXT0tYlsxXSksZ1sxXVswXT5nWzBdWzFdJiYoYlsyXT0tYlsyXSksITB9fSx7Ii4vbm9ybWFsaXplIjozMywiZ2wtbWF0NC9jbG9uZSI6MTQyLCJnbC1tYXQ0L2NyZWF0ZSI6MTQzLCJnbC1tYXQ0L2RldGVybWluYW50IjoxNDQsImdsLW1hdDQvaW52ZXJ0IjoxNDgsImdsLW1hdDQvdHJhbnNwb3NlIjoxNTgsImdsLXZlYzMvY3Jvc3MiOjI0LCJnbC12ZWMzL2RvdCI6MjUsImdsLXZlYzMvbGVuZ3RoIjoyNiwiZ2wtdmVjMy9ub3JtYWxpemUiOjI4fV0sMzM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzE1XTtpZigwPT09cilyZXR1cm4hMTtmb3IodmFyIG49MS9yLGk9MDsxNj5pO2krKyl0W2ldPWVbaV0qbjtyZXR1cm4hMH19LHt9XSwzNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtpZGVudGl0eTp0KCJnbC1tYXQ0L2lkZW50aXR5IiksdHJhbnNsYXRlOnQoImdsLW1hdDQvdHJhbnNsYXRlIiksbXVsdGlwbHk6dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGNyZWF0ZTp0KCJnbC1tYXQ0L2NyZWF0ZSIpLHNjYWxlOnQoImdsLW1hdDQvc2NhbGUiKSxmcm9tUm90YXRpb25UcmFuc2xhdGlvbjp0KCJnbC1tYXQ0L2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uIil9LGk9KG4uY3JlYXRlKCksbi5jcmVhdGUoKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8sYSxzKXtyZXR1cm4gbi5pZGVudGl0eSh0KSxuLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHQscyxlKSx0WzNdPWFbMF0sdFs3XT1hWzFdLHRbMTFdPWFbMl0sdFsxNV09YVszXSxuLmlkZW50aXR5KGkpLDAhPT1vWzJdJiYoaVs5XT1vWzJdLG4ubXVsdGlwbHkodCx0LGkpKSwwIT09b1sxXSYmKGlbOV09MCxpWzhdPW9bMV0sbi5tdWx0aXBseSh0LHQsaSkpLDAhPT1vWzBdJiYoaVs4XT0wLGlbNF09b1swXSxuLm11bHRpcGx5KHQsdCxpKSksbi5zY2FsZSh0LHQsciksdH19LHsiZ2wtbWF0NC9jcmVhdGUiOjE0MywiZ2wtbWF0NC9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiI6MTQ2LCJnbC1tYXQ0L2lkZW50aXR5IjoxNDcsImdsLW1hdDQvbXVsdGlwbHkiOjE1MCwiZ2wtbWF0NC9zY2FsZSI6MTU2LCJnbC1tYXQ0L3RyYW5zbGF0ZSI6MTU3fV0sMzU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiZ2wtcXVhdC9zbGVycCIpfSx7ImdsLXF1YXQvc2xlcnAiOjM2fV0sMzY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBpLG8sYSxzLGwsdT1lWzBdLGM9ZVsxXSxoPWVbMl0sZj1lWzNdLHA9clswXSxkPXJbMV0sbT1yWzJdLGc9clszXTtyZXR1cm4gbz11KnArYypkK2gqbStmKmcsMD5vJiYobz0tbyxwPS1wLGQ9LWQsbT0tbSxnPS1nKSwxLW8+MWUtNj8oaT1NYXRoLmFjb3MobyksYT1NYXRoLnNpbihpKSxzPU1hdGguc2luKCgxLW4pKmkpL2EsbD1NYXRoLnNpbihuKmkpL2EpOihzPTEtbixsPW4pLHRbMF09cyp1K2wqcCx0WzFdPXMqYytsKmQsdFsyXT1zKmgrbCptLHRbM109cypmK2wqZyx0fWUuZXhwb3J0cz1ufSx7fV0sMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksbyxhLHMsbCx1KXt2YXIgYz1lK28rdTtpZihoPjApe3ZhciBoPU1hdGguc3FydChjKzEpO3RbMF09LjUqKGEtbCkvaCx0WzFdPS41KihzLW4pL2gsdFsyXT0uNSooci1vKS9oLHRbM109LjUqaH1lbHNle3ZhciBmPU1hdGgubWF4KGUsbyx1KSxoPU1hdGguc3FydCgyKmYtYysxKTtlPj1mPyh0WzBdPS41KmgsdFsxXT0uNSooaStyKS9oLHRbMl09LjUqKHMrbikvaCx0WzNdPS41KihhLWwpL2gpOm8+PWY/KHRbMF09LjUqKHIraSkvaCx0WzFdPS41KmgsdFsyXT0uNSoobCthKS9oLHRbM109LjUqKHMtbikvaCk6KHRbMF09LjUqKG4rcykvaCx0WzFdPS41KihhK2wpL2gsdFsyXT0uNSpoLHRbM109LjUqKHItaSkvaCl9cmV0dXJuIHR9ZS5leHBvcnRzPW59LHt9XSwzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobiwyKSl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPWVbMF0sbj1lWzFdLG89ZVsyXSxhPWVbM10scz1pKHIsbixvLGEpO3M+MWUtNj8odFswXT1yL3MsdFsxXT1uL3MsdFsyXT1vL3MsdFszXT1hL3MpOih0WzBdPXRbMV09dFsyXT0wLHRbM109MSl9ZnVuY3Rpb24gYSh0LGUscil7dGhpcy5yYWRpdXM9bChbcl0pLHRoaXMuY2VudGVyPWwoZSksdGhpcy5yb3RhdGlvbj1sKHQpLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5yYWRpdXMuY3VydmUoMCksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUm90YXRpb249dGhpcy5yb3RhdGlvbi5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9Wy4xLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bLjEsMCwwXSx0aGlzLmNvbXB1dGVkTWF0cml4PVsuMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sdGhpcy5yZWNhbGNNYXRyaXgoMCl9ZnVuY3Rpb24gcyh0KXt0PXR8fHt9O3ZhciBlPXQuY2VudGVyfHxbMCwwLDBdLHI9dC5yb3RhdGlvbnx8WzAsMCwwLDFdLG49dC5yYWRpdXN8fDE7ZT1bXS5zbGljZS5jYWxsKGUsMCwzKSxyPVtdLnNsaWNlLmNhbGwociwwLDQpLG8ocixyKTt2YXIgaT1uZXcgYShyLGUsTWF0aC5sb2cobikpO3JldHVybiBpLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpLCgiZXllImluIHR8fCJ1cCJpbiB0KSYmaS5sb29rQXQoMCx0LmV5ZSx0LmNlbnRlcix0LnVwKSxpfWUuZXhwb3J0cz1zO3ZhciBsPXQoImZpbHRlcmVkLXZlY3RvciIpLHU9dCgiZ2wtbWF0NC9sb29rQXQiKSxjPXQoImdsLW1hdDQvZnJvbVF1YXQiKSxoPXQoImdsLW1hdDQvaW52ZXJ0IiksZj10KCIuL2xpYi9xdWF0RnJvbUZyYW1lIikscD1hLnByb3RvdHlwZTtwLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMucmFkaXVzLmxhc3RUKCksdGhpcy5jZW50ZXIubGFzdFQoKSx0aGlzLnJvdGF0aW9uLmxhc3RUKCkpfSxwLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLnJhZGl1cy5jdXJ2ZSh0KSx0aGlzLmNlbnRlci5jdXJ2ZSh0KSx0aGlzLnJvdGF0aW9uLmN1cnZlKHQpO3ZhciBlPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjtvKGUsZSk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtjKHIsZSk7dmFyIG49dGhpcy5jb21wdXRlZENlbnRlcixpPXRoaXMuY29tcHV0ZWRFeWUsYT10aGlzLmNvbXB1dGVkVXAscz1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTtpWzBdPW5bMF0rcypyWzJdLGlbMV09blsxXStzKnJbNl0saVsyXT1uWzJdK3MqclsxMF0sYVswXT1yWzFdLGFbMV09cls1XSxhWzJdPXJbOV07Zm9yKHZhciBsPTA7Mz5sOysrbCl7Zm9yKHZhciB1PTAsaD0wOzM+aDsrK2gpdSs9cltsKzQqaF0qaVtoXTtyWzEyK2xdPS11fX0scC5nZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKGUpe2Zvcih2YXIgbj0wOzE2Pm47KytuKWVbbl09cltuXTtyZXR1cm4gZX1yZXR1cm4gcn0scC5pZGxlPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLnJvdGF0aW9uLmlkbGUodCl9LHAuZmx1c2g9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuZmx1c2godCksdGhpcy5yYWRpdXMuZmx1c2godCksdGhpcy5yb3RhdGlvbi5mbHVzaCh0KX0scC5wYW49ZnVuY3Rpb24odCxlLHIsaSl7ZT1lfHwwLHI9cnx8MCxpPWl8fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIG89dGhpcy5jb21wdXRlZE1hdHJpeCxhPW9bMV0scz1vWzVdLGw9b1s5XSx1PW4oYSxzLGwpO2EvPXUscy89dSxsLz11O3ZhciBjPW9bMF0saD1vWzRdLGY9b1s4XSxwPWMqYStoKnMrZipsO2MtPWEqcCxoLT1zKnAsZi09bCpwO3ZhciBkPW4oYyxoLGYpO2MvPWQsaC89ZCxmLz1kO3ZhciBtPW9bMl0sZz1vWzZdLHY9b1sxMF0seT1tKmErZypzK3YqbCxiPW0qYytnKmgrdipmO20tPXkqYStiKmMsZy09eSpzK2IqaCx2LT15KmwrYipmO3ZhciB4PW4obSxnLHYpO20vPXgsZy89eCx2Lz14O3ZhciBfPWMqZSthKnIsdz1oKmUrcypyLE09ZiplK2wqcjt0aGlzLmNlbnRlci5tb3ZlKHQsXyx3LE0pO3ZhciBrPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO2s9TWF0aC5tYXgoMWUtNCxrK2kpLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGspKX0scC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsbyl7dGhpcy5yZWNhbGNNYXRyaXgodCksZT1lfHwwLHI9cnx8MDt2YXIgYT10aGlzLmNvbXB1dGVkTWF0cml4LHM9YVswXSxsPWFbNF0sdT1hWzhdLGM9YVsxXSxoPWFbNV0sZj1hWzldLHA9YVsyXSxkPWFbNl0sbT1hWzEwXSxnPWUqcytyKmMsdj1lKmwrcipoLHk9ZSp1K3IqZixiPS0oZCp5LW0qdikseD0tKG0qZy1wKnkpLF89LShwKnYtZCpnKSx3PU1hdGguc3FydChNYXRoLm1heCgwLDEtTWF0aC5wb3coYiwyKS1NYXRoLnBvdyh4LDIpLU1hdGgucG93KF8sMikpKSxNPWkoYix4LF8sdyk7TT4xZS02PyhiLz1NLHgvPU0sXy89TSx3Lz1NKTooYj14PV89MCx3PTEpO3ZhciBrPXRoaXMuY29tcHV0ZWRSb3RhdGlvbixBPWtbMF0sVD1rWzFdLEU9a1syXSxTPWtbM10sTD1BKncrUypiK1QqXy1FKngsej1UKncrUyp4K0UqYi1BKl8sST1FKncrUypfK0EqeC1UKmIsUD1TKnctQSpiLVQqeC1FKl87aWYobyl7Yj1wLHg9ZCxfPW07dmFyIEM9TWF0aC5zaW4obykvbihiLHgsXyk7Yio9Qyx4Kj1DLF8qPUMsdz1NYXRoLmNvcyhlKSxMPUwqdytQKmIreipfLUkqeCx6PXoqdytQKngrSSpiLUwqXyxJPUkqdytQKl8rTCp4LXoqYixQPVAqdy1MKmIteip4LUkqX312YXIgUj1pKEwseixJLFApO1I+MWUtNj8oTC89Uix6Lz1SLEkvPVIsUC89Uik6KEw9ej1JPTAsUD0xKSx0aGlzLnJvdGF0aW9uLnNldCh0LEwseixJLFApfSxwLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxyPXJ8fHRoaXMuY29tcHV0ZWRDZW50ZXIsZT1lfHx0aGlzLmNvbXB1dGVkRXllLG49bnx8dGhpcy5jb21wdXRlZFVwO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7dShpLGUscixuKTt2YXIgYT10aGlzLmNvbXB1dGVkUm90YXRpb247ZihhLGlbMF0saVsxXSxpWzJdLGlbNF0saVs1XSxpWzZdLGlbOF0saVs5XSxpWzEwXSksbyhhLGEpLHRoaXMucm90YXRpb24uc2V0KHQsYVswXSxhWzFdLGFbMl0sYVszXSk7Zm9yKHZhciBzPTAsbD0wOzM+bDsrK2wpcys9TWF0aC5wb3cocltsXS1lW2xdLDIpO3RoaXMucmFkaXVzLnNldCh0LC41Kk1hdGgubG9nKE1hdGgubWF4KHMsMWUtNikpKSx0aGlzLmNlbnRlci5zZXQodCxyWzBdLHJbMV0sclsyXSl9LHAudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY2VudGVyLm1vdmUodCxlfHwwLHJ8fDAsbnx8MCl9LHAuc2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jb21wdXRlZFJvdGF0aW9uO2YocixlWzBdLGVbMV0sZVsyXSxlWzRdLGVbNV0sZVs2XSxlWzhdLGVbOV0sZVsxMF0pLG8ocixyKSx0aGlzLnJvdGF0aW9uLnNldCh0LHJbMF0sclsxXSxyWzJdLHJbM10pO3ZhciBuPXRoaXMuY29tcHV0ZWRNYXRyaXg7aChuLGUpO3ZhciBpPW5bMTVdO2lmKE1hdGguYWJzKGkpPjFlLTYpe3ZhciBhPW5bMTJdL2kscz1uWzEzXS9pLGw9blsxNF0vaTt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgdT1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt0aGlzLmNlbnRlci5zZXQodCxhLW5bMl0qdSxzLW5bNl0qdSxsLW5bMTBdKnUpLHRoaXMucmFkaXVzLmlkbGUodCl9ZWxzZSB0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCl9LHAuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtlPjAmJnRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGUpKX0scC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3Q9dD4wP01hdGgubG9nKHQpOi0oMS8wKSwKZT1lPjA/TWF0aC5sb2coZSk6MS8wLGU9TWF0aC5tYXgoZSx0KSx0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF09dCx0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF09ZX0scC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJhZGl1cy5ib3VuZHM7cmV0dXJuIHQ/KHRbMF09TWF0aC5leHAoZVswXVswXSksdFsxXT1NYXRoLmV4cChlWzFdWzBdKSx0KTpbTWF0aC5leHAoZVswXVswXSksTWF0aC5leHAoZVsxXVswXSldfSxwLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY2FsY01hdHJpeCh0aGlzLmxhc3RUKCkpLHtjZW50ZXI6dGhpcy5jb21wdXRlZENlbnRlci5zbGljZSgpLHJvdGF0aW9uOnRoaXMuY29tcHV0ZWRSb3RhdGlvbi5zbGljZSgpLGRpc3RhbmNlOk1hdGgubG9nKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLHpvb21NaW46dGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdLHpvb21NYXg6dGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdfX0scC5mcm9tSlNPTj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10LmNlbnRlcjtyJiZ0aGlzLmNlbnRlci5zZXQoZSxyWzBdLHJbMV0sclsyXSk7dmFyIG49dC5yb3RhdGlvbjtuJiZ0aGlzLnJvdGF0aW9uLnNldChlLG5bMF0sblsxXSxuWzJdLG5bM10pO3ZhciBpPXQuZGlzdGFuY2U7aSYmaT4wJiZ0aGlzLnJhZGl1cy5zZXQoZSxNYXRoLmxvZyhpKSksdGhpcy5zZXREaXN0YW5jZUxpbWl0cyh0Lnpvb21NaW4sdC56b29tTWF4KX19LHsiLi9saWIvcXVhdEZyb21GcmFtZSI6MzcsImZpbHRlcmVkLXZlY3RvciI6MjEsImdsLW1hdDQvZnJvbVF1YXQiOjE0NSwiZ2wtbWF0NC9pbnZlcnQiOjE0OCwiZ2wtbWF0NC9sb29rQXQiOjE0OX1dLDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIE1hdGgubWluKDEsTWF0aC5tYXgoLTEsdCkpfWZ1bmN0aW9uIG8odCl7dmFyIGU9TWF0aC5hYnModFswXSkscj1NYXRoLmFicyh0WzFdKSxuPU1hdGguYWJzKHRbMl0pLGk9WzAsMCwwXTtlPk1hdGgubWF4KHIsbik/aVsyXT0xOnI+TWF0aC5tYXgoZSxuKT9pWzBdPTE6aVsxXT0xO2Zvcih2YXIgbz0wLGE9MCxzPTA7Mz5zOysrcylvKz10W3NdKnRbc10sYSs9aVtzXSp0W3NdO2Zvcih2YXIgcz0wOzM+czsrK3MpaVtzXS09YS9vKnRbc107cmV0dXJuIGYoaSxpKSxpfWZ1bmN0aW9uIGEodCxlLHIsbixpLG8sYSxzKXt0aGlzLmNlbnRlcj1sKHIpLHRoaXMudXA9bChuKSx0aGlzLnJpZ2h0PWwoaSksdGhpcy5yYWRpdXM9bChbb10pLHRoaXMuYW5nbGU9bChbYSxzXSksdGhpcy5hbmdsZS5ib3VuZHM9W1stKDEvMCksLU1hdGguUEkvMl0sWzEvMCxNYXRoLlBJLzJdXSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQsZSksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9dGhpcy51cC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmlnaHQ9dGhpcy5yaWdodC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMucmFkaXVzLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRBbmdsZT10aGlzLmFuZ2xlLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRUb3dhcmQ9WzAsMCwwXSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZE1hdHJpeD1uZXcgQXJyYXkoMTYpO2Zvcih2YXIgdT0wOzE2PnU7Kyt1KXRoaXMuY29tcHV0ZWRNYXRyaXhbdV09LjU7dGhpcy5yZWNhbGNNYXRyaXgoMCl9ZnVuY3Rpb24gcyh0KXt0PXR8fHt9O3ZhciBlPXQuY2VudGVyfHxbMCwwLDBdLHI9dC51cHx8WzAsMSwwXSxpPXQucmlnaHR8fG8ocikscz10LnJhZGl1c3x8MSxsPXQudGhldGF8fDAsdT10LnBoaXx8MDtpZihlPVtdLnNsaWNlLmNhbGwoZSwwLDMpLHI9W10uc2xpY2UuY2FsbChyLDAsMyksZihyLHIpLGk9W10uc2xpY2UuY2FsbChpLDAsMyksZihpLGkpLCJleWUiaW4gdCl7dmFyIGM9dC5leWUsZD1bY1swXS1lWzBdLGNbMV0tZVsxXSxjWzJdLWVbMl1dO2goaSxkLHIpLG4oaVswXSxpWzFdLGlbMl0pPDFlLTY/aT1vKHIpOmYoaSxpKSxzPW4oZFswXSxkWzFdLGRbMl0pO3ZhciBtPXAocixkKS9zLGc9cChpLGQpL3M7dT1NYXRoLmFjb3MobSksbD1NYXRoLmFjb3MoZyl9cmV0dXJuIHM9TWF0aC5sb2cocyksbmV3IGEodC56b29tTWluLHQuem9vbU1heCxlLHIsaSxzLGwsdSl9ZS5leHBvcnRzPXM7dmFyIGw9dCgiZmlsdGVyZWQtdmVjdG9yIiksdT10KCJnbC1tYXQ0L2ludmVydCIpLGM9dCgiZ2wtbWF0NC9yb3RhdGUiKSxoPXQoImdsLXZlYzMvY3Jvc3MiKSxmPXQoImdsLXZlYzMvbm9ybWFsaXplIikscD10KCJnbC12ZWMzL2RvdCIpLGQ9YS5wcm90b3R5cGU7ZC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3Q9dD4wP01hdGgubG9nKHQpOi0oMS8wKSxlPWU+MD9NYXRoLmxvZyhlKToxLzAsZT1NYXRoLm1heChlLHQpLHRoaXMucmFkaXVzLmJvdW5kc1swXVswXT10LHRoaXMucmFkaXVzLmJvdW5kc1sxXVswXT1lfSxkLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmFkaXVzLmJvdW5kc1swXTtyZXR1cm4gdD8odFswXT1NYXRoLmV4cChlWzBdWzBdKSx0WzFdPU1hdGguZXhwKGVbMV1bMF0pLHQpOltNYXRoLmV4cChlWzBdWzBdKSxNYXRoLmV4cChlWzFdWzBdKV19LGQucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmN1cnZlKHQpLHRoaXMudXAuY3VydmUodCksdGhpcy5yaWdodC5jdXJ2ZSh0KSx0aGlzLnJhZGl1cy5jdXJ2ZSh0KSx0aGlzLmFuZ2xlLmN1cnZlKHQpO2Zvcih2YXIgZT10aGlzLmNvbXB1dGVkVXAscj10aGlzLmNvbXB1dGVkUmlnaHQsaT0wLG89MCxhPTA7Mz5hOysrYSlvKz1lW2FdKnJbYV0saSs9ZVthXSplW2FdO2Zvcih2YXIgcz1NYXRoLnNxcnQoaSksbD0wLGE9MDszPmE7KythKXJbYV0tPWVbYV0qby9pLGwrPXJbYV0qclthXSxlW2FdLz1zO2Zvcih2YXIgdT1NYXRoLnNxcnQobCksYT0wOzM+YTsrK2EpclthXS89dTt2YXIgYz10aGlzLmNvbXB1dGVkVG93YXJkO2goYyxlLHIpLGYoYyxjKTtmb3IodmFyIHA9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSksZD10aGlzLmNvbXB1dGVkQW5nbGVbMF0sbT10aGlzLmNvbXB1dGVkQW5nbGVbMV0sZz1NYXRoLmNvcyhkKSx2PU1hdGguc2luKGQpLHk9TWF0aC5jb3MobSksYj1NYXRoLnNpbihtKSx4PXRoaXMuY29tcHV0ZWRDZW50ZXIsXz1nKnksdz12KnksTT1iLGs9LWcqYixBPS12KmIsVD15LEU9dGhpcy5jb21wdXRlZEV5ZSxTPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT0wOzM+YTsrK2Epe3ZhciBMPV8qclthXSt3KmNbYV0rTSplW2FdO1NbNCphKzFdPWsqclthXStBKmNbYV0rVCplW2FdLFNbNCphKzJdPUwsU1s0KmErM109MH12YXIgej1TWzFdLEk9U1s1XSxQPVNbOV0sQz1TWzJdLFI9U1s2XSxqPVNbMTBdLEQ9SSpqLVAqUixPPVAqQy16KmosRj16KlItSSpDLE49bihELE8sRik7RC89TixPLz1OLEYvPU4sU1swXT1ELFNbNF09TyxTWzhdPUY7Zm9yKHZhciBhPTA7Mz5hOysrYSlFW2FdPXhbYV0rU1syKzQqYV0qcDtmb3IodmFyIGE9MDszPmE7KythKXtmb3IodmFyIGw9MCxCPTA7Mz5COysrQilsKz1TW2ErNCpCXSpFW0JdO1NbMTIrYV09LWx9U1sxNV09MX0sZC5nZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKGUpe2Zvcih2YXIgbj0wOzE2Pm47KytuKWVbbl09cltuXTtyZXR1cm4gZX1yZXR1cm4gcn07dmFyIG09WzAsMCwwXTtkLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXtpZih0aGlzLmFuZ2xlLm1vdmUodCxlLHIpLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7bVswXT1pWzJdLG1bMV09aVs2XSxtWzJdPWlbMTBdO2Zvcih2YXIgbz10aGlzLmNvbXB1dGVkVXAsYT10aGlzLmNvbXB1dGVkUmlnaHQscz10aGlzLmNvbXB1dGVkVG93YXJkLGw9MDszPmw7KytsKWlbNCpsXT1vW2xdLGlbNCpsKzFdPWFbbF0saVs0KmwrMl09c1tsXTtjKGksaSxuLG0pO2Zvcih2YXIgbD0wOzM+bDsrK2wpb1tsXT1pWzQqbF0sYVtsXT1pWzQqbCsxXTt0aGlzLnVwLnNldCh0LG9bMF0sb1sxXSxvWzJdKSx0aGlzLnJpZ2h0LnNldCh0LGFbMF0sYVsxXSxhWzJdKX19LGQucGFuPWZ1bmN0aW9uKHQsZSxyLGkpe2U9ZXx8MCxyPXJ8fDAsaT1pfHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBvPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT0oTWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSksb1sxXSkscz1vWzVdLGw9b1s5XSx1PW4oYSxzLGwpO2EvPXUscy89dSxsLz11O3ZhciBjPW9bMF0saD1vWzRdLGY9b1s4XSxwPWMqYStoKnMrZipsO2MtPWEqcCxoLT1zKnAsZi09bCpwO3ZhciBkPW4oYyxoLGYpO2MvPWQsaC89ZCxmLz1kO3ZhciBtPWMqZSthKnIsZz1oKmUrcypyLHY9ZiplK2wqcjt0aGlzLmNlbnRlci5tb3ZlKHQsbSxnLHYpO3ZhciB5PU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3k9TWF0aC5tYXgoMWUtNCx5K2kpLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHkpKX0sZC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0sZC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIGE9MTsibnVtYmVyIj09dHlwZW9mIHImJihhPTB8ciksKDA+YXx8YT4zKSYmKGE9MSk7dmFyIHM9KGErMiklMztlfHwodGhpcy5yZWNhbGNNYXRyaXgodCksZT10aGlzLmNvbXB1dGVkTWF0cml4KTt2YXIgbD1lW2FdLGM9ZVthKzRdLGg9ZVthKzhdO2lmKG8pe3ZhciBmPU1hdGguYWJzKGwpLHA9TWF0aC5hYnMoYyksZD1NYXRoLmFicyhoKSxtPU1hdGgubWF4KGYscCxkKTtmPT09bT8obD0wPmw/LTE6MSxjPWg9MCk6ZD09PW0/KGg9MD5oPy0xOjEsbD1jPTApOihjPTA+Yz8tMToxLGw9aD0wKX1lbHNle3ZhciBnPW4obCxjLGgpO2wvPWcsYy89ZyxoLz1nfXZhciB2PWVbc10seT1lW3MrNF0sYj1lW3MrOF0seD12KmwreSpjK2IqaDt2LT1sKngseS09Yyp4LGItPWgqeDt2YXIgXz1uKHYseSxiKTt2Lz1fLHkvPV8sYi89Xzt2YXIgdz1jKmItaCp5LE09aCp2LWwqYixrPWwqeS1jKnYsQT1uKHcsTSxrKTt3Lz1BLE0vPUEsay89QSx0aGlzLmNlbnRlci5qdW1wKHQsRyxILFgpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy51cC5qdW1wKHQsbCxjLGgpLHRoaXMucmlnaHQuanVtcCh0LHYseSxiKTt2YXIgVCxFO2lmKDI9PT1hKXt2YXIgUz1lWzFdLEw9ZVs1XSx6PWVbOV0sST1TKnYrTCp5K3oqYixQPVMqdytMKk0reiprO1Q9MD5EPy1NYXRoLlBJLzI6TWF0aC5QSS8yLEU9TWF0aC5hdGFuMihQLEkpfWVsc2V7dmFyIEM9ZVsyXSxSPWVbNl0saj1lWzEwXSxEPUMqbCtSKmMraipoLE89Qyp2K1IqeStqKmIsRj1DKncrUipNK2oqaztUPU1hdGguYXNpbihpKEQpKSxFPU1hdGguYXRhbjIoRixPKX10aGlzLmFuZ2xlLmp1bXAodCxFLFQpLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBOPWVbMl0sQj1lWzZdLFU9ZVsxMF0sVj10aGlzLmNvbXB1dGVkTWF0cml4O3UoVixlKTt2YXIgcT1WWzE1XSxHPVZbMTJdL3EsSD1WWzEzXS9xLFg9VlsxNF0vcSxZPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLmp1bXAodCxHLU4qWSxILUIqWSxYLVUqWSl9LGQubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5jZW50ZXIubGFzdFQoKSx0aGlzLnVwLmxhc3RUKCksdGhpcy5yaWdodC5sYXN0VCgpLHRoaXMucmFkaXVzLmxhc3RUKCksdGhpcy5hbmdsZS5sYXN0VCgpKX0sZC5pZGxlPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmlkbGUodCksdGhpcy51cC5pZGxlKHQpLHRoaXMucmlnaHQuaWRsZSh0KSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMuYW5nbGUuaWRsZSh0KX0sZC5mbHVzaD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5mbHVzaCh0KSx0aGlzLnVwLmZsdXNoKHQpLHRoaXMucmlnaHQuZmx1c2godCksdGhpcy5yYWRpdXMuZmx1c2godCksdGhpcy5hbmdsZS5mbHVzaCh0KX0sZC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxkLmxvb2tBdD1mdW5jdGlvbih0LGUscixvKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fHRoaXMuY29tcHV0ZWRFeWUscj1yfHx0aGlzLmNvbXB1dGVkQ2VudGVyLG89b3x8dGhpcy5jb21wdXRlZFVwO3ZhciBhPW9bMF0scz1vWzFdLGw9b1syXSx1PW4oYSxzLGwpO2lmKCEoMWUtNj51KSl7YS89dSxzLz11LGwvPXU7dmFyIGM9ZVswXS1yWzBdLGg9ZVsxXS1yWzFdLGY9ZVsyXS1yWzJdLHA9bihjLGgsZik7aWYoISgxZS02PnApKXtjLz1wLGgvPXAsZi89cDt2YXIgZD10aGlzLmNvbXB1dGVkUmlnaHQsbT1kWzBdLGc9ZFsxXSx2PWRbMl0seT1hKm0rcypnK2wqdjttLT15KmEsZy09eSpzLHYtPXkqbDt2YXIgYj1uKG0sZyx2KTtpZighKC4wMT5iJiYobT1zKmYtbCpoLGc9bCpjLWEqZix2PWEqaC1zKmMsYj1uKG0sZyx2KSwxZS02PmIpKSl7bS89YixnLz1iLHYvPWIsdGhpcy51cC5zZXQodCxhLHMsbCksdGhpcy5yaWdodC5zZXQodCxtLGcsdiksdGhpcy5jZW50ZXIuc2V0KHQsclswXSxyWzFdLHJbMl0pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHApKTt2YXIgeD1zKnYtbCpnLF89bCptLWEqdix3PWEqZy1zKm0sTT1uKHgsXyx3KTt4Lz1NLF8vPU0sdy89TTt2YXIgaz1hKmMrcypoK2wqZixBPW0qYytnKmgrdipmLFQ9eCpjK18qaCt3KmYsRT1NYXRoLmFzaW4oaShrKSksUz1NYXRoLmF0YW4yKFQsQSksTD10aGlzLmFuZ2xlLl9zdGF0ZSx6PUxbTC5sZW5ndGgtMV0sST1MW0wubGVuZ3RoLTJdO3olPTIqTWF0aC5QSTt2YXIgUD1NYXRoLmFicyh6KzIqTWF0aC5QSS1TKSxDPU1hdGguYWJzKHotUyksUj1NYXRoLmFicyh6LTIqTWF0aC5QSS1TKTtDPlAmJih6Kz0yKk1hdGguUEkpLEM+UiYmKHotPTIqTWF0aC5QSSksdGhpcy5hbmdsZS5qdW1wKHRoaXMuYW5nbGUubGFzdFQoKSx6LEkpLHRoaXMuYW5nbGUuc2V0KHQsUyxFKX19fX19LHsiZmlsdGVyZWQtdmVjdG9yIjoyMSwiZ2wtbWF0NC9pbnZlcnQiOjE0OCwiZ2wtbWF0NC9yb3RhdGUiOjE1MiwiZ2wtdmVjMy9jcm9zcyI6MjQsImdsLXZlYzMvZG90IjoyNSwiZ2wtdmVjMy9ub3JtYWxpemUiOjI4fV0sNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuX2NvbnRyb2xsZXJOYW1lcz1PYmplY3Qua2V5cyh0KSx0aGlzLl9jb250cm9sbGVyTGlzdD10aGlzLl9jb250cm9sbGVyTmFtZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSksdGhpcy5fbW9kZT1lLHRoaXMuX2FjdGl2ZT10W2VdLHRoaXMuX2FjdGl2ZXx8KHRoaXMuX21vZGU9InR1cm50YWJsZSIsdGhpcy5fYWN0aXZlPXQudHVybnRhYmxlKSx0aGlzLm1vZGVzPXRoaXMuX2NvbnRyb2xsZXJOYW1lcyx0aGlzLmNvbXB1dGVkTWF0cml4PXRoaXMuX2FjdGl2ZS5jb21wdXRlZE1hdHJpeCx0aGlzLmNvbXB1dGVkRXllPXRoaXMuX2FjdGl2ZS5jb21wdXRlZEV5ZSx0aGlzLmNvbXB1dGVkVXA9dGhpcy5fYWN0aXZlLmNvbXB1dGVkVXAsdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLl9hY3RpdmUuY29tcHV0ZWRDZW50ZXIsdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLl9hY3RpdmUuY29tcHV0ZWRSYWRpdXN9ZnVuY3Rpb24gaSh0KXt0PXR8fHt9O3ZhciBlPXQuZXllfHxbMCwwLDFdLHI9dC5jZW50ZXJ8fFswLDAsMF0saT10LnVwfHxbMCwxLDBdLGw9dC5kaXN0YW5jZUxpbWl0c3x8WzAsMS8wXSx1PXQubW9kZXx8InR1cm50YWJsZSIsYz1vKCksaD1hKCksZj1zKCk7cmV0dXJuIGMuc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSxjLmxvb2tBdCgwLGUscixpKSxoLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksaC5sb29rQXQoMCxlLHIsaSksZi5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLGYubG9va0F0KDAsZSxyLGkpLG5ldyBuKHt0dXJudGFibGU6YyxvcmJpdDpoLG1hdHJpeDpmfSx1KX1lLmV4cG9ydHM9aTt2YXIgbz10KCJ0dXJudGFibGUtY2FtZXJhLWNvbnRyb2xsZXIiKSxhPXQoIm9yYml0LWNhbWVyYS1jb250cm9sbGVyIikscz10KCJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXIiKSxsPW4ucHJvdG90eXBlLHU9W1siZmx1c2giLDFdLFsiaWRsZSIsMV0sWyJsb29rQXQiLDRdLFsicm90YXRlIiw0XSxbInBhbiIsNF0sWyJ0cmFuc2xhdGUiLDRdLFsic2V0TWF0cml4IiwyXSxbInNldERpc3RhbmNlTGltaXRzIiwyXSxbInNldERpc3RhbmNlIiwyXV07dS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdLHI9W10sbj0wO248dFsxXTsrK24pci5wdXNoKCJhIituKTt2YXIgaT0idmFyIGNjPXRoaXMuX2NvbnRyb2xsZXJMaXN0O2Zvcih2YXIgaT0wO2k8Y2MubGVuZ3RoOysraSl7Y2NbaV0uIit0WzBdKyIoIityLmpvaW4oKSsiKX0iO2xbZV09RnVuY3Rpb24uYXBwbHkobnVsbCxyLmNvbmNhdChpKSl9KSxsLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLl9hY3RpdmUucmVjYWxjTWF0cml4KHQpfSxsLmdldERpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hY3RpdmUuZ2V0RGlzdGFuY2UodCl9LGwuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5nZXREaXN0YW5jZUxpbWl0cyh0KX0sbC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmUubGFzdFQoKX0sbC5zZXRNb2RlPWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLl9tb2RlKXt2YXIgZT10aGlzLl9jb250cm9sbGVyTmFtZXMuaW5kZXhPZih0KTtpZighKDA+ZSkpe3ZhciByPXRoaXMuX2FjdGl2ZSxuPXRoaXMuX2NvbnRyb2xsZXJMaXN0W2VdLGk9TWF0aC5tYXgoci5sYXN0VCgpLG4ubGFzdFQoKSk7ci5yZWNhbGNNYXRyaXgoaSksbi5zZXRNYXRyaXgoaSxyLmNvbXB1dGVkTWF0cml4KSx0aGlzLl9hY3RpdmU9bix0aGlzLl9tb2RlPXQsdGhpcy5jb21wdXRlZE1hdHJpeD10aGlzLl9hY3RpdmUuY29tcHV0ZWRNYXRyaXgsdGhpcy5jb21wdXRlZEV5ZT10aGlzLl9hY3RpdmUuY29tcHV0ZWRFeWUsdGhpcy5jb21wdXRlZFVwPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFVwLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5fYWN0aXZlLmNvbXB1dGVkQ2VudGVyLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5fYWN0aXZlLmNvbXB1dGVkUmFkaXVzfX19LGwuZ2V0TW9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb2RlfX0seyJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXIiOjI5LCJvcmJpdC1jYW1lcmEtY29udHJvbGxlciI6MzgsInR1cm50YWJsZS1jYW1lcmEtY29udHJvbGxlciI6Mzl9XSw0MTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gbyhpKHQsZSkpfWUuZXhwb3J0cz1uO3ZhciBpPXQoImFscGhhLWNvbXBsZXgiKSxvPXQoInNpbXBsaWNpYWwtY29tcGxleC1ib3VuZGFyeSIpfSx7ImFscGhhLWNvbXBsZXgiOjQyLCJzaW1wbGljaWFsLWNvbXBsZXgtYm91bmRhcnkiOjQ1fV0sNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBpKGUpLmZpbHRlcihmdW5jdGlvbihyKXtmb3IodmFyIG49bmV3IEFycmF5KHIubGVuZ3RoKSxpPTA7aTxyLmxlbmd0aDsrK2kpbltpXT1lW3JbaV1dO3JldHVybiBvKG4pKnQ8MX0pfWUuZXhwb3J0cz1uO3ZhciBpPXQoImRlbGF1bmF5LXRyaWFuZ3VsYXRlIiksbz10KCJjaXJjdW1yYWRpdXMiKX0se2NpcmN1bXJhZGl1czo0MywiZGVsYXVuYXktdHJpYW5ndWxhdGUiOjEyNX1dLDQzOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9aSh0KSxyPTAsbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgbz10W25dLGE9MDthPGUubGVuZ3RoOysrYSlyKz1NYXRoLnBvdyhvW2FdLWVbYV0sMik7cmV0dXJuIE1hdGguc3FydChyL3QubGVuZ3RoKX1lLmV4cG9ydHM9bjt2YXIgaT10KCJjaXJjdW1jZW50ZXIiKX0se2NpcmN1bWNlbnRlcjo0NH1dLDQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLGk9MDtuPmk7KytpKXIrPXRbaV0qZVtpXTtyZXR1cm4gcn1mdW5jdGlvbiBpKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDA9PT1lKXJldHVybltdO3ZhciByPSh0WzBdLmxlbmd0aCxhKFt0Lmxlbmd0aCsxLHQubGVuZ3RoKzFdLDEpKSxpPWEoW3QubGVuZ3RoKzFdLDEpO3JbZV1bZV09MDtmb3IodmFyIG89MDtlPm87KytvKXtmb3IodmFyIGw9MDtvPj1sOysrbClyW2xdW29dPXJbb11bbF09MipuKHRbb10sdFtsXSk7aVtvXT1uKHRbb10sdFtvXSl9Zm9yKHZhciB1PXMocixpKSxjPTAsaD11W2UrMV0sbz0wO288aC5sZW5ndGg7KytvKWMrPWhbb107Zm9yKHZhciBmPW5ldyBBcnJheShlKSxvPTA7ZT5vOysrbyl7Zm9yKHZhciBoPXVbb10scD0wLGw9MDtsPGgubGVuZ3RoOysrbClwKz1oW2xdO2Zbb109cC9jfXJldHVybiBmfWZ1bmN0aW9uIG8odCl7aWYoMD09PXQubGVuZ3RoKXJldHVybltdO2Zvcih2YXIgZT10WzBdLmxlbmd0aCxyPWEoW2VdKSxuPWkodCksbz0wO288dC5sZW5ndGg7KytvKWZvcih2YXIgcz0wO2U+czsrK3MpcltzXSs9dFtvXVtzXSpuW29dO3JldHVybiByfXZhciBhPXQoImR1cCIpLHM9dCgicm9idXN0LWxpbmVhci1zb2x2ZSIpO28uYmFyeWNlbmV0cmljPWksZS5leHBvcnRzPW99LHtkdXA6MTI2LCJyb2J1c3QtbGluZWFyLXNvbHZlIjo0NTl9XSw0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiBvKGkodCkpfWUuZXhwb3J0cz1uO3ZhciBpPXQoImJvdW5kYXJ5LWNlbGxzIiksbz10KCJyZWR1Y2Utc2ltcGxpY2lhbC1jb21wbGV4Iil9LHsiYm91bmRhcnktY2VsbHMiOjQ2LCJyZWR1Y2Utc2ltcGxpY2lhbC1jb21wbGV4Ijo0OX1dLDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MCxuPTA7ZT5uOysrbilyKz10W25dLmxlbmd0aDtmb3IodmFyIGk9bmV3IEFycmF5KHIpLG89MCxuPTA7ZT5uOysrbilmb3IodmFyIGE9dFtuXSxzPWEubGVuZ3RoLGw9MDtzPmw7KytsKWZvcih2YXIgdT1pW28rK109bmV3IEFycmF5KHMtMSksYz0xO3M+YzsrK2MpdVtjLTFdPWFbKGwrYyklc107cmV0dXJuIGl9ZS5leHBvcnRzPW59LHt9XSw0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0xLHI9MTtyPHQubGVuZ3RoOysrcilmb3IodmFyIG49MDtyPm47KytuKWlmKHRbcl08dFtuXSllPS1lO2Vsc2UgaWYodFtuXT09PXRbcl0pcmV0dXJuIDA7cmV0dXJuIGV9ZS5leHBvcnRzPW59LHt9XSw0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGkodCxlKXx8byh0KS1vKGUpfXZhciBpPXQoImNvbXBhcmUtY2VsbCIpLG89dCgiY2VsbC1vcmllbnRhdGlvbiIpO2UuZXhwb3J0cz1ufSx7ImNlbGwtb3JpZW50YXRpb24iOjQ3LCJjb21wYXJlLWNlbGwiOjExMn1dLDQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dC5zb3J0KG8pO2Zvcih2YXIgZT10Lmxlbmd0aCxyPTAsbj0wO2U+bjsrK24pe3ZhciBzPXRbbl0sbD1hKHMpO2lmKDAhPT1sKXtpZihyPjApe3ZhciB1PXRbci0xXTtpZigwPT09aShzLHUpJiZhKHUpIT09bCl7ci09MTtjb250aW51ZX19dFtyKytdPXN9fXJldHVybiB0Lmxlbmd0aD1yLHR9dmFyIGk9dCgiY29tcGFyZS1jZWxsIiksbz10KCJjb21wYXJlLW9yaWVudGVkLWNlbGwiKSxhPXQoImNlbGwtb3JpZW50YXRpb24iKTtlLmV4cG9ydHM9bn0seyJjZWxsLW9yaWVudGF0aW9uIjo0NywiY29tcGFyZS1jZWxsIjoxMTIsImNvbXBhcmUtb3JpZW50ZWQtY2VsbCI6NDh9XSw1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIUFycmF5LmlzQXJyYXkodCkmJm51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR9ZnVuY3Rpb24gZSh0LGUscil7Zm9yKHZhciBuPShlLXQpL01hdGgubWF4KHItMSwxKSxpPVtdLG89MDtyPm87bysrKWkucHVzaCh0K28qbik7cmV0dXJuIGl9ZnVuY3Rpb24gcigpe2Zvcih2YXIgdD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyksZT10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9KSxyPU1hdGgubWluLmFwcGx5KG51bGwsZSksbj1bXSxpPTA7cj5pO2krKyl7bltpXT1bXTtmb3IodmFyIG89MDtvPHQubGVuZ3RoOysrbyluW2ldW29dPXRbb11baV19cmV0dXJuIG59ZnVuY3Rpb24gbih0LGUscil7Zm9yKHZhciBuPU1hdGgubWluLmFwcGx5KG51bGwsW3QubGVuZ3RoLGUubGVuZ3RoLHIubGVuZ3RoXSksaT1bXSxvPTA7bj5vO28rKylpLnB1c2goW3Rbb10sZVtvXSxyW29dXSk7cmV0dXJuIGl9ZnVuY3Rpb24gaSh0KXtmdW5jdGlvbiBlKHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKUFycmF5LmlzQXJyYXkodFtuXSk/ZSh0W25dLHIpOnIrPXRbbl19dmFyIHI9MDtyZXR1cm4gZSh0LHIpLHJ9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKXtlW3JdPVtdO2Zvcih2YXIgbj0wO248dFtyXS5sZW5ndGg7KytuKWVbcl1bbl09dFtyXVtuXX1yZXR1cm4gZX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZVtyXT10W3JdO3JldHVybiBlfWZ1bmN0aW9uIHModCxlKXtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj10Lmxlbmd0aDtyLS07KWlmKHRbcl0hPT1lW3JdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGwodCxlKXt2YXIgcixuO2lmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gdDtpZihyPVtdLCIjIj09PXRbMF0/KHQ9dC5zdWJzdHIoMSksMz09PXQubGVuZ3RoJiYodCs9dCksbj1wYXJzZUludCh0LDE2KSxyWzBdPW4+PjE2JjI1NSxyWzFdPW4+PjgmMjU1LHJbMl09MjU1Jm4pOmgudGVzdCh0KSYmKG49dC5tYXRjaChmKSxyWzBdPXBhcnNlSW50KG5bMV0pLHJbMV09cGFyc2VJbnQoblsyXSksclsyXT1wYXJzZUludChuWzNdKSksIWUpZm9yKHZhciBpPTA7Mz5pOysraSlyW2ldPXJbaV0vMjU1O3JldHVybiByfWZ1bmN0aW9uIHUodCxlKXt2YXIgcixuO2lmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gdDtpZihyPVtdLCIjIj09PXRbMF0/KHQ9dC5zdWJzdHIoMSksMz09PXQubGVuZ3RoJiYodCs9dCksbj1wYXJzZUludCh0LDE2KSxyWzBdPW4+PjE2JjI1NSxyWzFdPW4+PjgmMjU1LHJbMl09MjU1Jm4pOmgudGVzdCh0KSYmKG49dC5tYXRjaChmKSxyWzBdPXBhcnNlSW50KG5bMV0pLHJbMV09cGFyc2VJbnQoblsyXSksclsyXT1wYXJzZUludChuWzNdKSxuWzRdP3JbM109cGFyc2VGbG9hdChuWzRdKTpyWzNdPTEpLCFlKWZvcih2YXIgaT0wOzM+aTsrK2kpcltpXT1yW2ldLzI1NTtyZXR1cm4gcn12YXIgYz17fSxoPS9ecmdiYT9cKFxzKlxkezEsM31ccyosXHMqXGR7MSwzfVxzKixccypcZHsxLDN9XHMqKCwuKik/XCkkLyxmPS9ecmdiYT9cKFxzKihcZHsxLDN9KVxzKixccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqLD9ccyooLiopP1wpJC87cmV0dXJuIGMuaXNQbGFpbk9iamVjdD10LGMubGluc3BhY2U9ZSxjLnppcDM9bixjLnN1bT1pLGMuemlwPXIsYy5pc0VxdWFsPXMsYy5jb3B5MkQ9byxjLmNvcHkxRD1hLGMuc3RyMlJnYkFycmF5PWwsYy5zdHIyUmdiYUFycmF5PXUsY307ZS5leHBvcnRzPW4oKX0se31dLDUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyJ1c2UgcmVzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9MzI7cmV0dXJuIHQmPS10LHQmJmUtLSw2NTUzNSZ0JiYoZS09MTYpLDE2NzExOTM1JnQmJihlLT04KSwyNTI2NDUxMzUmdCYmKGUtPTQpLDg1ODk5MzQ1OSZ0JiYoZS09MiksMTQzMTY1NTc2NSZ0JiYoZS09MSksZX12YXIgaT0zMjtyLklOVF9CSVRTPWksci5JTlRfTUFYPTIxNDc0ODM2NDcsci5JTlRfTUlOPS0xPDxpLTEsci5zaWduPWZ1bmN0aW9uKHQpe3JldHVybih0PjApLSgwPnQpfSxyLmFicz1mdW5jdGlvbih0KXt2YXIgZT10Pj5pLTE7cmV0dXJuKHReZSktZX0sci5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZV4odF5lKSYtKGU+dCl9LHIubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReKHReZSkmLShlPnQpfSxyLmlzUG93Mj1mdW5jdGlvbih0KXtyZXR1cm4hKHQmdC0xfHwhdCl9LHIubG9nMj1mdW5jdGlvbih0KXt2YXIgZSxyO3JldHVybiBlPSh0PjY1NTM1KTw8NCx0Pj4+PWUscj0odD4yNTUpPDwzLHQ+Pj49cixlfD1yLHI9KHQ+MTUpPDwyLHQ+Pj49cixlfD1yLHI9KHQ+Myk8PDEsdD4+Pj1yLGV8PXIsZXx0Pj4xfSxyLmxvZzEwPWZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xZTk/OTp0Pj0xZTg/ODp0Pj0xZTc/Nzp0Pj0xZTY/Njp0Pj0xZTU/NTp0Pj0xZTQ/NDp0Pj0xZTM/Mzp0Pj0xMDA/Mjp0Pj0xMD8xOjB9LHIucG9wQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQtPXQ+Pj4xJjE0MzE2NTU3NjUsdD0oODU4OTkzNDU5JnQpKyh0Pj4+MiY4NTg5OTM0NTkpLDE2ODQzMDA5Kih0Kyh0Pj4+NCkmMjUyNjQ1MTM1KT4+PjI0fSxyLmNvdW50VHJhaWxpbmdaZXJvcz1uLHIubmV4dFBvdzI9ZnVuY3Rpb24odCl7cmV0dXJuIHQrPTA9PT10LC0tdCx0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCx0fD10Pj4+MTYsdCsxfSxyLnByZXZQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCx0fD10Pj4+MTYsdC0odD4+PjEpfSxyLnBhcml0eT1mdW5jdGlvbih0KXtyZXR1cm4gdF49dD4+PjE2LHRePXQ+Pj44LHRePXQ+Pj40LHQmPTE1LDI3MDMwPj4+dCYxfTt2YXIgbz1uZXcgQXJyYXkoMjU2KTshZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7MjU2PmU7KytlKXt2YXIgcj1lLG49ZSxpPTc7Zm9yKHI+Pj49MTtyO3I+Pj49MSluPDw9MSxufD0xJnIsLS1pO3RbZV09bjw8aSYyNTV9fShvKSxyLnJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIG9bMjU1JnRdPDwyNHxvW3Q+Pj44JjI1NV08PDE2fG9bdD4+PjE2JjI1NV08PDh8b1t0Pj4+MjQmMjU1XX0sci5pbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybiB0Jj02NTUzNSx0PTE2NzExOTM1Jih0fHQ8PDgpLHQ9MjUyNjQ1MTM1Jih0fHQ8PDQpLHQ9ODU4OTkzNDU5Jih0fHQ8PDIpLHQ9MTQzMTY1NTc2NSYodHx0PDwxKSxlJj02NTUzNSxlPTE2NzExOTM1JihlfGU8PDgpLGU9MjUyNjQ1MTM1JihlfGU8PDQpLGU9ODU4OTkzNDU5JihlfGU8PDIpLGU9MTQzMTY1NTc2NSYoZXxlPDwxKSx0fGU8PDF9LHIuZGVpbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybiB0PXQ+Pj5lJjE0MzE2NTU3NjUsdD04NTg5OTM0NTkmKHR8dD4+PjEpLHQ9MjUyNjQ1MTM1Jih0fHQ+Pj4yKSx0PTE2NzExOTM1Jih0fHQ+Pj40KSx0PTY1NTM1Jih0fHQ+Pj4xNiksdDw8MTY+PjE2fSxyLmludGVybGVhdmUzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCY9MTAyMyx0PTQyNzgxOTAzMzUmKHR8dDw8MTYpLHQ9MjUxNzE5Njk1Jih0fHQ8PDgpLHQ9MzI3MjM1NjAzNSYodHx0PDw0KSx0PTEyMjcxMzM1MTMmKHR8dDw8MiksZSY9MTAyMyxlPTQyNzgxOTAzMzUmKGV8ZTw8MTYpLGU9MjUxNzE5Njk1JihlfGU8PDgpLGU9MzI3MjM1NjAzNSYoZXxlPDw0KSxlPTEyMjcxMzM1MTMmKGV8ZTw8MiksdHw9ZTw8MSxyJj0xMDIzLHI9NDI3ODE5MDMzNSYocnxyPDwxNikscj0yNTE3MTk2OTUmKHJ8cjw8OCkscj0zMjcyMzU2MDM1JihyfHI8PDQpLHI9MTIyNzEzMzUxMyYocnxyPDwyKSx0fHI8PDJ9LHIuZGVpbnRlcmxlYXZlMz1mdW5jdGlvbih0LGUpe3JldHVybiB0PXQ+Pj5lJjEyMjcxMzM1MTMsdD0zMjcyMzU2MDM1Jih0fHQ+Pj4yKSx0PTI1MTcxOTY5NSYodHx0Pj4+NCksdD00Mjc4MTkwMzM1Jih0fHQ+Pj44KSx0PTEwMjMmKHR8dD4+PjE2KSx0PDwyMj4+MjJ9LHIubmV4dENvbWJpbmF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXR8dC0xO3JldHVybiBlKzF8KH5lJi1+ZSktMT4+Pm4odCkrMX19LHt9XSw1MjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RyeXt2YXIgdD1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gdC5mb289ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9LDQyPT09dC5mb28oKSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuc3ViYXJyYXkmJjA9PT10LnN1YmFycmF5KDEsMSkuYnl0ZUxlbmd0aH1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gaSgpe3JldHVybiBvLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBvPyhvLlRZUEVEX0FSUkFZX1NVUFBPUlR8fCh0aGlzLmxlbmd0aD0wLHRoaXMucGFyZW50PXZvaWQgMCksIm51bWJlciI9PXR5cGVvZiB0P2EodGhpcyx0KToic3RyaW5nIj09dHlwZW9mIHQ/cyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXToidXRmOCIpOmwodGhpcyx0KSk6YXJndW1lbnRzLmxlbmd0aD4xP25ldyBvKHQsYXJndW1lbnRzWzFdKTpuZXcgbyh0KX1mdW5jdGlvbiBhKHQsZSl7aWYodD1tKHQsMD5lPzA6MHxnKGUpKSwhby5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgcj0wO2U+cjtyKyspdFtyXT0wO3JldHVybiB0fWZ1bmN0aW9uIHModCxlLHIpeyJzdHJpbmciPT10eXBlb2YgciYmIiIhPT1yfHwocj0idXRmOCIpO3ZhciBuPTB8eShlLHIpO3JldHVybiB0PW0odCxuKSx0LndyaXRlKGUsciksdH1mdW5jdGlvbiBsKHQsZSl7aWYoby5pc0J1ZmZlcihlKSlyZXR1cm4gdSh0LGUpO2lmKFEoZSkpcmV0dXJuIGModCxlKTtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIm11c3Qgc3RhcnQgd2l0aCBudW1iZXIsIGJ1ZmZlciwgYXJyYXkgb3Igc3RyaW5nIik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlcil7aWYoZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gaCh0LGUpO2lmKGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gZih0LGUpfXJldHVybiBlLmxlbmd0aD9wKHQsZSk6ZCh0LGUpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj0wfGcoZS5sZW5ndGgpO3JldHVybiB0PW0odCxyKSxlLmNvcHkodCwwLDAsciksdH1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9MHxnKGUubGVuZ3RoKTt0PW0odCxyKTtmb3IodmFyIG49MDtyPm47bis9MSl0W25dPTI1NSZlW25dO3JldHVybiB0fWZ1bmN0aW9uIGgodCxlKXt2YXIgcj0wfGcoZS5sZW5ndGgpO3Q9bSh0LHIpO2Zvcih2YXIgbj0wO3I+bjtuKz0xKXRbbl09MjU1JmVbbl07cmV0dXJuIHR9ZnVuY3Rpb24gZih0LGUpe3JldHVybiBlLmJ5dGVMZW5ndGgsby5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0PW5ldyBVaW50OEFycmF5KGUpLHQuX19wcm90b19fPW8ucHJvdG90eXBlKTp0PWgodCxuZXcgVWludDhBcnJheShlKSksdH1mdW5jdGlvbiBwKHQsZSl7dmFyIHI9MHxnKGUubGVuZ3RoKTt0PW0odCxyKTtmb3IodmFyIG49MDtyPm47bis9MSl0W25dPTI1NSZlW25dO3JldHVybiB0fWZ1bmN0aW9uIGQodCxlKXt2YXIgcixuPTA7IkJ1ZmZlciI9PT1lLnR5cGUmJlEoZS5kYXRhKSYmKHI9ZS5kYXRhLG49MHxnKHIubGVuZ3RoKSksdD1tKHQsbik7Zm9yKHZhciBpPTA7bj5pO2krPTEpdFtpXT0yNTUmcltpXTtyZXR1cm4gdH1mdW5jdGlvbiBtKHQsZSl7by5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0PW5ldyBVaW50OEFycmF5KGUpLHQuX19wcm90b19fPW8ucHJvdG90eXBlKTp0Lmxlbmd0aD1lO3ZhciByPTAhPT1lJiZlPD1vLnBvb2xTaXplPj4+MTtyZXR1cm4gciYmKHQucGFyZW50PUspLHR9ZnVuY3Rpb24gZyh0KXtpZih0Pj1pKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK2koKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfHR9ZnVuY3Rpb24gdih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHYpKXJldHVybiBuZXcgdih0LGUpO3ZhciByPW5ldyBvKHQsZSk7cmV0dXJuIGRlbGV0ZSByLnBhcmVudCxyfWZ1bmN0aW9uIHkodCxlKXsic3RyaW5nIiE9dHlwZW9mIHQmJih0PSIiK3QpO3ZhciByPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaChlKXtjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJyYXciOmNhc2UicmF3cyI6cmV0dXJuIHI7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gcSh0KS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKnI7Y2FzZSJoZXgiOnJldHVybiByPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIFgodCkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gcSh0KS5sZW5ndGg7ZT0oIiIrZSkudG9Mb3dlckNhc2UoKSxuPSEwfX1mdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj0hMTtpZihlPTB8ZSxyPXZvaWQgMD09PXJ8fHI9PT0xLzA/dGhpcy5sZW5ndGg6MHxyLHR8fCh0PSJ1dGY4IiksMD5lJiYoZT0wKSxyPnRoaXMubGVuZ3RoJiYocj10aGlzLmxlbmd0aCksZT49cilyZXR1cm4iIjtmb3IoOzspc3dpdGNoKHQpe2Nhc2UiaGV4IjpyZXR1cm4gSSh0aGlzLGUscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gRSh0aGlzLGUscik7Y2FzZSJhc2NpaSI6cmV0dXJuIEwodGhpcyxlLHIpO2Nhc2UiYmluYXJ5IjpyZXR1cm4geih0aGlzLGUscik7Y2FzZSJiYXNlNjQiOnJldHVybiBUKHRoaXMsZSxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIFAodGhpcyxlLHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3QpO3Q9KHQrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24geCh0LGUscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT10Lmxlbmd0aC1yO24/KG49TnVtYmVyKG4pLG4+aSYmKG49aSkpOm49aTt2YXIgbz1lLmxlbmd0aDtpZihvJTIhPT0wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBoZXggc3RyaW5nIik7bj5vLzImJihuPW8vMik7Zm9yKHZhciBhPTA7bj5hO2ErKyl7dmFyIHM9cGFyc2VJbnQoZS5zdWJzdHIoMiphLDIpLDE2KTtpZihpc05hTihzKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO3RbcithXT1zfXJldHVybiBhfWZ1bmN0aW9uIF8odCxlLHIsbil7cmV0dXJuIFkocShlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiB3KHQsZSxyLG4pe3JldHVybiBZKEcoZSksdCxyLG4pfWZ1bmN0aW9uIE0odCxlLHIsbil7cmV0dXJuIHcodCxlLHIsbil9ZnVuY3Rpb24gayh0LGUscixuKXtyZXR1cm4gWShYKGUpLHQscixuKX1mdW5jdGlvbiBBKHQsZSxyLG4pe3JldHVybiBZKEgoZSx0Lmxlbmd0aC1yKSx0LHIsbil9ZnVuY3Rpb24gVCh0LGUscil7cmV0dXJuIDA9PT1lJiZyPT09dC5sZW5ndGg/Vy5mcm9tQnl0ZUFycmF5KHQpOlcuZnJvbUJ5dGVBcnJheSh0LnNsaWNlKGUscikpfWZ1bmN0aW9uIEUodCxlLHIpe3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9ZTtyPmk7KXt2YXIgbz10W2ldLGE9bnVsbCxzPW8+MjM5PzQ6bz4yMjM/MzpvPjE5MT8yOjE7aWYocj49aStzKXt2YXIgbCx1LGMsaDtzd2l0Y2gocyl7Y2FzZSAxOjEyOD5vJiYoYT1vKTticmVhaztjYXNlIDI6bD10W2krMV0sMTI4PT09KDE5MiZsKSYmKGg9KDMxJm8pPDw2fDYzJmwsaD4xMjcmJihhPWgpKTticmVhaztjYXNlIDM6bD10W2krMV0sdT10W2krMl0sMTI4PT09KDE5MiZsKSYmMTI4PT09KDE5MiZ1KSYmKGg9KDE1Jm8pPDwxMnwoNjMmbCk8PDZ8NjMmdSxoPjIwNDcmJig1NTI5Nj5ofHxoPjU3MzQzKSYmKGE9aCkpO2JyZWFrO2Nhc2UgNDpsPXRbaSsxXSx1PXRbaSsyXSxjPXRbaSszXSwxMjg9PT0oMTkyJmwpJiYxMjg9PT0oMTkyJnUpJiYxMjg9PT0oMTkyJmMpJiYoaD0oMTUmbyk8PDE4fCg2MyZsKTw8MTJ8KDYzJnUpPDw2fDYzJmMsaD42NTUzNSYmMTExNDExMj5oJiYoYT1oKSl9fW51bGw9PT1hPyhhPTY1NTMzLHM9MSk6YT42NTUzNSYmKGEtPTY1NTM2LG4ucHVzaChhPj4+MTAmMTAyM3w1NTI5NiksYT01NjMyMHwxMDIzJmEpLG4ucHVzaChhKSxpKz1zfXJldHVybiBTKG4pfWZ1bmN0aW9uIFModCl7dmFyIGU9dC5sZW5ndGg7aWYoSj49ZSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdCk7Zm9yKHZhciByPSIiLG49MDtlPm47KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQuc2xpY2UobixuKz1KKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTCh0LGUscil7dmFyIG49IiI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGk9ZTtyPmk7aSsrKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JnRbaV0pO3JldHVybiBufWZ1bmN0aW9uIHoodCxlLHIpe3ZhciBuPSIiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7cj5pO2krKyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3JldHVybiBufWZ1bmN0aW9uIEkodCxlLHIpe3ZhciBuPXQubGVuZ3RoOyghZXx8MD5lKSYmKGU9MCksKCFyfHwwPnJ8fHI+bikmJihyPW4pO2Zvcih2YXIgaT0iIixvPWU7cj5vO28rKylpKz1WKHRbb10pO3JldHVybiBpfWZ1bmN0aW9uIFAodCxlLHIpe2Zvcih2YXIgbj10LnNsaWNlKGUsciksaT0iIixvPTA7bzxuLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUobltvXSsyNTYqbltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBDKHQsZSxyKXtpZih0JTEhPT0wfHwwPnQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKHQrZT5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gUih0LGUscixuLGksYSl7aWYoIW8uaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYnVmZmVyIG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UiKTtpZihlPml8fGE+ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidmFsdWUgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiaW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gaih0LGUscixuKXswPmUmJihlPTY1NTM1K2UrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbih0Lmxlbmd0aC1yLDIpO28+aTtpKyspdFtyK2ldPShlJjI1NTw8OCoobj9pOjEtaSkpPj4+OCoobj9pOjEtaSl9ZnVuY3Rpb24gRCh0LGUscixuKXswPmUmJihlPTQyOTQ5NjcyOTUrZSsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKHQubGVuZ3RoLXIsNCk7bz5pO2krKyl0W3IraV09ZT4+PjgqKG4/aTozLWkpJjI1NX1mdW5jdGlvbiBPKHQsZSxyLG4saSxvKXtpZihyK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImluZGV4IG91dCBvZiByYW5nZSIpO2lmKDA+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiaW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gRih0LGUscixuLGkpe3JldHVybiBpfHxPKHQsZSxyLDQsMy40MDI4MjM0NjYzODUyODg2ZTM4LC0zLjQwMjgyMzQ2NjM4NTI4ODZlMzgpLFoud3JpdGUodCxlLHIsbiwyMyw0KSxyKzR9ZnVuY3Rpb24gTih0LGUscixuLGkpe3JldHVybiBpfHxPKHQsZSxyLDgsMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCwtMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCksWi53cml0ZSh0LGUscixuLDUyLDgpLHIrOH1mdW5jdGlvbiBCKHQpe2lmKHQ9VSh0KS5yZXBsYWNlKCQsIiIpLHQubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDt0Lmxlbmd0aCU0IT09MDspdCs9Ij0iO3JldHVybiB0fWZ1bmN0aW9uIFUodCl7cmV0dXJuIHQudHJpbT90LnRyaW0oKTp0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX1mdW5jdGlvbiBWKHQpe3JldHVybiAxNj50PyIwIit0LnRvU3RyaW5nKDE2KTp0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBxKHQsZSl7ZT1lfHwxLzA7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1udWxsLG89W10sYT0wO24+YTthKyspe2lmKHI9dC5jaGFyQ29kZUF0KGEpLHI+NTUyOTUmJjU3MzQ0PnIpe2lmKCFpKXtpZihyPjU2MzE5KXsoZS09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoYSsxPT09bil7KGUtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZig1NjMyMD5yKXsoZS09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9KGktNTUyOTY8PDEwfHItNTYzMjApKzY1NTM2fWVsc2UgaSYmKGUtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCwxMjg+cil7aWYoKGUtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYoMjA0OD5yKXtpZigoZS09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYoNjU1MzY+cil7aWYoKGUtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKDExMTQxMTI+cikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoZS09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIEcodCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoO3IrKyllLnB1c2goMjU1JnQuY2hhckNvZGVBdChyKSk7cmV0dXJuIGV9ZnVuY3Rpb24gSCh0LGUpe2Zvcih2YXIgcixuLGksbz1bXSxhPTA7YTx0Lmxlbmd0aCYmISgoZS09Mik8MCk7YSsrKXI9dC5jaGFyQ29kZUF0KGEpLG49cj4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99ZnVuY3Rpb24gWCh0KXtyZXR1cm4gVy50b0J5dGVBcnJheShCKHQpKX1mdW5jdGlvbiBZKHQsZSxyLG4pe2Zvcih2YXIgaT0wO24+aSYmIShpK3I+PWUubGVuZ3RofHxpPj10Lmxlbmd0aCk7aSsrKWVbaStyXT10W2ldO3JldHVybiBpfXZhciBXPXQoImJhc2U2NC1qcyIpLFo9dCgiaWVlZTc1NCIpLFE9dCgiaXNhcnJheSIpO3IuQnVmZmVyPW8sci5TbG93QnVmZmVyPXYsci5JTlNQRUNUX01BWF9CWVRFUz01MCxvLnBvb2xTaXplPTgxOTI7dmFyIEs9e307by5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMCE9PWUuVFlQRURfQVJSQVlfU1VQUE9SVD9lLlRZUEVEX0FSUkFZX1NVUFBPUlQ6bigpLG8uX2F1Z21lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19fPW8ucHJvdG90eXBlLHR9LG8uVFlQRURfQVJSQVlfU1VQUE9SVD8oby5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLG8uX19wcm90b19fPVVpbnQ4QXJyYXksInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5zcGVjaWVzJiZvW1N5bWJvbC5zcGVjaWVzXT09PW8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMH0pKTooby5wcm90b3R5cGUubGVuZ3RoPXZvaWQgMCxvLnByb3RvdHlwZS5wYXJlbnQ9dm9pZCAwKSxvLmlzQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiEobnVsbD09dHx8IXQuX2lzQnVmZmVyKX0sby5jb21wYXJlPWZ1bmN0aW9uKHQsZSl7aWYoIW8uaXNCdWZmZXIodCl8fCFvLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMiKTtpZih0PT09ZSlyZXR1cm4gMDtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPTAsYT1NYXRoLm1pbihyLG4pO2E+aSYmdFtpXT09PWVbaV07KSsraTtyZXR1cm4gaSE9PWEmJihyPXRbaV0sbj1lW2ldKSxuPnI/LTE6cj5uPzE6MH0sby5pc0VuY29kaW5nPWZ1bmN0aW9uKHQpe3N3aXRjaChTdHJpbmcodCkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInJhdyI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxvLmNvbmNhdD1mdW5jdGlvbih0LGUpe2lmKCFRKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImxpc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzLiIpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbmV3IG8oMCk7dmFyIHI7aWYodm9pZCAwPT09ZSlmb3IoZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyllKz10W3JdLmxlbmd0aDt2YXIgbj1uZXcgbyhlKSxpPTA7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmNvcHkobixpKSxpKz1hLmxlbmd0aH1yZXR1cm4gbn0sby5ieXRlTGVuZ3RoPXksby5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLG8ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PXQ/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/RSh0aGlzLDAsdCk6Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG8ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtpZighby5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT10PyEwOjA9PT1vLmNvbXBhcmUodGhpcyx0KX0sby5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciB0PSIiLGU9ci5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLGUpLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD5lJiYodCs9IiAuLi4gIikpLCI8QnVmZmVyICIrdCsiPiJ9LG8ucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCl7aWYoIW8uaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09dD8wOm8uY29tcGFyZSh0aGlzLHQpfSxvLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUscil7Zm9yKHZhciBuPS0xLGk9MDtyK2k8dC5sZW5ndGg7aSsrKWlmKHRbcitpXT09PWVbLTE9PT1uPzA6aS1uXSl7aWYoLTE9PT1uJiYobj1pKSxpLW4rMT09PWUubGVuZ3RoKXJldHVybiByK259ZWxzZSBuPS0xO3JldHVybi0xfWlmKGU+MjE0NzQ4MzY0Nz9lPTIxNDc0ODM2NDc6LTIxNDc0ODM2NDg+ZSYmKGU9LTIxNDc0ODM2NDgpLGU+Pj0wLDA9PT10aGlzLmxlbmd0aClyZXR1cm4tMTtpZihlPj10aGlzLmxlbmd0aClyZXR1cm4tMTtpZigwPmUmJihlPU1hdGgubWF4KHRoaXMubGVuZ3RoK2UsMCkpLCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gMD09PXQubGVuZ3RoPy0xOlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsdCxlKTtpZihvLmlzQnVmZmVyKHQpKXJldHVybiByKHRoaXMsdCxlKTtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIG8uVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09PVVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsdCxlKTpyKHRoaXMsW3RdLGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfSxvLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDA9PT1lKW49InV0ZjgiLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2UgaWYodm9pZCAwPT09ciYmInN0cmluZyI9PXR5cGVvZiBlKW49ZSxyPXRoaXMubGVuZ3RoLGU9MDtlbHNlIGlmKGlzRmluaXRlKGUpKWU9MHxlLGlzRmluaXRlKHIpPyhyPTB8cix2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKTtlbHNle3ZhciBpPW47bj1lLGU9MHxyLHI9aX12YXIgbz10aGlzLmxlbmd0aC1lO2lmKCh2b2lkIDA9PT1yfHxyPm8pJiYocj1vKSx0Lmxlbmd0aD4wJiYoMD5yfHwwPmUpfHxlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJhdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBhPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4geCh0aGlzLHQsZSxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBfKHRoaXMsdCxlLHIpO2Nhc2UiYXNjaWkiOnJldHVybiB3KHRoaXMsdCxlLHIpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gTSh0aGlzLHQsZSxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIGsodGhpcyx0LGUscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBBKHRoaXMsdCxlLHIpO2RlZmF1bHQ6aWYoYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksYT0hMH19LG8ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIEo9NDA5NjtvLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3Q9fn50LGU9dm9pZCAwPT09ZT9yOn5+ZSwwPnQ/KHQrPXIsMD50JiYodD0wKSk6dD5yJiYodD1yKSwwPmU/KGUrPXIsMD5lJiYoZT0wKSk6ZT5yJiYoZT1yKSx0PmUmJihlPXQpO3ZhciBuO2lmKG8uVFlQRURfQVJSQVlfU1VQUE9SVCluPXRoaXMuc3ViYXJyYXkodCxlKSxuLl9fcHJvdG9fXz1vLnByb3RvdHlwZTtlbHNle3ZhciBpPWUtdDtuPW5ldyBvKGksdm9pZCAwKTtmb3IodmFyIGE9MDtpPmE7YSsrKW5bYV09dGhpc1thK3RdfXJldHVybiBuLmxlbmd0aCYmKG4ucGFyZW50PXRoaXMucGFyZW50fHx0aGlzKSxufSxvLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHQsZSxyKXt0PTB8dCxlPTB8ZSxyfHxDKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLG89MDsrK288ZSYmKGkqPTI1Nik7KW4rPXRoaXNbdCtvXSppO3JldHVybiBufSxvLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKHQsZSxyKXt0PTB8dCxlPTB8ZSxyfHxDKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdCstLWVdLGk9MTtlPjAmJihpKj0yNTYpOyluKz10aGlzW3QrLS1lXSppO3JldHVybiBufSxvLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDEsdGhpcy5sZW5ndGgpLHRoaXNbdF19LG8ucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh9LG8ucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XTw8OHx0aGlzW3QrMV19LG8ucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsNCx0aGlzLmxlbmd0aCksKHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbdCszXX0sby5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3RdKyh0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM10pfSxvLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q9MHx0LGU9MHxlLHJ8fEModCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsbz0wOysrbzxlJiYoaSo9MjU2KTspbis9dGhpc1t0K29dKmk7cmV0dXJuIGkqPTEyOCxuPj1pJiYobi09TWF0aC5wb3coMiw4KmUpKSxufSxvLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24odCxlLHIpe3Q9MHx0LGU9MHxlLHJ8fEModCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49ZSxpPTEsbz10aGlzW3QrLS1uXTtuPjAmJihpKj0yNTYpOylvKz10aGlzW3QrLS1uXSppO3JldHVybiBpKj0xMjgsbz49aSYmKG8tPU1hdGgucG93KDIsOCplKSksb30sby5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3RdPy0xKigyNTUtdGhpc1t0XSsxKTp0aGlzW3RdfSxvLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbih0LGUpe2V8fEModCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3RdfHRoaXNbdCsxXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sby5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24odCxlKXtlfHxDKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0KzFdfHRoaXNbdF08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LG8ucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2fHRoaXNbdCszXTw8MjR9LG8ucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdPDwyNHx0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM119LG8ucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw0LHRoaXMubGVuZ3RoKSxaLnJlYWQodGhpcyx0LCEwLDIzLDQpfSxvLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsNCx0aGlzLmxlbmd0aCksWi5yZWFkKHRoaXMsdCwhMSwyMyw0KX0sby5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw4LHRoaXMubGVuZ3RoKSxaLnJlYWQodGhpcyx0LCEwLDUyLDgpfSxvLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDgsdGhpcy5sZW5ndGgpLFoucmVhZCh0aGlzLHQsITEsNTIsOCl9LG8ucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe3Q9K3QsZT0wfGUscj0wfHIsbnx8Uih0aGlzLHQsZSxyLE1hdGgucG93KDIsOCpyKSwwKTt2YXIgaT0xLG89MDtmb3IodGhpc1tlXT0yNTUmdDsrK288ciYmKGkqPTI1Nik7KXRoaXNbZStvXT10L2kmMjU1O3JldHVybiBlK3J9LG8ucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe3Q9K3QsZT0wfGUscj0wfHIsbnx8Uih0aGlzLHQsZSxyLE1hdGgucG93KDIsOCpyKSwwKTt2YXIgaT1yLTEsbz0xO2Zvcih0aGlzW2UraV09MjU1JnQ7LS1pPj0wJiYobyo9MjU2KTspdGhpc1tlK2ldPXQvbyYyNTU7cmV0dXJuIGUrcn0sby5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT0wfGUscnx8Uih0aGlzLHQsZSwxLDI1NSwwKSxvLlRZUEVEX0FSUkFZX1NVUFBPUlR8fCh0PU1hdGguZmxvb3IodCkpLHRoaXNbZV09MjU1JnQsZSsxfSxvLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPTB8ZSxyfHxSKHRoaXMsdCxlLDIsNjU1MzUsMCksby5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCk6aih0aGlzLHQsZSwhMCksZSsyfSxvLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPTB8ZSxyfHxSKHRoaXMsdCxlLDIsNjU1MzUsMCksby5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCk6aih0aGlzLHQsZSwhMSksZSsyfSxvLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPTB8ZSxyfHxSKHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSxvLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbZSszXT10Pj4+MjQsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrMV09dD4+PjgsdGhpc1tlXT0yNTUmdCk6RCh0aGlzLHQsZSwhMCksZSs0fSxvLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPTB8ZSxyfHxSKHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSxvLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbZV09dD4+PjI0LHRoaXNbZSsxXT10Pj4+MTYsdGhpc1tlKzJdPXQ+Pj44LHRoaXNbZSszXT0yNTUmdCk6RCh0aGlzLHQsZSwhMSksZSs0fSxvLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT0wfGUsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO1IodGhpcyx0LGUscixpLTEsLWkpfXZhciBvPTAsYT0xLHM9MD50PzE6MDtmb3IodGhpc1tlXT0yNTUmdDsrK288ciYmKGEqPTI1Nik7KXRoaXNbZStvXT0odC9hPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxvLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT0wfGUsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO1IodGhpcyx0LGUscixpLTEsLWkpfXZhciBvPXItMSxhPTEscz0wPnQ/MTowO2Zvcih0aGlzW2Urb109MjU1JnQ7LS1vPj0wJiYoYSo9MjU2KTspdGhpc1tlK29dPSh0L2E+PjApLXMmMjU1O3JldHVybiBlK3J9LG8ucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT0wfGUscnx8Uih0aGlzLHQsZSwxLDEyNywtMTI4KSxvLlRZUEVEX0FSUkFZX1NVUFBPUlR8fCh0PU1hdGguZmxvb3IodCkpLDA+dCYmKHQ9MjU1K3QrMSksdGhpc1tlXT0yNTUmdCxlKzF9LG8ucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT0wfGUscnx8Uih0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksby5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCk6aih0aGlzLHQsZSwhMCksZSsyfSxvLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU9MHxlLHJ8fFIodGhpcyx0LGUsMiwzMjc2NywtMzI3NjgpLG8uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tlXT10Pj4+OCx0aGlzW2UrMV09MjU1JnQpOmoodGhpcyx0LGUsITEpLGUrMn0sby5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPTB8ZSxyfHxSKHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksby5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSszXT10Pj4+MjQpOkQodGhpcyx0LGUsITApLGUrNH0sby5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPTB8ZSxyfHxSKHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksMD50JiYodD00Mjk0OTY3Mjk1K3QrMSksby5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2VdPXQ+Pj4yNCx0aGlzW2UrMV09dD4+PjE2LHRoaXNbZSsyXT10Pj4+OCx0aGlzW2UrM109MjU1JnQpOkQodGhpcyx0LGUsITEpLGUrNH0sby5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRih0aGlzLHQsZSwhMCxyKX0sby5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRih0aGlzLHQsZSwhMSxyKX0sby5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIE4odGhpcyx0LGUsITAscil9LG8ucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBOKHRoaXMsdCxlLCExLHIpfSxvLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksZT49dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxlfHwoZT0wKSxuPjAmJnI+biYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PXQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoMD5lKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7CmlmKDA+cnx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZigwPm4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7bj50aGlzLmxlbmd0aCYmKG49dGhpcy5sZW5ndGgpLHQubGVuZ3RoLWU8bi1yJiYobj10Lmxlbmd0aC1lK3IpO3ZhciBpLGE9bi1yO2lmKHRoaXM9PT10JiZlPnImJm4+ZSlmb3IoaT1hLTE7aT49MDtpLS0pdFtpK2VdPXRoaXNbaStyXTtlbHNlIGlmKDFlMz5hfHwhby5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihpPTA7YT5pO2krKyl0W2krZV09dGhpc1tpK3JdO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodCx0aGlzLnN1YmFycmF5KHIscithKSxlKTtyZXR1cm4gYX0sby5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbih0LGUscil7aWYodHx8KHQ9MCksZXx8KGU9MCkscnx8KHI9dGhpcy5sZW5ndGgpLGU+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiZW5kIDwgc3RhcnQiKTtpZihyIT09ZSYmMCE9PXRoaXMubGVuZ3RoKXtpZigwPmV8fGU+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzdGFydCBvdXQgb2YgYm91bmRzIik7aWYoMD5yfHxyPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJlbmQgb3V0IG9mIGJvdW5kcyIpO3ZhciBuO2lmKCJudW1iZXIiPT10eXBlb2YgdClmb3Iobj1lO3I+bjtuKyspdGhpc1tuXT10O2Vsc2V7dmFyIGk9cSh0LnRvU3RyaW5nKCkpLG89aS5sZW5ndGg7Zm9yKG49ZTtyPm47bisrKXRoaXNbbl09aVtuJW9dfXJldHVybiB0aGlzfX07dmFyICQ9L1teK1wvMC05QS1aYS16LV9dL2d9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiYmFzZTY0LWpzIjo1MyxpZWVlNzU0OjU0LGlzYXJyYXk6NTV9XSw1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7dmFyIHQsZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIscj1lLmxlbmd0aDtmb3IodD0wO3I+dDt0KyspbFt0XT1lW3RdO2Zvcih0PTA7cj50OysrdCl1W2UuY2hhckNvZGVBdCh0KV09dDt1WyItIi5jaGFyQ29kZUF0KDApXT02Mix1WyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBpKHQpe3ZhciBlLHIsbixpLG8sYSxzPXQubGVuZ3RoO2lmKHMlND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO289Ij0iPT09dFtzLTJdPzI6Ij0iPT09dFtzLTFdPzE6MCxhPW5ldyBjKDMqcy80LW8pLG49bz4wP3MtNDpzO3ZhciBsPTA7Zm9yKGU9MCxyPTA7bj5lO2UrPTQscis9MylpPXVbdC5jaGFyQ29kZUF0KGUpXTw8MTh8dVt0LmNoYXJDb2RlQXQoZSsxKV08PDEyfHVbdC5jaGFyQ29kZUF0KGUrMildPDw2fHVbdC5jaGFyQ29kZUF0KGUrMyldLGFbbCsrXT0oMTY3MTE2ODAmaSk+PjE2LGFbbCsrXT0oNjUyODAmaSk+PjgsYVtsKytdPTI1NSZpO3JldHVybiAyPT09bz8oaT11W3QuY2hhckNvZGVBdChlKV08PDJ8dVt0LmNoYXJDb2RlQXQoZSsxKV0+PjQsYVtsKytdPTI1NSZpKToxPT09byYmKGk9dVt0LmNoYXJDb2RlQXQoZSldPDwxMHx1W3QuY2hhckNvZGVBdChlKzEpXTw8NHx1W3QuY2hhckNvZGVBdChlKzIpXT4+MixhW2wrK109aT4+OCYyNTUsYVtsKytdPTI1NSZpKSxhfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGxbdD4+MTgmNjNdK2xbdD4+MTImNjNdK2xbdD4+NiY2M10rbFs2MyZ0XX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG4saT1bXSxhPWU7cj5hO2ErPTMpbj0odFthXTw8MTYpKyh0W2ErMV08PDgpK3RbYSsyXSxpLnB1c2gobyhuKSk7cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPXIlMyxpPSIiLG89W10scz0xNjM4Myx1PTAsYz1yLW47Yz51O3UrPXMpby5wdXNoKGEodCx1LHUrcz5jP2M6dStzKSk7cmV0dXJuIDE9PT1uPyhlPXRbci0xXSxpKz1sW2U+PjJdLGkrPWxbZTw8NCY2M10saSs9Ij09Iik6Mj09PW4mJihlPSh0W3ItMl08PDgpK3Rbci0xXSxpKz1sW2U+PjEwXSxpKz1sW2U+PjQmNjNdLGkrPWxbZTw8MiY2M10saSs9Ij0iKSxvLnB1c2goaSksby5qb2luKCIiKX1yLnRvQnl0ZUFycmF5PWksci5mcm9tQnl0ZUFycmF5PXM7dmFyIGw9W10sdT1bXSxjPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5O24oKX0se31dLDU0OltmdW5jdGlvbih0LGUscil7ci5yZWFkPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG8sYSxzPTgqaS1uLTEsbD0oMTw8cyktMSx1PWw+PjEsYz0tNyxoPXI/aS0xOjAsZj1yPy0xOjEscD10W2UraF07Zm9yKGgrPWYsbz1wJigxPDwtYyktMSxwPj49LWMsYys9cztjPjA7bz0yNTYqbyt0W2UraF0saCs9ZixjLT04KTtmb3IoYT1vJigxPDwtYyktMSxvPj49LWMsYys9bjtjPjA7YT0yNTYqYSt0W2UraF0saCs9ZixjLT04KTtpZigwPT09bylvPTEtdTtlbHNle2lmKG89PT1sKXJldHVybiBhP05hTjoocD8tMToxKSooMS8wKTthKz1NYXRoLnBvdygyLG4pLG8tPXV9cmV0dXJuKHA/LTE6MSkqYSpNYXRoLnBvdygyLG8tbil9LHIud3JpdGU9ZnVuY3Rpb24odCxlLHIsbixpLG8pe3ZhciBhLHMsbCx1PTgqby1pLTEsYz0oMTw8dSktMSxoPWM+PjEsZj0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHA9bj8wOm8tMSxkPW4/MTotMSxtPTA+ZXx8MD09PWUmJjA+MS9lPzE6MDtmb3IoZT1NYXRoLmFicyhlKSxpc05hTihlKXx8ZT09PTEvMD8ocz1pc05hTihlKT8xOjAsYT1jKTooYT1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSxlKihsPU1hdGgucG93KDIsLWEpKTwxJiYoYS0tLGwqPTIpLGUrPWEraD49MT9mL2w6ZipNYXRoLnBvdygyLDEtaCksZSpsPj0yJiYoYSsrLGwvPTIpLGEraD49Yz8ocz0wLGE9Yyk6YStoPj0xPyhzPShlKmwtMSkqTWF0aC5wb3coMixpKSxhKz1oKToocz1lKk1hdGgucG93KDIsaC0xKSpNYXRoLnBvdygyLGkpLGE9MCkpO2k+PTg7dFtyK3BdPTI1NSZzLHArPWQscy89MjU2LGktPTgpO2ZvcihhPWE8PGl8cyx1Kz1pO3U+MDt0W3IrcF09MjU1JmEscCs9ZCxhLz0yNTYsdS09OCk7dFtyK3AtZF18PTEyOCptfX0se31dLDU1OltmdW5jdGlvbih0LGUscil7dmFyIG49e30udG9TdHJpbmc7ZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PW4uY2FsbCh0KX19LHt9XSw1NjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt0aGlzLl9ldmVudHM9dGhpcy5fZXZlbnRzfHx7fSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9ZnVuY3Rpb24gaSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH1mdW5jdGlvbiBvKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdH1mdW5jdGlvbiBhKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXR9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdm9pZCAwPT09dH1lLmV4cG9ydHM9bixuLkV2ZW50RW1pdHRlcj1uLG4ucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLG4ucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwLG4uZGVmYXVsdE1heExpc3RlbmVycz0xMCxuLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7aWYoIW8odCl8fDA+dHx8aXNOYU4odCkpdGhyb3cgVHlwZUVycm9yKCJuIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIiKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPXQsdGhpc30sbi5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4sbyxsLHU7aWYodGhpcy5fZXZlbnRzfHwodGhpcy5fZXZlbnRzPXt9KSwiZXJyb3IiPT09dCYmKCF0aGlzLl9ldmVudHMuZXJyb3J8fGEodGhpcy5fZXZlbnRzLmVycm9yKSYmIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKXtpZihlPWFyZ3VtZW50c1sxXSxlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgZTt0aHJvdyBUeXBlRXJyb3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCAiZXJyb3IiIGV2ZW50LicpfWlmKHI9dGhpcy5fZXZlbnRzW3RdLHMocikpcmV0dXJuITE7aWYoaShyKSlzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnIuY2FsbCh0aGlzKTticmVhaztjYXNlIDI6ci5jYWxsKHRoaXMsYXJndW1lbnRzWzFdKTticmVhaztjYXNlIDM6ci5jYWxsKHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSk7YnJlYWs7ZGVmYXVsdDpvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxyLmFwcGx5KHRoaXMsbyl9ZWxzZSBpZihhKHIpKWZvcihvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSx1PXIuc2xpY2UoKSxuPXUubGVuZ3RoLGw9MDtuPmw7bCsrKXVbbF0uYXBwbHkodGhpcyxvKTtyZXR1cm4hMH0sbi5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXt2YXIgcjtpZighaShlKSl0aHJvdyBUeXBlRXJyb3IoImxpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbiIpO3JldHVybiB0aGlzLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9e30pLHRoaXMuX2V2ZW50cy5uZXdMaXN0ZW5lciYmdGhpcy5lbWl0KCJuZXdMaXN0ZW5lciIsdCxpKGUubGlzdGVuZXIpP2UubGlzdGVuZXI6ZSksdGhpcy5fZXZlbnRzW3RdP2EodGhpcy5fZXZlbnRzW3RdKT90aGlzLl9ldmVudHNbdF0ucHVzaChlKTp0aGlzLl9ldmVudHNbdF09W3RoaXMuX2V2ZW50c1t0XSxlXTp0aGlzLl9ldmVudHNbdF09ZSxhKHRoaXMuX2V2ZW50c1t0XSkmJiF0aGlzLl9ldmVudHNbdF0ud2FybmVkJiYocj1zKHRoaXMuX21heExpc3RlbmVycyk/bi5kZWZhdWx0TWF4TGlzdGVuZXJzOnRoaXMuX21heExpc3RlbmVycyxyJiZyPjAmJnRoaXMuX2V2ZW50c1t0XS5sZW5ndGg+ciYmKHRoaXMuX2V2ZW50c1t0XS53YXJuZWQ9ITAsY29uc29sZS5lcnJvcigiKG5vZGUpIHdhcm5pbmc6IHBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4iLHRoaXMuX2V2ZW50c1t0XS5sZW5ndGgpLCJmdW5jdGlvbiI9PXR5cGVvZiBjb25zb2xlLnRyYWNlJiZjb25zb2xlLnRyYWNlKCkpKSx0aGlzfSxuLnByb3RvdHlwZS5vbj1uLnByb3RvdHlwZS5hZGRMaXN0ZW5lcixuLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMucmVtb3ZlTGlzdGVuZXIodCxyKSxufHwobj0hMCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9aWYoIWkoZSkpdGhyb3cgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt2YXIgbj0hMTtyZXR1cm4gci5saXN0ZW5lcj1lLHRoaXMub24odCxyKSx0aGlzfSxuLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciByLG4sbyxzO2lmKCFpKGUpKXRocm93IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIik7aWYoIXRoaXMuX2V2ZW50c3x8IXRoaXMuX2V2ZW50c1t0XSlyZXR1cm4gdGhpcztpZihyPXRoaXMuX2V2ZW50c1t0XSxvPXIubGVuZ3RoLG49LTEscj09PWV8fGkoci5saXN0ZW5lcikmJnIubGlzdGVuZXI9PT1lKWRlbGV0ZSB0aGlzLl9ldmVudHNbdF0sdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIix0LGUpO2Vsc2UgaWYoYShyKSl7Zm9yKHM9bztzLS0gPjA7KWlmKHJbc109PT1lfHxyW3NdLmxpc3RlbmVyJiZyW3NdLmxpc3RlbmVyPT09ZSl7bj1zO2JyZWFrfWlmKDA+bilyZXR1cm4gdGhpczsxPT09ci5sZW5ndGg/KHIubGVuZ3RoPTAsZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSk6ci5zcGxpY2UobiwxKSx0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLHQsZSl9cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbih0KXt2YXIgZSxyO2lmKCF0aGlzLl9ldmVudHMpcmV0dXJuIHRoaXM7aWYoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fZXZlbnRzPXt9OnRoaXMuX2V2ZW50c1t0XSYmZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoZSBpbiB0aGlzLl9ldmVudHMpInJlbW92ZUxpc3RlbmVyIiE9PWUmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGUpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9e30sdGhpc31pZihyPXRoaXMuX2V2ZW50c1t0XSxpKHIpKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxyKTtlbHNlIGlmKHIpZm9yKDtyLmxlbmd0aDspdGhpcy5yZW1vdmVMaXN0ZW5lcih0LHJbci5sZW5ndGgtMV0pO3JldHVybiBkZWxldGUgdGhpcy5fZXZlbnRzW3RdLHRoaXN9LG4ucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gZT10aGlzLl9ldmVudHMmJnRoaXMuX2V2ZW50c1t0XT9pKHRoaXMuX2V2ZW50c1t0XSk/W3RoaXMuX2V2ZW50c1t0XV06dGhpcy5fZXZlbnRzW3RdLnNsaWNlKCk6W119LG4ucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXZlbnRzKXt2YXIgZT10aGlzLl9ldmVudHNbdF07aWYoaShlKSlyZXR1cm4gMTtpZihlKXJldHVybiBlLmxlbmd0aH1yZXR1cm4gMH0sbi5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGlzdGVuZXJDb3VudChlKX19LHt9XSw1NzpbZnVuY3Rpb24odCxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWUsdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OmUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9fSx7fV0sNTg6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGk9dFtuXTsiLiI9PT1pP3Quc3BsaWNlKG4sMSk6Ii4uIj09PWk/KHQuc3BsaWNlKG4sMSkscisrKTpyJiYodC5zcGxpY2UobiwxKSxyLS0pfWlmKGUpZm9yKDtyLS07cil0LnVuc2hpZnQoIi4uIik7cmV0dXJuIHR9ZnVuY3Rpb24gbih0LGUpe2lmKHQuZmlsdGVyKXJldHVybiB0LmZpbHRlcihlKTtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKWUodFtuXSxuLHQpJiZyLnB1c2godFtuXSk7cmV0dXJuIHJ9dmFyIGk9L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvLG89ZnVuY3Rpb24odCl7cmV0dXJuIGkuZXhlYyh0KS5zbGljZSgxKX07ci5yZXNvbHZlPWZ1bmN0aW9uKCl7Zm9yKHZhciByPSIiLGk9ITEsbz1hcmd1bWVudHMubGVuZ3RoLTE7bz49LTEmJiFpO28tLSl7dmFyIGE9bz49MD9hcmd1bWVudHNbb106dC5jd2QoKTtpZigic3RyaW5nIiE9dHlwZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTthJiYocj1hKyIvIityLGk9Ii8iPT09YS5jaGFyQXQoMCkpfXJldHVybiByPWUobihyLnNwbGl0KCIvIiksZnVuY3Rpb24odCl7cmV0dXJuISF0fSksIWkpLmpvaW4oIi8iKSwoaT8iLyI6IiIpK3J8fCIuIn0sci5ub3JtYWxpemU9ZnVuY3Rpb24odCl7dmFyIGk9ci5pc0Fic29sdXRlKHQpLG89Ii8iPT09YSh0LC0xKTtyZXR1cm4gdD1lKG4odC5zcGxpdCgiLyIpLGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pLCFpKS5qb2luKCIvIiksdHx8aXx8KHQ9Ii4iKSx0JiZvJiYodCs9Ii8iKSwoaT8iLyI6IiIpK3R9LHIuaXNBYnNvbHV0ZT1mdW5jdGlvbih0KXtyZXR1cm4iLyI9PT10LmNoYXJBdCgwKX0sci5qb2luPWZ1bmN0aW9uKCl7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiByLm5vcm1hbGl6ZShuKHQsZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtyZXR1cm4gdH0pLmpvaW4oIi8iKSl9LHIucmVsYXRpdmU9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGgmJiIiPT09dFtlXTtlKyspO2Zvcih2YXIgcj10Lmxlbmd0aC0xO3I+PTAmJiIiPT09dFtyXTtyLS0pO3JldHVybiBlPnI/W106dC5zbGljZShlLHItZSsxKX10PXIucmVzb2x2ZSh0KS5zdWJzdHIoMSksZT1yLnJlc29sdmUoZSkuc3Vic3RyKDEpO2Zvcih2YXIgaT1uKHQuc3BsaXQoIi8iKSksbz1uKGUuc3BsaXQoIi8iKSksYT1NYXRoLm1pbihpLmxlbmd0aCxvLmxlbmd0aCkscz1hLGw9MDthPmw7bCsrKWlmKGlbbF0hPT1vW2xdKXtzPWw7YnJlYWt9Zm9yKHZhciB1PVtdLGw9cztsPGkubGVuZ3RoO2wrKyl1LnB1c2goIi4uIik7cmV0dXJuIHU9dS5jb25jYXQoby5zbGljZShzKSksdS5qb2luKCIvIil9LHIuc2VwPSIvIixyLmRlbGltaXRlcj0iOiIsci5kaXJuYW1lPWZ1bmN0aW9uKHQpe3ZhciBlPW8odCkscj1lWzBdLG49ZVsxXTtyZXR1cm4gcnx8bj8obiYmKG49bi5zdWJzdHIoMCxuLmxlbmd0aC0xKSkscituKToiLiJ9LHIuYmFzZW5hbWU9ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHQpWzJdO3JldHVybiBlJiZyLnN1YnN0cigtMSplLmxlbmd0aCk9PT1lJiYocj1yLnN1YnN0cigwLHIubGVuZ3RoLWUubGVuZ3RoKSkscn0sci5leHRuYW1lPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQpWzNdfTt2YXIgYT0iYiI9PT0iYWIiLnN1YnN0cigtMSk/ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LnN1YnN0cihlLHIpfTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDA+ZSYmKGU9dC5sZW5ndGgrZSksdC5zdWJzdHIoZSxyKX19KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo1OX1dLDU5OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe2M9ITEscy5sZW5ndGg/dT1zLmNvbmNhdCh1KTpoPS0xLHUubGVuZ3RoJiZpKCl9ZnVuY3Rpb24gaSgpe2lmKCFjKXt2YXIgdD1zZXRUaW1lb3V0KG4pO2M9ITA7Zm9yKHZhciBlPXUubGVuZ3RoO2U7KXtmb3Iocz11LHU9W107KytoPGU7KXMmJnNbaF0ucnVuKCk7aD0tMSxlPXUubGVuZ3RofXM9bnVsbCxjPSExLGNsZWFyVGltZW91dCh0KX19ZnVuY3Rpb24gbyh0LGUpe3RoaXMuZnVuPXQsdGhpcy5hcnJheT1lfWZ1bmN0aW9uIGEoKXt9dmFyIHMsbD1lLmV4cG9ydHM9e30sdT1bXSxjPSExLGg9LTE7bC5uZXh0VGljaz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllW3ItMV09YXJndW1lbnRzW3JdO3UucHVzaChuZXcgbyh0LGUpKSwxIT09dS5sZW5ndGh8fGN8fHNldFRpbWVvdXQoaSwwKX0sby5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sbC50aXRsZT0iYnJvd3NlciIsbC5icm93c2VyPSEwLGwuZW52PXt9LGwuYXJndj1bXSxsLnZlcnNpb249IiIsbC52ZXJzaW9ucz17fSxsLm9uPWEsbC5hZGRMaXN0ZW5lcj1hLGwub25jZT1hLGwub2ZmPWEsbC5yZW1vdmVMaXN0ZW5lcj1hLGwucmVtb3ZlQWxsTGlzdGVuZXJzPWEsbC5lbWl0PWEsbC5iaW5kaW5nPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sbC5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LGwuY2hkaXI9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sbC51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0se31dLDYwOltmdW5jdGlvbihlLHIsbil7KGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihpKXtmdW5jdGlvbiBvKHQpe3Rocm93IG5ldyBSYW5nZUVycm9yKFJbdF0pfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1bXTtyLS07KW5bcl09ZSh0W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9dC5zcGxpdCgiQCIpLG49IiI7ci5sZW5ndGg+MSYmKG49clswXSsiQCIsdD1yWzFdKSx0PXQucmVwbGFjZShDLCIuIik7dmFyIGk9dC5zcGxpdCgiLiIpLG89YShpLGUpLmpvaW4oIi4iKTtyZXR1cm4gbitvfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlLHIsbj1bXSxpPTAsbz10Lmxlbmd0aDtvPmk7KWU9dC5jaGFyQ29kZUF0KGkrKyksZT49NTUyOTYmJjU2MzE5Pj1lJiZvPmk/KHI9dC5jaGFyQ29kZUF0KGkrKyksNTYzMjA9PSg2NDUxMiZyKT9uLnB1c2goKCgxMDIzJmUpPDwxMCkrKDEwMjMmcikrNjU1MzYpOihuLnB1c2goZSksaS0tKSk6bi5wdXNoKGUpO3JldHVybiBufWZ1bmN0aW9uIHUodCl7cmV0dXJuIGEodCxmdW5jdGlvbih0KXt2YXIgZT0iIjtyZXR1cm4gdD42NTUzNSYmKHQtPTY1NTM2LGUrPU8odD4+PjEwJjEwMjN8NTUyOTYpLHQ9NTYzMjB8MTAyMyZ0KSxlKz1PKHQpfSkuam9pbigiIil9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gMTA+dC00OD90LTIyOjI2PnQtNjU/dC02NToyNj50LTk3P3QtOTc6TX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQrMjIrNzUqKDI2PnQpLSgoMCE9ZSk8PDUpfWZ1bmN0aW9uIGYodCxlLHIpe3ZhciBuPTA7Zm9yKHQ9cj9EKHQvRSk6dD4+MSx0Kz1EKHQvZSk7dD5qKkE+PjE7bis9TSl0PUQodC9qKTtyZXR1cm4gRChuKyhqKzEpKnQvKHQrVCkpfWZ1bmN0aW9uIHAodCl7dmFyIGUscixuLGksYSxzLGwsaCxwLGQsbT1bXSxnPXQubGVuZ3RoLHY9MCx5PUwsYj1TO2ZvcihyPXQubGFzdEluZGV4T2YoeiksMD5yJiYocj0wKSxuPTA7cj5uOysrbil0LmNoYXJDb2RlQXQobik+PTEyOCYmbygibm90LWJhc2ljIiksbS5wdXNoKHQuY2hhckNvZGVBdChuKSk7Zm9yKGk9cj4wP3IrMTowO2c+aTspe2ZvcihhPXYscz0xLGw9TTtpPj1nJiZvKCJpbnZhbGlkLWlucHV0IiksaD1jKHQuY2hhckNvZGVBdChpKyspKSwoaD49TXx8aD5EKCh3LXYpL3MpKSYmbygib3ZlcmZsb3ciKSx2Kz1oKnMscD1iPj1sP2s6bD49YitBP0E6bC1iLCEocD5oKTtsKz1NKWQ9TS1wLHM+RCh3L2QpJiZvKCJvdmVyZmxvdyIpLHMqPWQ7ZT1tLmxlbmd0aCsxLGI9Zih2LWEsZSwwPT1hKSxEKHYvZSk+dy15JiZvKCJvdmVyZmxvdyIpLHkrPUQodi9lKSx2JT1lLG0uc3BsaWNlKHYrKywwLHkpfXJldHVybiB1KG0pfWZ1bmN0aW9uIGQodCl7dmFyIGUscixuLGksYSxzLHUsYyxwLGQsbSxnLHYseSxiLHg9W107Zm9yKHQ9bCh0KSxnPXQubGVuZ3RoLGU9TCxyPTAsYT1TLHM9MDtnPnM7KytzKW09dFtzXSwxMjg+bSYmeC5wdXNoKE8obSkpO2ZvcihuPWk9eC5sZW5ndGgsaSYmeC5wdXNoKHopO2c+bjspe2Zvcih1PXcscz0wO2c+czsrK3MpbT10W3NdLG0+PWUmJnU+bSYmKHU9bSk7Zm9yKHY9bisxLHUtZT5EKCh3LXIpL3YpJiZvKCJvdmVyZmxvdyIpLHIrPSh1LWUpKnYsZT11LHM9MDtnPnM7KytzKWlmKG09dFtzXSxlPm0mJisrcj53JiZvKCJvdmVyZmxvdyIpLG09PWUpe2ZvcihjPXIscD1NO2Q9YT49cD9rOnA+PWErQT9BOnAtYSwhKGQ+Yyk7cCs9TSliPWMtZCx5PU0tZCx4LnB1c2goTyhoKGQrYiV5LDApKSksYz1EKGIveSk7eC5wdXNoKE8oaChjLDApKSksYT1mKHIsdixuPT1pKSxyPTAsKytufSsrciwrK2V9cmV0dXJuIHguam9pbigiIil9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gcyh0LGZ1bmN0aW9uKHQpe3JldHVybiBJLnRlc3QodCk/cCh0LnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOnR9KX1mdW5jdGlvbiBnKHQpe3JldHVybiBzKHQsZnVuY3Rpb24odCl7cmV0dXJuIFAudGVzdCh0KT8ieG4tLSIrZCh0KTp0fSl9dmFyIHY9Im9iamVjdCI9PXR5cGVvZiBuJiZuJiYhbi5ub2RlVHlwZSYmbix5PSJvYmplY3QiPT10eXBlb2YgciYmciYmIXIubm9kZVR5cGUmJnIsYj0ib2JqZWN0Ij09dHlwZW9mIGUmJmU7Yi5nbG9iYWwhPT1iJiZiLndpbmRvdyE9PWImJmIuc2VsZiE9PWJ8fChpPWIpO3ZhciB4LF8sdz0yMTQ3NDgzNjQ3LE09MzYsaz0xLEE9MjYsVD0zOCxFPTcwMCxTPTcyLEw9MTI4LHo9Ii0iLEk9L154bi0tLyxQPS9bXlx4MjAtXHg3RV0vLEM9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLFI9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LGo9TS1rLEQ9TWF0aC5mbG9vcixPPVN0cmluZy5mcm9tQ2hhckNvZGU7aWYoeD17dmVyc2lvbjoiMS4zLjIiLHVjczI6e2RlY29kZTpsLGVuY29kZTp1fSxkZWNvZGU6cCxlbmNvZGU6ZCx0b0FTQ0lJOmcsdG9Vbmljb2RlOm19LCJmdW5jdGlvbiI9PXR5cGVvZiB0JiYib2JqZWN0Ij09dHlwZW9mIHQuYW1kJiZ0LmFtZCl0KCJwdW55Y29kZSIsZnVuY3Rpb24oKXtyZXR1cm4geH0pO2Vsc2UgaWYodiYmeSlpZihyLmV4cG9ydHM9PXYpeS5leHBvcnRzPXg7ZWxzZSBmb3IoXyBpbiB4KXguaGFzT3duUHJvcGVydHkoXykmJih2W19dPXhbX10pO2Vsc2UgaS5wdW55Y29kZT14fSh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2U9ZXx8IiYiLHI9cnx8Ij0iO3ZhciBhPXt9O2lmKCJzdHJpbmciIT10eXBlb2YgdHx8MD09PXQubGVuZ3RoKXJldHVybiBhO3ZhciBzPS9cKy9nO3Q9dC5zcGxpdChlKTt2YXIgbD0xZTM7byYmIm51bWJlciI9PXR5cGVvZiBvLm1heEtleXMmJihsPW8ubWF4S2V5cyk7dmFyIHU9dC5sZW5ndGg7bD4wJiZ1PmwmJih1PWwpO2Zvcih2YXIgYz0wO3U+YzsrK2Mpe3ZhciBoLGYscCxkLG09dFtjXS5yZXBsYWNlKHMsIiUyMCIpLGc9bS5pbmRleE9mKHIpO2c+PTA/KGg9bS5zdWJzdHIoMCxnKSxmPW0uc3Vic3RyKGcrMSkpOihoPW0sZj0iIikscD1kZWNvZGVVUklDb21wb25lbnQoaCksZD1kZWNvZGVVUklDb21wb25lbnQoZiksbihhLHApP2koYVtwXSk/YVtwXS5wdXNoKGQpOmFbcF09W2FbcF0sZF06YVtwXT1kfXJldHVybiBhfTt2YXIgaT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfX0se31dLDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZih0Lm1hcClyZXR1cm4gdC5tYXAoZSk7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKylyLnB1c2goZSh0W25dLG4pKTtyZXR1cm4gcn12YXIgaT1mdW5jdGlvbih0KXtzd2l0Y2godHlwZW9mIHQpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gdDtjYXNlImJvb2xlYW4iOnJldHVybiB0PyJ0cnVlIjoiZmFsc2UiO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNGaW5pdGUodCk/dDoiIjtkZWZhdWx0OnJldHVybiIifX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3JldHVybiBlPWV8fCImIixyPXJ8fCI9IixudWxsPT09dCYmKHQ9dm9pZCAwKSwib2JqZWN0Ij09dHlwZW9mIHQ/bihhKHQpLGZ1bmN0aW9uKGEpe3ZhciBzPWVuY29kZVVSSUNvbXBvbmVudChpKGEpKStyO3JldHVybiBvKHRbYV0pP24odFthXSxmdW5jdGlvbih0KXtyZXR1cm4gcytlbmNvZGVVUklDb21wb25lbnQoaSh0KSl9KS5qb2luKGUpOnMrZW5jb2RlVVJJQ29tcG9uZW50KGkodFthXSkpfSkuam9pbihlKTpzP2VuY29kZVVSSUNvbXBvbmVudChpKHMpKStyK2VuY29kZVVSSUNvbXBvbmVudChpKHQpKToiIn07dmFyIG89QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0sYT1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJmUucHVzaChyKTtyZXR1cm4gZX19LHt9XSw2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmRlY29kZT1yLnBhcnNlPXQoIi4vZGVjb2RlIiksci5lbmNvZGU9ci5zdHJpbmdpZnk9dCgiLi9lbmNvZGUiKX0seyIuL2RlY29kZSI6NjEsIi4vZW5jb2RlIjo2Mn1dLDY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt0aGlzLnByb3RvY29sPW51bGwsdGhpcy5zbGFzaGVzPW51bGwsdGhpcy5hdXRoPW51bGwsdGhpcy5ob3N0PW51bGwsdGhpcy5wb3J0PW51bGwsdGhpcy5ob3N0bmFtZT1udWxsLHRoaXMuaGFzaD1udWxsLHRoaXMuc2VhcmNoPW51bGwsdGhpcy5xdWVyeT1udWxsLHRoaXMucGF0aG5hbWU9bnVsbCx0aGlzLnBhdGg9bnVsbCx0aGlzLmhyZWY9bnVsbH1mdW5jdGlvbiBpKHQsZSxyKXtpZih0JiZ1LmlzT2JqZWN0KHQpJiZ0IGluc3RhbmNlb2YgbilyZXR1cm4gdDt2YXIgaT1uZXcgbjtyZXR1cm4gaS5wYXJzZSh0LGUsciksaX1mdW5jdGlvbiBvKHQpe3JldHVybiB1LmlzU3RyaW5nKHQpJiYodD1pKHQpKSx0IGluc3RhbmNlb2Ygbj90LmZvcm1hdCgpOm4ucHJvdG90eXBlLmZvcm1hdC5jYWxsKHQpfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gaSh0LCExLCEwKS5yZXNvbHZlKGUpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdD9pKHQsITEsITApLnJlc29sdmVPYmplY3QoZSk6ZX12YXIgbD10KCJwdW55Y29kZSIpLHU9dCgiLi91dGlsIik7ci5wYXJzZT1pLHIucmVzb2x2ZT1hLHIucmVzb2x2ZU9iamVjdD1zLHIuZm9ybWF0PW8sci5Vcmw9bjt2YXIgYz0vXihbYS16MC05ListXSs6KS9pLGg9LzpbMC05XSokLyxmPS9eKFwvXC8/KD8hXC8pW15cP1xzXSopKFw/W15cc10qKT8kLyxwPVsiPCIsIj4iLCciJywiYCIsIiAiLCJcciIsIlxuIiwiCSJdLGQ9WyJ7IiwifSIsInwiLCJcXCIsIl4iLCJgIl0uY29uY2F0KHApLG09WyInIl0uY29uY2F0KGQpLGc9WyIlIiwiLyIsIj8iLCI7IiwiIyJdLmNvbmNhdChtKSx2PVsiLyIsIj8iLCIjIl0seT0yNTUsYj0vXlsrYS16MC05QS1aXy1dezAsNjN9JC8seD0vXihbK2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXz17amF2YXNjcmlwdDohMCwiamF2YXNjcmlwdDoiOiEwfSx3PXtqYXZhc2NyaXB0OiEwLCJqYXZhc2NyaXB0OiI6ITB9LE09e2h0dHA6ITAsaHR0cHM6ITAsZnRwOiEwLGdvcGhlcjohMCxmaWxlOiEwLCJodHRwOiI6ITAsImh0dHBzOiI6ITAsImZ0cDoiOiEwLCJnb3BoZXI6IjohMCwiZmlsZToiOiEwfSxrPXQoInF1ZXJ5c3RyaW5nIik7bi5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCxlLHIpe2lmKCF1LmlzU3RyaW5nKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2YgdCk7dmFyIG49dC5pbmRleE9mKCI/IiksaT0tMSE9PW4mJm48dC5pbmRleE9mKCIjIik/Ij8iOiIjIixvPXQuc3BsaXQoaSksYT0vXFwvZztvWzBdPW9bMF0ucmVwbGFjZShhLCIvIiksdD1vLmpvaW4oaSk7dmFyIHM9dDtpZihzPXMudHJpbSgpLCFyJiYxPT09dC5zcGxpdCgiIyIpLmxlbmd0aCl7dmFyIGg9Zi5leGVjKHMpO2lmKGgpcmV0dXJuIHRoaXMucGF0aD1zLHRoaXMuaHJlZj1zLHRoaXMucGF0aG5hbWU9aFsxXSxoWzJdPyh0aGlzLnNlYXJjaD1oWzJdLGU/dGhpcy5xdWVyeT1rLnBhcnNlKHRoaXMuc2VhcmNoLnN1YnN0cigxKSk6dGhpcy5xdWVyeT10aGlzLnNlYXJjaC5zdWJzdHIoMSkpOmUmJih0aGlzLnNlYXJjaD0iIix0aGlzLnF1ZXJ5PXt9KSx0aGlzfXZhciBwPWMuZXhlYyhzKTtpZihwKXtwPXBbMF07dmFyIGQ9cC50b0xvd2VyQ2FzZSgpO3RoaXMucHJvdG9jb2w9ZCxzPXMuc3Vic3RyKHAubGVuZ3RoKX1pZihyfHxwfHxzLm1hdGNoKC9eXC9cL1teQFwvXStAW15AXC9dKy8pKXt2YXIgQT0iLy8iPT09cy5zdWJzdHIoMCwyKTshQXx8cCYmd1twXXx8KHM9cy5zdWJzdHIoMiksdGhpcy5zbGFzaGVzPSEwKX1pZighd1twXSYmKEF8fHAmJiFNW3BdKSl7Zm9yKHZhciBUPS0xLEU9MDtFPHYubGVuZ3RoO0UrKyl7dmFyIFM9cy5pbmRleE9mKHZbRV0pOy0xIT09UyYmKC0xPT09VHx8VD5TKSYmKFQ9Uyl9dmFyIEwsejt6PS0xPT09VD9zLmxhc3RJbmRleE9mKCJAIik6cy5sYXN0SW5kZXhPZigiQCIsVCksLTEhPT16JiYoTD1zLnNsaWNlKDAseikscz1zLnNsaWNlKHorMSksdGhpcy5hdXRoPWRlY29kZVVSSUNvbXBvbmVudChMKSksVD0tMTtmb3IodmFyIEU9MDtFPGcubGVuZ3RoO0UrKyl7dmFyIFM9cy5pbmRleE9mKGdbRV0pOy0xIT09UyYmKC0xPT09VHx8VD5TKSYmKFQ9Uyl9LTE9PT1UJiYoVD1zLmxlbmd0aCksdGhpcy5ob3N0PXMuc2xpY2UoMCxUKSxzPXMuc2xpY2UoVCksdGhpcy5wYXJzZUhvc3QoKSx0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWV8fCIiO3ZhciBJPSJbIj09PXRoaXMuaG9zdG5hbWVbMF0mJiJdIj09PXRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGgtMV07aWYoIUkpZm9yKHZhciBQPXRoaXMuaG9zdG5hbWUuc3BsaXQoL1wuLyksRT0wLEM9UC5sZW5ndGg7Qz5FO0UrKyl7dmFyIFI9UFtFXTtpZihSJiYhUi5tYXRjaChiKSl7Zm9yKHZhciBqPSIiLEQ9MCxPPVIubGVuZ3RoO08+RDtEKyspais9Ui5jaGFyQ29kZUF0KEQpPjEyNz8ieCI6UltEXTtpZighai5tYXRjaChiKSl7dmFyIEY9UC5zbGljZSgwLEUpLE49UC5zbGljZShFKzEpLEI9Ui5tYXRjaCh4KTtCJiYoRi5wdXNoKEJbMV0pLE4udW5zaGlmdChCWzJdKSksTi5sZW5ndGgmJihzPSIvIitOLmpvaW4oIi4iKStzKSx0aGlzLmhvc3RuYW1lPUYuam9pbigiLiIpO2JyZWFrfX19dGhpcy5ob3N0bmFtZS5sZW5ndGg+eT90aGlzLmhvc3RuYW1lPSIiOnRoaXMuaG9zdG5hbWU9dGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpLEl8fCh0aGlzLmhvc3RuYW1lPWwudG9BU0NJSSh0aGlzLmhvc3RuYW1lKSk7dmFyIFU9dGhpcy5wb3J0PyI6Iit0aGlzLnBvcnQ6IiIsVj10aGlzLmhvc3RuYW1lfHwiIjt0aGlzLmhvc3Q9VitVLHRoaXMuaHJlZis9dGhpcy5ob3N0LEkmJih0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsdGhpcy5ob3N0bmFtZS5sZW5ndGgtMiksIi8iIT09c1swXSYmKHM9Ii8iK3MpKX1pZighX1tkXSlmb3IodmFyIEU9MCxDPW0ubGVuZ3RoO0M+RTtFKyspe3ZhciBxPW1bRV07aWYoLTEhPT1zLmluZGV4T2YocSkpe3ZhciBHPWVuY29kZVVSSUNvbXBvbmVudChxKTtHPT09cSYmKEc9ZXNjYXBlKHEpKSxzPXMuc3BsaXQocSkuam9pbihHKX19dmFyIEg9cy5pbmRleE9mKCIjIik7LTEhPT1IJiYodGhpcy5oYXNoPXMuc3Vic3RyKEgpLHM9cy5zbGljZSgwLEgpKTt2YXIgWD1zLmluZGV4T2YoIj8iKTtpZigtMSE9PVg/KHRoaXMuc2VhcmNoPXMuc3Vic3RyKFgpLHRoaXMucXVlcnk9cy5zdWJzdHIoWCsxKSxlJiYodGhpcy5xdWVyeT1rLnBhcnNlKHRoaXMucXVlcnkpKSxzPXMuc2xpY2UoMCxYKSk6ZSYmKHRoaXMuc2VhcmNoPSIiLHRoaXMucXVlcnk9e30pLHMmJih0aGlzLnBhdGhuYW1lPXMpLE1bZF0mJnRoaXMuaG9zdG5hbWUmJiF0aGlzLnBhdGhuYW1lJiYodGhpcy5wYXRobmFtZT0iLyIpLHRoaXMucGF0aG5hbWV8fHRoaXMuc2VhcmNoKXt2YXIgVT10aGlzLnBhdGhuYW1lfHwiIixZPXRoaXMuc2VhcmNofHwiIjt0aGlzLnBhdGg9VStZfXJldHVybiB0aGlzLmhyZWY9dGhpcy5mb3JtYXQoKSx0aGlzfSxuLnByb3RvdHlwZS5mb3JtYXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmF1dGh8fCIiO3QmJih0PWVuY29kZVVSSUNvbXBvbmVudCh0KSx0PXQucmVwbGFjZSgvJTNBL2ksIjoiKSx0Kz0iQCIpO3ZhciBlPXRoaXMucHJvdG9jb2x8fCIiLHI9dGhpcy5wYXRobmFtZXx8IiIsbj10aGlzLmhhc2h8fCIiLGk9ITEsbz0iIjt0aGlzLmhvc3Q/aT10K3RoaXMuaG9zdDp0aGlzLmhvc3RuYW1lJiYoaT10KygtMT09PXRoaXMuaG9zdG5hbWUuaW5kZXhPZigiOiIpP3RoaXMuaG9zdG5hbWU6IlsiK3RoaXMuaG9zdG5hbWUrIl0iKSx0aGlzLnBvcnQmJihpKz0iOiIrdGhpcy5wb3J0KSksdGhpcy5xdWVyeSYmdS5pc09iamVjdCh0aGlzLnF1ZXJ5KSYmT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoJiYobz1rLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KSk7dmFyIGE9dGhpcy5zZWFyY2h8fG8mJiI/IitvfHwiIjtyZXR1cm4gZSYmIjoiIT09ZS5zdWJzdHIoLTEpJiYoZSs9IjoiKSx0aGlzLnNsYXNoZXN8fCghZXx8TVtlXSkmJmkhPT0hMT8oaT0iLy8iKyhpfHwiIiksciYmIi8iIT09ci5jaGFyQXQoMCkmJihyPSIvIityKSk6aXx8KGk9IiIpLG4mJiIjIiE9PW4uY2hhckF0KDApJiYobj0iIyIrbiksYSYmIj8iIT09YS5jaGFyQXQoMCkmJihhPSI/IithKSxyPXIucmVwbGFjZSgvWz8jXS9nLGZ1bmN0aW9uKHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCl9KSxhPWEucmVwbGFjZSgiIyIsIiUyMyIpLGUraStyK2Erbn0sbi5wcm90b3R5cGUucmVzb2x2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXNvbHZlT2JqZWN0KGkodCwhMSwhMCkpLmZvcm1hdCgpfSxuLnByb3RvdHlwZS5yZXNvbHZlT2JqZWN0PWZ1bmN0aW9uKHQpe2lmKHUuaXNTdHJpbmcodCkpe3ZhciBlPW5ldyBuO2UucGFyc2UodCwhMSwhMCksdD1lfWZvcih2YXIgcj1uZXcgbixpPU9iamVjdC5rZXlzKHRoaXMpLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGE9aVtvXTtyW2FdPXRoaXNbYV19aWYoci5oYXNoPXQuaGFzaCwiIj09PXQuaHJlZilyZXR1cm4gci5ocmVmPXIuZm9ybWF0KCkscjtpZih0LnNsYXNoZXMmJiF0LnByb3RvY29sKXtmb3IodmFyIHM9T2JqZWN0LmtleXModCksbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgYz1zW2xdOyJwcm90b2NvbCIhPT1jJiYocltjXT10W2NdKX1yZXR1cm4gTVtyLnByb3RvY29sXSYmci5ob3N0bmFtZSYmIXIucGF0aG5hbWUmJihyLnBhdGg9ci5wYXRobmFtZT0iLyIpLHIuaHJlZj1yLmZvcm1hdCgpLHJ9aWYodC5wcm90b2NvbCYmdC5wcm90b2NvbCE9PXIucHJvdG9jb2wpe2lmKCFNW3QucHJvdG9jb2xdKXtmb3IodmFyIGg9T2JqZWN0LmtleXModCksZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgcD1oW2ZdO3JbcF09dFtwXX1yZXR1cm4gci5ocmVmPXIuZm9ybWF0KCkscn1pZihyLnByb3RvY29sPXQucHJvdG9jb2wsdC5ob3N0fHx3W3QucHJvdG9jb2xdKXIucGF0aG5hbWU9dC5wYXRobmFtZTtlbHNle2Zvcih2YXIgZD0odC5wYXRobmFtZXx8IiIpLnNwbGl0KCIvIik7ZC5sZW5ndGgmJiEodC5ob3N0PWQuc2hpZnQoKSk7KTt0Lmhvc3R8fCh0Lmhvc3Q9IiIpLHQuaG9zdG5hbWV8fCh0Lmhvc3RuYW1lPSIiKSwiIiE9PWRbMF0mJmQudW5zaGlmdCgiIiksZC5sZW5ndGg8MiYmZC51bnNoaWZ0KCIiKSxyLnBhdGhuYW1lPWQuam9pbigiLyIpfWlmKHIuc2VhcmNoPXQuc2VhcmNoLHIucXVlcnk9dC5xdWVyeSxyLmhvc3Q9dC5ob3N0fHwiIixyLmF1dGg9dC5hdXRoLHIuaG9zdG5hbWU9dC5ob3N0bmFtZXx8dC5ob3N0LHIucG9ydD10LnBvcnQsci5wYXRobmFtZXx8ci5zZWFyY2gpe3ZhciBtPXIucGF0aG5hbWV8fCIiLGc9ci5zZWFyY2h8fCIiO3IucGF0aD1tK2d9cmV0dXJuIHIuc2xhc2hlcz1yLnNsYXNoZXN8fHQuc2xhc2hlcyxyLmhyZWY9ci5mb3JtYXQoKSxyfXZhciB2PXIucGF0aG5hbWUmJiIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApLHk9dC5ob3N0fHx0LnBhdGhuYW1lJiYiLyI9PT10LnBhdGhuYW1lLmNoYXJBdCgwKSxiPXl8fHZ8fHIuaG9zdCYmdC5wYXRobmFtZSx4PWIsXz1yLnBhdGhuYW1lJiZyLnBhdGhuYW1lLnNwbGl0KCIvIil8fFtdLGQ9dC5wYXRobmFtZSYmdC5wYXRobmFtZS5zcGxpdCgiLyIpfHxbXSxrPXIucHJvdG9jb2wmJiFNW3IucHJvdG9jb2xdO2lmKGsmJihyLmhvc3RuYW1lPSIiLHIucG9ydD1udWxsLHIuaG9zdCYmKCIiPT09X1swXT9fWzBdPXIuaG9zdDpfLnVuc2hpZnQoci5ob3N0KSksci5ob3N0PSIiLHQucHJvdG9jb2wmJih0Lmhvc3RuYW1lPW51bGwsdC5wb3J0PW51bGwsdC5ob3N0JiYoIiI9PT1kWzBdP2RbMF09dC5ob3N0OmQudW5zaGlmdCh0Lmhvc3QpKSx0Lmhvc3Q9bnVsbCksYj1iJiYoIiI9PT1kWzBdfHwiIj09PV9bMF0pKSx5KXIuaG9zdD10Lmhvc3R8fCIiPT09dC5ob3N0P3QuaG9zdDpyLmhvc3Qsci5ob3N0bmFtZT10Lmhvc3RuYW1lfHwiIj09PXQuaG9zdG5hbWU/dC5ob3N0bmFtZTpyLmhvc3RuYW1lLHIuc2VhcmNoPXQuc2VhcmNoLHIucXVlcnk9dC5xdWVyeSxfPWQ7ZWxzZSBpZihkLmxlbmd0aClffHwoXz1bXSksXy5wb3AoKSxfPV8uY29uY2F0KGQpLHIuc2VhcmNoPXQuc2VhcmNoLHIucXVlcnk9dC5xdWVyeTtlbHNlIGlmKCF1LmlzTnVsbE9yVW5kZWZpbmVkKHQuc2VhcmNoKSl7aWYoayl7ci5ob3N0bmFtZT1yLmhvc3Q9Xy5zaGlmdCgpO3ZhciBBPXIuaG9zdCYmci5ob3N0LmluZGV4T2YoIkAiKT4wP3IuaG9zdC5zcGxpdCgiQCIpOiExO0EmJihyLmF1dGg9QS5zaGlmdCgpLHIuaG9zdD1yLmhvc3RuYW1lPUEuc2hpZnQoKSl9cmV0dXJuIHIuc2VhcmNoPXQuc2VhcmNoLHIucXVlcnk9dC5xdWVyeSx1LmlzTnVsbChyLnBhdGhuYW1lKSYmdS5pc051bGwoci5zZWFyY2gpfHwoci5wYXRoPShyLnBhdGhuYW1lP3IucGF0aG5hbWU6IiIpKyhyLnNlYXJjaD9yLnNlYXJjaDoiIikpLHIuaHJlZj1yLmZvcm1hdCgpLHJ9aWYoIV8ubGVuZ3RoKXJldHVybiByLnBhdGhuYW1lPW51bGwsci5zZWFyY2g/ci5wYXRoPSIvIityLnNlYXJjaDpyLnBhdGg9bnVsbCxyLmhyZWY9ci5mb3JtYXQoKSxyO2Zvcih2YXIgVD1fLnNsaWNlKC0xKVswXSxFPShyLmhvc3R8fHQuaG9zdHx8Xy5sZW5ndGg+MSkmJigiLiI9PT1UfHwiLi4iPT09VCl8fCIiPT09VCxTPTAsTD1fLmxlbmd0aDtMPj0wO0wtLSlUPV9bTF0sIi4iPT09VD9fLnNwbGljZShMLDEpOiIuLiI9PT1UPyhfLnNwbGljZShMLDEpLFMrKyk6UyYmKF8uc3BsaWNlKEwsMSksUy0tKTtpZighYiYmIXgpZm9yKDtTLS07UylfLnVuc2hpZnQoIi4uIik7IWJ8fCIiPT09X1swXXx8X1swXSYmIi8iPT09X1swXS5jaGFyQXQoMCl8fF8udW5zaGlmdCgiIiksRSYmIi8iIT09Xy5qb2luKCIvIikuc3Vic3RyKC0xKSYmXy5wdXNoKCIiKTt2YXIgej0iIj09PV9bMF18fF9bMF0mJiIvIj09PV9bMF0uY2hhckF0KDApO2lmKGspe3IuaG9zdG5hbWU9ci5ob3N0PXo/IiI6Xy5sZW5ndGg/Xy5zaGlmdCgpOiIiO3ZhciBBPXIuaG9zdCYmci5ob3N0LmluZGV4T2YoIkAiKT4wP3IuaG9zdC5zcGxpdCgiQCIpOiExO0EmJihyLmF1dGg9QS5zaGlmdCgpLHIuaG9zdD1yLmhvc3RuYW1lPUEuc2hpZnQoKSl9cmV0dXJuIGI9Ynx8ci5ob3N0JiZfLmxlbmd0aCxiJiYheiYmXy51bnNoaWZ0KCIiKSxfLmxlbmd0aD9yLnBhdGhuYW1lPV8uam9pbigiLyIpOihyLnBhdGhuYW1lPW51bGwsci5wYXRoPW51bGwpLHUuaXNOdWxsKHIucGF0aG5hbWUpJiZ1LmlzTnVsbChyLnNlYXJjaCl8fChyLnBhdGg9KHIucGF0aG5hbWU/ci5wYXRobmFtZToiIikrKHIuc2VhcmNoP3Iuc2VhcmNoOiIiKSksci5hdXRoPXQuYXV0aHx8ci5hdXRoLHIuc2xhc2hlcz1yLnNsYXNoZXN8fHQuc2xhc2hlcyxyLmhyZWY9ci5mb3JtYXQoKSxyfSxuLnByb3RvdHlwZS5wYXJzZUhvc3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhvc3QsZT1oLmV4ZWModCk7ZSYmKGU9ZVswXSwiOiIhPT1lJiYodGhpcy5wb3J0PWUuc3Vic3RyKDEpKSx0PXQuc3Vic3RyKDAsdC5sZW5ndGgtZS5sZW5ndGgpKSx0JiYodGhpcy5ob3N0bmFtZT10KX19LHsiLi91dGlsIjo2NSxwdW55Y29kZTo2MCxxdWVyeXN0cmluZzo2M31dLDY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aXNTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fSxpc09iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10fSxpc051bGw6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fSxpc051bGxPclVuZGVmaW5lZDpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dH19fSx7fV0sNjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVhZFVJbnQ4fX0se31dLDY3OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUsbil7ZnVuY3Rpb24gaSh0LGUpe3ZhciBuPXtzZWVuOltdLHN0eWxpemU6YX07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihuLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKG4uY29sb3JzPWFyZ3VtZW50c1szXSksbShlKT9uLnNob3dIaWRkZW49ZTplJiZyLl9leHRlbmQobixlKSxfKG4uc2hvd0hpZGRlbikmJihuLnNob3dIaWRkZW49ITEpLF8obi5kZXB0aCkmJihuLmRlcHRoPTIpLF8obi5jb2xvcnMpJiYobi5jb2xvcnM9ITEpLF8obi5jdXN0b21JbnNwZWN0KSYmKG4uY3VzdG9tSW5zcGVjdD0hMCksbi5jb2xvcnMmJihuLnN0eWxpemU9byksbChuLHQsbi5kZXB0aCl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPWkuc3R5bGVzW2VdO3JldHVybiByPyIbWyIraS5jb2xvcnNbcl1bMF0rIm0iK3QrIhtbIitpLmNvbG9yc1tyXVsxXSsibSI6dH1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHR9ZnVuY3Rpb24gcyh0KXt2YXIgZT17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQscil7ZVt0XT0hMH0pLGV9ZnVuY3Rpb24gbCh0LGUsbil7aWYodC5jdXN0b21JbnNwZWN0JiZlJiZUKGUuaW5zcGVjdCkmJmUuaW5zcGVjdCE9PXIuaW5zcGVjdCYmKCFlLmNvbnN0cnVjdG9yfHxlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PWUpKXt2YXIgaT1lLmluc3BlY3Qobix0KTtyZXR1cm4gYihpKXx8KGk9bCh0LGksbikpLGl9dmFyIG89dSh0LGUpO2lmKG8pcmV0dXJuIG87dmFyIGE9T2JqZWN0LmtleXMoZSksbT1zKGEpO2lmKHQuc2hvd0hpZGRlbiYmKGE9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkpLEEoZSkmJihhLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8YS5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gYyhlKTtpZigwPT09YS5sZW5ndGgpe2lmKFQoZSkpe3ZhciBnPWUubmFtZT8iOiAiK2UubmFtZToiIjtyZXR1cm4gdC5zdHlsaXplKCJbRnVuY3Rpb24iK2crIl0iLCJzcGVjaWFsIil9aWYodyhlKSlyZXR1cm4gdC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwicmVnZXhwIik7aWYoayhlKSlyZXR1cm4gdC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksImRhdGUiKTtpZihBKGUpKXJldHVybiBjKGUpfXZhciB2PSIiLHk9ITEseD1bInsiLCJ9Il07aWYoZChlKSYmKHk9ITAseD1bIlsiLCJdIl0pLFQoZSkpe3ZhciBfPWUubmFtZT8iOiAiK2UubmFtZToiIjt2PSIgW0Z1bmN0aW9uIitfKyJdIn1pZih3KGUpJiYodj0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKSxrKGUpJiYodj0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChlKSksQShlKSYmKHY9IiAiK2MoZSkpLDA9PT1hLmxlbmd0aCYmKCF5fHwwPT1lLmxlbmd0aCkpcmV0dXJuIHhbMF0rdit4WzFdO2lmKDA+bilyZXR1cm4gdyhlKT90LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLCJyZWdleHAiKTp0LnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpO3Quc2Vlbi5wdXNoKGUpO3ZhciBNO3JldHVybiBNPXk/aCh0LGUsbixtLGEpOmEubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBmKHQsZSxuLG0scix5KX0pLHQuc2Vlbi5wb3AoKSxwKE0sdix4KX1mdW5jdGlvbiB1KHQsZSl7aWYoXyhlKSlyZXR1cm4gdC5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZihiKGUpKXt2YXIgcj0iJyIrSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gdC5zdHlsaXplKHIsInN0cmluZyIpfXJldHVybiB5KGUpP3Quc3R5bGl6ZSgiIitlLCJudW1iZXIiKTptKGUpP3Quc3R5bGl6ZSgiIitlLCJib29sZWFuIik6ZyhlKT90LnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfWZ1bmN0aW9uIGModCl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKyJdIn1mdW5jdGlvbiBoKHQsZSxyLG4saSl7Zm9yKHZhciBvPVtdLGE9MCxzPWUubGVuZ3RoO3M+YTsrK2EpSShlLFN0cmluZyhhKSk/by5wdXNoKGYodCxlLHIsbixTdHJpbmcoYSksITApKTpvLnB1c2goIiIpO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5tYXRjaCgvXlxkKyQvKXx8by5wdXNoKGYodCxlLHIsbixpLCEwKSl9KSxvfWZ1bmN0aW9uIGYodCxlLHIsbixpLG8pe3ZhciBhLHMsdTtpZih1PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxpKXx8e3ZhbHVlOmVbaV19LHUuZ2V0P3M9dS5zZXQ/dC5zdHlsaXplKCJbR2V0dGVyL1NldHRlcl0iLCJzcGVjaWFsIik6dC5zdHlsaXplKCJbR2V0dGVyXSIsInNwZWNpYWwiKTp1LnNldCYmKHM9dC5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksSShuLGkpfHwoYT0iWyIraSsiXSIpLHN8fCh0LnNlZW4uaW5kZXhPZih1LnZhbHVlKTwwPyhzPWcocik/bCh0LHUudmFsdWUsbnVsbCk6bCh0LHUudmFsdWUsci0xKSxzLmluZGV4T2YoIlxuIik+LTEmJihzPW8/cy5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiAgIit0fSkuam9pbigiXG4iKS5zdWJzdHIoMik6IlxuIitzLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iICAgIit0fSkuam9pbigiXG4iKSkpOnM9dC5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSxfKGEpKXtpZihvJiZpLm1hdGNoKC9eXGQrJC8pKXJldHVybiBzO2E9SlNPTi5zdHJpbmdpZnkoIiIraSksYS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyhhPWEuc3Vic3RyKDEsYS5sZW5ndGgtMiksYT10LnN0eWxpemUoYSwibmFtZSIpKTooYT1hLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKS5yZXBsYWNlKC8oXiJ8IiQpL2csIiciKSxhPXQuc3R5bGl6ZShhLCJzdHJpbmciKSl9cmV0dXJuIGErIjogIitzfWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPTAsaT10LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBuKyssZS5pbmRleE9mKCJcbiIpPj0wJiZuKyssdCtlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKTtyZXR1cm4gaT42MD9yWzBdKygiIj09PWU/IiI6ZSsiXG4gIikrIiAiK3Quam9pbigiLFxuICAiKSsiICIrclsxXTpyWzBdK2UrIiAiK3Quam9pbigiLCAiKSsiICIrclsxXX1mdW5jdGlvbiBkKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdH1mdW5jdGlvbiBnKHQpe3JldHVybiBudWxsPT09dH1mdW5jdGlvbiB2KHQpe3JldHVybiBudWxsPT10fWZ1bmN0aW9uIHkodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fWZ1bmN0aW9uIGIodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fWZ1bmN0aW9uIHgodCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fWZ1bmN0aW9uIF8odCl7cmV0dXJuIHZvaWQgMD09PXR9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gTSh0KSYmIltvYmplY3QgUmVnRXhwXSI9PT1TKHQpfWZ1bmN0aW9uIE0odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBrKHQpe3JldHVybiBNKHQpJiYiW29iamVjdCBEYXRlXSI9PT1TKHQpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIE0odCkmJigiW29iamVjdCBFcnJvcl0iPT09Uyh0KXx8dCBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBUKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIEUodCl7cmV0dXJuIG51bGw9PT10fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdHx8InN5bWJvbCI9PXR5cGVvZiB0fHwidW5kZWZpbmVkIj09dHlwZW9mIHR9ZnVuY3Rpb24gUyh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIEwodCl7cmV0dXJuIDEwPnQ/IjAiK3QudG9TdHJpbmcoMTApOnQudG9TdHJpbmcoMTApfWZ1bmN0aW9uIHooKXt2YXIgdD1uZXcgRGF0ZSxlPVtMKHQuZ2V0SG91cnMoKSksTCh0LmdldE1pbnV0ZXMoKSksTCh0LmdldFNlY29uZHMoKSldLmpvaW4oIjoiKTtyZXR1cm5bdC5nZXREYXRlKCksalt0LmdldE1vbnRoKCldLGVdLmpvaW4oIiAiKX1mdW5jdGlvbiBJKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfXZhciBQPS8lW3NkaiVdL2c7ci5mb3JtYXQ9ZnVuY3Rpb24odCl7aWYoIWIodCkpe2Zvcih2YXIgZT1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllLnB1c2goaShhcmd1bWVudHNbcl0pKTtyZXR1cm4gZS5qb2luKCIgIil9Zm9yKHZhciByPTEsbj1hcmd1bWVudHMsbz1uLmxlbmd0aCxhPVN0cmluZyh0KS5yZXBsYWNlKFAsZnVuY3Rpb24odCl7aWYoIiUlIj09PXQpcmV0dXJuIiUiO2lmKHI+PW8pcmV0dXJuIHQ7c3dpdGNoKHQpe2Nhc2UiJXMiOnJldHVybiBTdHJpbmcobltyKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKG5bcisrXSk7Y2FzZSIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShuW3IrK10pfWNhdGNoKGUpe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiB0fX0pLHM9bltyXTtvPnI7cz1uWysrcl0pYSs9ZyhzKXx8IU0ocyk/IiAiK3M6IiAiK2kocyk7cmV0dXJuIGF9LHIuZGVwcmVjYXRlPWZ1bmN0aW9uKHQsaSl7ZnVuY3Rpb24gbygpe2lmKCFhKXtpZihlLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKGkpO2UudHJhY2VEZXByZWNhdGlvbj9jb25zb2xlLnRyYWNlKGkpOmNvbnNvbGUuZXJyb3IoaSksYT0hMH1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoXyhuLnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiByLmRlcHJlY2F0ZSh0LGkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYoZS5ub0RlcHJlY2F0aW9uPT09ITApcmV0dXJuIHQ7dmFyIGE9ITE7cmV0dXJuIG99O3ZhciBDLFI9e307ci5kZWJ1Z2xvZz1mdW5jdGlvbih0KXtpZihfKEMpJiYoQz1lLmVudi5OT0RFX0RFQlVHfHwiIiksdD10LnRvVXBwZXJDYXNlKCksIVJbdF0paWYobmV3IFJlZ0V4cCgiXFxiIit0KyJcXGIiLCJpIikudGVzdChDKSl7dmFyIG49ZS5waWQ7Ult0XT1mdW5jdGlvbigpe3ZhciBlPXIuZm9ybWF0LmFwcGx5KHIsYXJndW1lbnRzKTtjb25zb2xlLmVycm9yKCIlcyAlZDogJXMiLHQsbixlKX19ZWxzZSBSW3RdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gUlt0XX0sci5pbnNwZWN0PWksaS5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LGkuc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsImJvb2xlYW4iOiJ5ZWxsb3ciLHVuZGVmaW5lZDoiZ3JleSIsIm51bGwiOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LHIuaXNBcnJheT1kLHIuaXNCb29sZWFuPW0sci5pc051bGw9ZyxyLmlzTnVsbE9yVW5kZWZpbmVkPXYsci5pc051bWJlcj15LHIuaXNTdHJpbmc9YixyLmlzU3ltYm9sPXgsci5pc1VuZGVmaW5lZD1fLHIuaXNSZWdFeHA9dyxyLmlzT2JqZWN0PU0sci5pc0RhdGU9ayxyLmlzRXJyb3I9QSxyLmlzRnVuY3Rpb249VCxyLmlzUHJpbWl0aXZlPUUsci5pc0J1ZmZlcj10KCIuL3N1cHBvcnQvaXNCdWZmZXIiKTt2YXIgaj1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO3IubG9nPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coIiVzIC0gJXMiLHooKSxyLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cykpfSxyLmluaGVyaXRzPXQoImluaGVyaXRzIiksci5fZXh0ZW5kPWZ1bmN0aW9uKHQsZSl7aWYoIWV8fCFNKGUpKXJldHVybiB0O2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPXIubGVuZ3RoO24tLTspdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vc3VwcG9ydC9pc0J1ZmZlciI6NjYsX3Byb2Nlc3M6NTksaW5oZXJpdHM6NTd9XSw2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybltNYXRoLm1pbih0WzBdLHRbMV0pLE1hdGgubWF4KHRbMF0sdFsxXSldfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdC5tYXAobikuc29ydChpKX1mdW5jdGlvbiBhKHQsZSxyKXtyZXR1cm4gZSBpbiB0P3RbZV06cn1mdW5jdGlvbiBzKHQsZSxyKXtBcnJheS5pc0FycmF5KGUpPyhyPXJ8fHt9LGU9ZXx8W10pOihyPWV8fHt9LGU9W10pO3ZhciBuPSEhYShyLCJkZWxhdW5heSIsITApLGk9ISFhKHIsImludGVyaW9yIiwhMCkscz0hIWEociwiZXh0ZXJpb3IiLCEwKSxmPSEhYShyLCJpbmZpbml0eSIsITEpO2lmKCFpJiYhc3x8MD09PXQubGVuZ3RoKXJldHVybltdO3ZhciBwPWwodCxlKTtpZihufHxpIT09c3x8Zil7Zm9yKHZhciBkPXUodC5sZW5ndGgsbyhlKSksbT0wO208cC5sZW5ndGg7KyttKXt2YXIgZz1wW21dO2QuYWRkVHJpYW5nbGUoZ1swXSxnWzFdLGdbMl0pfXJldHVybiBuJiZjKHQsZCkscz9pP2Y/aChkLDAsZik6ZC5jZWxscygpOmgoZCwxLGYpOmgoZCwtMSl9cmV0dXJuIHB9dmFyIGw9dCgiLi9saWIvbW9ub3RvbmUiKSx1PXQoIi4vbGliL3RyaWFuZ3VsYXRpb24iKSxjPXQoIi4vbGliL2RlbGF1bmF5IiksaD10KCIuL2xpYi9maWx0ZXIiKTtlLmV4cG9ydHM9c30seyIuL2xpYi9kZWxhdW5heSI6NjksIi4vbGliL2ZpbHRlciI6NzAsIi4vbGliL21vbm90b25lIjo3MSwiLi9saWIvdHJpYW5ndWxhdGlvbiI6NzJ9XSw2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhKXt2YXIgcz1lLm9wcG9zaXRlKG4saSk7aWYoISgwPnMpKXtpZihuPmkpe3ZhciBsPW47bj1pLGk9bCxsPWEsYT1zLHM9bH1lLmlzQ29uc3RyYWludChuLGkpfHxvKHRbbl0sdFtpXSx0W2FdLHRbc10pPDAmJnIucHVzaChuLGkpfX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPVtdLGk9dC5sZW5ndGgsYT1lLnN0YXJzLHM9MDtpPnM7KytzKWZvcih2YXIgbD1hW3NdLHU9MTt1PGwubGVuZ3RoO3UrPTIpe3ZhciBjPWxbdV07aWYoIShzPmN8fGUuaXNDb25zdHJhaW50KHMsYykpKXtmb3IodmFyIGg9bFt1LTFdLGY9LTEscD0xO3A8bC5sZW5ndGg7cCs9MilpZihsW3AtMV09PT1jKXtmPWxbcF07YnJlYWt9MD5mfHxvKHRbc10sdFtjXSx0W2hdLHRbZl0pPDAmJnIucHVzaChzLGMpfX1mb3IoO3IubGVuZ3RoPjA7KXtmb3IodmFyIGM9ci5wb3AoKSxzPXIucG9wKCksaD0tMSxmPS0xLGw9YVtzXSxkPTE7ZDxsLmxlbmd0aDtkKz0yKXt2YXIgbT1sW2QtMV0sZz1sW2RdO209PT1jP2Y9ZzpnPT09YyYmKGg9bSl9MD5ofHwwPmZ8fG8odFtzXSx0W2NdLHRbaF0sdFtmXSk+PTB8fChlLmZsaXAocyxjKSxuKHQsZSxyLGgscyxmKSxuKHQsZSxyLHMsZixoKSxuKHQsZSxyLGYsYyxoKSxuKHQsZSxyLGMsaCxmKSl9fXZhciBvPXQoInJvYnVzdC1pbi1zcGhlcmUiKVs0XTt0KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2UuZXhwb3J0cz1pfSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo3Mywicm9idXN0LWluLXNwaGVyZSI6NzR9XSw3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxvLGEpe3RoaXMuY2VsbHM9dCx0aGlzLm5laWdoYm9yPWUsdGhpcy5mbGFncz1uLHRoaXMuY29uc3RyYWludD1yLHRoaXMuYWN0aXZlPWksdGhpcy5uZXh0PW8sdGhpcy5ib3VuZGFyeT1hfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV18fHRbMl0tZVsyXX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPXQuY2VsbHMoKSxvPXIubGVuZ3RoLGE9MDtvPmE7KythKXt2YXIgcz1yW2FdLGw9c1swXSx1PXNbMV0sYz1zWzJdO2M+dT9sPnUmJihzWzBdPXUsc1sxXT1jLHNbMl09bCk6bD5jJiYoc1swXT1jLHNbMV09bCxzWzJdPXUpfXIuc29ydChpKTtmb3IodmFyIGg9bmV3IEFycmF5KG8pLGE9MDthPGgubGVuZ3RoOysrYSloW2FdPTA7dmFyIGY9W10scD1bXSxkPW5ldyBBcnJheSgzKm8pLG09bmV3IEFycmF5KDMqbyksZz1udWxsO2UmJihnPVtdKTtmb3IodmFyIHY9bmV3IG4ocixkLG0saCxmLHAsZyksYT0wO28+YTsrK2EpZm9yKHZhciBzPXJbYV0seT0wOzM+eTsrK3kpe3ZhciBsPXNbeV0sdT1zWyh5KzEpJTNdLGI9ZFszKmEreV09di5sb2NhdGUodSxsLHQub3Bwb3NpdGUodSxsKSkseD1tWzMqYSt5XT10LmlzQ29uc3RyYWludChsLHUpOzA+YiYmKHg/cC5wdXNoKGEpOihmLnB1c2goYSksaFthXT0xKSxlJiZnLnB1c2goW3UsbCwtMV0pKX1yZXR1cm4gdn1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49MCxpPTA7aTx0Lmxlbmd0aDsrK2kpZVtpXT09PXImJih0W24rK109dFtpXSk7cmV0dXJuIHQubGVuZ3RoPW4sdH1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1vKHQscik7aWYoMD09PWUpcmV0dXJuIHI/bi5jZWxscy5jb25jYXQobi5ib3VuZGFyeSk6bi5jZWxscztmb3IodmFyIGk9MSxzPW4uYWN0aXZlLGw9bi5uZXh0LHU9bi5mbGFncyxjPW4uY2VsbHMsaD1uLmNvbnN0cmFpbnQsZj1uLm5laWdoYm9yO3MubGVuZ3RoPjB8fGwubGVuZ3RoPjA7KXtmb3IoO3MubGVuZ3RoPjA7KXt2YXIgcD1zLnBvcCgpO2lmKHVbcF0hPT0taSl7dVtwXT1pO2Zvcih2YXIgZD0oY1twXSwwKTszPmQ7KytkKXt2YXIgbT1mWzMqcCtkXTttPj0wJiYwPT09dVttXSYmKGhbMypwK2RdP2wucHVzaChtKToocy5wdXNoKG0pLHVbbV09aSkpfX19dmFyIGc9bDtsPXMscz1nLGwubGVuZ3RoPTAsaT0taX12YXIgdj1hKGMsdSxlKTtyZXR1cm4gcj92LmNvbmNhdChuLmJvdW5kYXJ5KTp2fXZhciBsPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZS5leHBvcnRzPXM7dmFyIHU9bi5wcm90b3R5cGU7dS5sb2NhdGU9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwLDBdO3JldHVybiBmdW5jdGlvbihlLHIsbil7dmFyIG89ZSxhPXIscz1uO3JldHVybiBuPnI/ZT5yJiYobz1yLGE9bixzPWUpOmU+biYmKG89bixhPWUscz1yKSwwPm8/LTE6KHRbMF09byx0WzFdPWEsdFsyXT1zLGwuZXEodGhpcy5jZWxscyx0LGkpKX19KCl9LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjczfV0sNzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7CmZ1bmN0aW9uIG4odCxlLHIsbixpKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmlkeD1yLHRoaXMubG93ZXJJZHM9bix0aGlzLnVwcGVySWRzPWl9ZnVuY3Rpb24gaSh0LGUscixuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLnR5cGU9cix0aGlzLmlkeD1ufWZ1bmN0aW9uIG8odCxlKXt2YXIgcj10LmFbMF0tZS5hWzBdfHx0LmFbMV0tZS5hWzFdfHx0LnR5cGUtZS50eXBlO3JldHVybiByP3I6dC50eXBlIT09ZCYmKHI9cCh0LmEsdC5iLGUuYikpP3I6dC5pZHgtZS5pZHh9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBwKHQuYSx0LmIsZSl9ZnVuY3Rpb24gcyh0LGUscixuLGkpe2Zvcih2YXIgbz1mLmx0KGUsbixhKSxzPWYuZ3QoZSxuLGEpLGw9bztzPmw7KytsKXtmb3IodmFyIHU9ZVtsXSxjPXUubG93ZXJJZHMsaD1jLmxlbmd0aDtoPjEmJnAocltjW2gtMl1dLHJbY1toLTFdXSxuKT4wOyl0LnB1c2goW2NbaC0xXSxjW2gtMl0saV0pLGgtPTE7Yy5sZW5ndGg9aCxjLnB1c2goaSk7Zm9yKHZhciBkPXUudXBwZXJJZHMsaD1kLmxlbmd0aDtoPjEmJnAocltkW2gtMl1dLHJbZFtoLTFdXSxuKTwwOyl0LnB1c2goW2RbaC0yXSxkW2gtMV0saV0pLGgtPTE7ZC5sZW5ndGg9aCxkLnB1c2goaSl9fWZ1bmN0aW9uIGwodCxlKXt2YXIgcjtyZXR1cm4ocj10LmFbMF08ZS5hWzBdP3AodC5hLHQuYixlLmEpOnAoZS5iLGUuYSx0LmEpKT9yOihyPWUuYlswXTx0LmJbMF0/cCh0LmEsdC5iLGUuYik6cChlLmIsZS5hLHQuYikscnx8dC5pZHgtZS5pZHgpfWZ1bmN0aW9uIHUodCxlLHIpe3ZhciBpPWYubGUodCxyLGwpLG89dFtpXSxhPW8udXBwZXJJZHMscz1hW2EubGVuZ3RoLTFdO28udXBwZXJJZHM9W3NdLHQuc3BsaWNlKGkrMSwwLG5ldyBuKHIuYSxyLmIsci5pZHgsW3NdLGEpKX1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj1yLmE7ci5hPXIuYixyLmI9bjt2YXIgaT1mLmVxKHQscixsKSxvPXRbaV0sYT10W2ktMV07YS51cHBlcklkcz1vLnVwcGVySWRzLHQuc3BsaWNlKGksMSl9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxhPWUubGVuZ3RoLGw9W10saD0wO3I+aDsrK2gpbC5wdXNoKG5ldyBpKHRbaF0sbnVsbCxkLGgpKTtmb3IodmFyIGg9MDthPmg7KytoKXt2YXIgZj1lW2hdLHA9dFtmWzBdXSx2PXRbZlsxXV07cFswXTx2WzBdP2wucHVzaChuZXcgaShwLHYsZyxoKSxuZXcgaSh2LHAsbSxoKSk6cFswXT52WzBdJiZsLnB1c2gobmV3IGkodixwLGcsaCksbmV3IGkocCx2LG0saCkpfWwuc29ydChvKTtmb3IodmFyIHk9bFswXS5hWzBdLSgxK01hdGguYWJzKGxbMF0uYVswXSkpKk1hdGgucG93KDIsLTUyKSxiPVtuZXcgbihbeSwxXSxbeSwwXSwtMSxbXSxbXSxbXSxbXSldLHg9W10saD0wLF89bC5sZW5ndGg7Xz5oOysraCl7dmFyIHc9bFtoXSxNPXcudHlwZTtNPT09ZD9zKHgsYix0LHcuYSx3LmlkeCk6TT09PWc/dShiLHQsdyk6YyhiLHQsdyl9cmV0dXJuIHh9dmFyIGY9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxwPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdLGQ9MCxtPTEsZz0yO2UuZXhwb3J0cz1ofSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo3Mywicm9idXN0LW9yaWVudGF0aW9uIjo0NjJ9XSw3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5zdGFycz10LHRoaXMuZWRnZXM9ZX1mdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49MSxpPXQubGVuZ3RoO2k+bjtuKz0yKWlmKHRbbi0xXT09PWUmJnRbbl09PT1yKXJldHVybiB0W24tMV09dFtpLTJdLHRbbl09dFtpLTFdLHZvaWQodC5sZW5ndGg9aS0yKX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxpPTA7dD5pOysraSlyW2ldPVtdO3JldHVybiBuZXcgbihyLGUpfXZhciBhPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZS5leHBvcnRzPW87dmFyIHM9bi5wcm90b3R5cGU7cy5pc0NvbnN0cmFpbnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfXZhciBlPVswLDBdO3JldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBlWzBdPU1hdGgubWluKHIsbiksZVsxXT1NYXRoLm1heChyLG4pLGEuZXEodGhpcy5lZGdlcyxlLHQpPj0wfX0oKSxzLnJlbW92ZVRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO2koblt0XSxlLHIpLGkobltlXSxyLHQpLGkobltyXSx0LGUpfSxzLmFkZFRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO25bdF0ucHVzaChlLHIpLG5bZV0ucHVzaChyLHQpLG5bcl0ucHVzaCh0LGUpfSxzLm9wcG9zaXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuc3RhcnNbZV0sbj0xLGk9ci5sZW5ndGg7aT5uO24rPTIpaWYocltuXT09PXQpcmV0dXJuIHJbbi0xXTtyZXR1cm4tMX0scy5mbGlwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHBvc2l0ZSh0LGUpLG49dGhpcy5vcHBvc2l0ZShlLHQpO3RoaXMucmVtb3ZlVHJpYW5nbGUodCxlLHIpLHRoaXMucmVtb3ZlVHJpYW5nbGUoZSx0LG4pLHRoaXMuYWRkVHJpYW5nbGUodCxuLHIpLHRoaXMuYWRkVHJpYW5nbGUoZSxyLG4pfSxzLmVkZ2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3RhcnMsZT1bXSxyPTAsbj10Lmxlbmd0aDtuPnI7KytyKWZvcih2YXIgaT10W3JdLG89MCxhPWkubGVuZ3RoO2E+bztvKz0yKWUucHVzaChbaVtvXSxpW28rMV1dKTtyZXR1cm4gZX0scy5jZWxscz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7bj5yOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aDthPm87bys9Mil7dmFyIHM9aVtvXSxsPWlbbysxXTtyPE1hdGgubWluKHMsbCkmJmUucHVzaChbcixzLGxdKX1yZXR1cm4gZX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjczfV0sNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBvPVsiZnVuY3Rpb24gIix0LCIoYSxsLGgsIixuLmpvaW4oIiwiKSwiKXsiLGk/IiI6InZhciBpPSIscj8ibC0xIjoiaCsxIiwiO3doaWxlKGw8PWgpe3ZhciBtPShsK2gpPj4+MSx4PWFbbV0iXTtyZXR1cm4gaT9lLmluZGV4T2YoImMiKTwwP28ucHVzaCgiO2lmKHg9PT15KXtyZXR1cm4gbX1lbHNlIGlmKHg8PXkpeyIpOm8ucHVzaCgiO3ZhciBwPWMoeCx5KTtpZihwPT09MCl7cmV0dXJuIG19ZWxzZSBpZihwPD0wKXsiKTpvLnB1c2goIjtpZigiLGUsIil7aT1tOyIpLHI/by5wdXNoKCJsPW0rMX1lbHNle2g9bS0xfSIpOm8ucHVzaCgiaD1tLTF9ZWxzZXtsPW0rMX0iKSxvLnB1c2goIn0iKSxpP28ucHVzaCgicmV0dXJuIC0xfTsiKTpvLnB1c2goInJldHVybiBpfTsiKSxvLmpvaW4oIiIpfWZ1bmN0aW9uIGkodCxlLHIsaSl7dmFyIG89bmV3IEZ1bmN0aW9uKFtuKCJBIiwieCIrdCsieSIsZSxbInkiXSxpKSxuKCJQIiwiYyh4LHkpIit0KyIwIixlLFsieSIsImMiXSxpKSwiZnVuY3Rpb24gZGlzcGF0Y2hCc2VhcmNoIixyLCIoYSx5LGMsbCxoKXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUChhLChsPT09dm9pZCAwKT8wOmx8MCwoaD09PXZvaWQgMCk/YS5sZW5ndGgtMTpofDAseSxjKX1lbHNle3JldHVybiBBKGEsKGM9PT12b2lkIDApPzA6Y3wwLChsPT09dm9pZCAwKT9hLmxlbmd0aC0xOmx8MCx5KX19cmV0dXJuIGRpc3BhdGNoQnNlYXJjaCIscl0uam9pbigiIikpO3JldHVybiBvKCl9ZS5leHBvcnRzPXtnZTppKCI+PSIsITEsIkdFIiksZ3Q6aSgiPiIsITEsIkdUIiksbHQ6aSgiPCIsITAsIkxUIiksbGU6aSgiPD0iLCEwLCJMRSIpLGVxOmkoIi0iLCEwLCJFUSIsITApfX0se31dLDc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxvPTAsYT0wO288dC5sZW5ndGg7KytvKW8hPT1lJiYoaVthKytdPXRbbl1bb10pO3JldHVybiByfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7dD5yOysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7dD5uOysrbillW3JdW25dPVsibSIsbiwiWyIsdC1yLTIsIl0iXS5qb2luKCIiKX1yZXR1cm4gZX1mdW5jdGlvbiBvKHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gdFswXTtpZigyPT09dC5sZW5ndGgpcmV0dXJuWyJzdW0oIix0WzBdLCIsIix0WzFdLCIpIl0uam9pbigiIik7dmFyIGU9dC5sZW5ndGg+PjE7cmV0dXJuWyJzdW0oIixvKHQuc2xpY2UoMCxlKSksIiwiLG8odC5zbGljZShlKSksIikiXS5qb2luKCIiKX1mdW5jdGlvbiBhKHQsZSl7aWYoIm0iPT09dC5jaGFyQXQoMCkpe2lmKCJ3Ij09PWUuY2hhckF0KDApKXt2YXIgcj10LnNwbGl0KCJbIik7cmV0dXJuWyJ3IixlLnN1YnN0cigxKSwibSIsclswXS5zdWJzdHIoMSldLmpvaW4oIiIpfXJldHVyblsicHJvZCgiLHQsIiwiLGUsIikiXS5qb2luKCIiKX1yZXR1cm4gYShlLHQpfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQmITA/Ii0iOiIifWZ1bmN0aW9uIGwodCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltbImRpZmYoIixhKHRbMF1bMF0sdFsxXVsxXSksIiwiLGEodFsxXVswXSx0WzBdWzFdKSwiKSJdLmpvaW4oIiIpXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbInNjYWxlKCIsbyhsKG4odCxyKSkpLCIsIixzKHIpLHRbMF1bcl0sIikiXS5qb2luKCIiKSk7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7ZS0yPm47KytuKXIucHVzaChbInByb2QobSIsdCwiWyIsbiwiXSxtIix0LCJbIixuLCJdKSJdLmpvaW4oIiIpKTtyZXR1cm4gbyhyKX1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT1bXSxyPVtdLGE9aSh0KSxzPTA7dD5zOysrcylhWzBdW3NdPSIxIixhW3QtMV1bc109InciK3M7Zm9yKHZhciBzPTA7dD5zOysrcykwPT09KDEmcyk/ZS5wdXNoLmFwcGx5KGUsbChuKGEscykpKTpyLnB1c2guYXBwbHkocixsKG4oYSxzKSkpO2Zvcih2YXIgYz1vKGUpLGg9byhyKSxmPSJleGFjdEluU3BoZXJlIit0LHA9W10scz0wO3Q+czsrK3MpcC5wdXNoKCJtIitzKTtmb3IodmFyIGQ9WyJmdW5jdGlvbiAiLGYsIigiLHAuam9pbigpLCIpeyJdLHM9MDt0PnM7KytzKXtkLnB1c2goInZhciB3IixzLCI9Iix1KHMsdCksIjsiKTtmb3IodmFyIG09MDt0Pm07KyttKW0hPT1zJiZkLnB1c2goInZhciB3IixzLCJtIixtLCI9c2NhbGUodyIscywiLG0iLG0sIlswXSk7Iil9ZC5wdXNoKCJ2YXIgcD0iLGMsIixuPSIsaCwiLGQ9ZGlmZihwLG4pO3JldHVybiBkW2QubGVuZ3RoLTFdO31yZXR1cm4gIixmKTt2YXIgeD1uZXcgRnVuY3Rpb24oInN1bSIsImRpZmYiLCJwcm9kIiwic2NhbGUiLGQuam9pbigiIikpO3JldHVybiB4KHYseSxnLGIpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gMH1mdW5jdGlvbiBmKCl7cmV0dXJuIDB9ZnVuY3Rpb24gcCgpe3JldHVybiAwfWZ1bmN0aW9uIGQodCl7dmFyIGU9X1t0Lmxlbmd0aF07cmV0dXJuIGV8fChlPV9bdC5sZW5ndGhdPWModC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX1mdW5jdGlvbiBtKCl7Zm9yKDtfLmxlbmd0aDw9eDspXy5wdXNoKGMoXy5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bInNsb3ciXSxuPTA7eD49bjsrK24pdC5wdXNoKCJhIituKSxyLnB1c2goIm8iK24pO2Zvcih2YXIgaT1bImZ1bmN0aW9uIHRlc3RJblNwaGVyZSgiLHQuam9pbigpLCIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwOyJdLG49Mjt4Pj1uOysrbilpLnB1c2goImNhc2UgIixuLCI6cmV0dXJuIG8iLG4sIigiLHQuc2xpY2UoMCxuKS5qb2luKCksIik7Iik7aS5wdXNoKCJ9dmFyIHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDsrK2kpe3NbaV09YXJndW1lbnRzW2ldfTtyZXR1cm4gc2xvdyhzKTt9cmV0dXJuIHRlc3RJblNwaGVyZSIpLHIucHVzaChpLmpvaW4oIiIpKTt2YXIgbz1GdW5jdGlvbi5hcHBseSh2b2lkIDAscik7ZS5leHBvcnRzPW8uYXBwbHkodm9pZCAwLFtkXS5jb25jYXQoXykpO2Zvcih2YXIgbj0wO3g+PW47KytuKWUuZXhwb3J0c1tuXT1fW25dfXZhciBnPXQoInR3by1wcm9kdWN0Iiksdj10KCJyb2J1c3Qtc3VtIikseT10KCJyb2J1c3Qtc3VidHJhY3QiKSxiPXQoInJvYnVzdC1zY2FsZSIpLHg9NixfPVtoLGYscF07bSgpfSx7InJvYnVzdC1zY2FsZSI6NDYzLCJyb2J1c3Qtc3VidHJhY3QiOjQ2NCwicm9idXN0LXN1bSI6NDY1LCJ0d28tcHJvZHVjdCI6NDc5fV0sNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT14KHQpLHI9Yih5KGUpLHQpO3JldHVybiAwPnI/W2UsdyhlLDEvMCldOnI+MD9bdyhlLC0oMS8wKSksZV06W2UsZV19ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZS5sZW5ndGgpLG49MDtuPGUubGVuZ3RoOysrbil7dmFyIGk9ZVtuXSxvPXRbaVswXV0sYT10W2lbMV1dO3Jbbl09W01hdGgubWluKG9bMF0sYVswXSksTWF0aC5taW4ob1sxXSxhWzFdKSxNYXRoLm1heChvWzBdLGFbMF0pLE1hdGgubWF4KG9bMV0sYVsxXSldfXJldHVybiByfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdO2Vbcl09W25bMF0sblsxXSxuWzBdLG5bMV1dfXJldHVybiBlfWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPVtdO3JldHVybiBnKHIsZnVuY3Rpb24ocixpKXt2YXIgbz1lW3JdLGE9ZVtpXTtpZihvWzBdIT09YVswXSYmb1swXSE9PWFbMV0mJm9bMV0hPT1hWzBdJiZvWzFdIT09YVsxXSl7dmFyIHM9dFtvWzBdXSxsPXRbb1sxXV0sdT10W2FbMF1dLGM9dFthWzFdXTt2KHMsbCx1LGMpJiZuLnB1c2goW3IsaV0pfX0pLG59ZnVuY3Rpb24gcyh0LGUscixuKXt2YXIgaT1bXTtyZXR1cm4gZyhyLG4sZnVuY3Rpb24ocixuKXt2YXIgbz1lW3JdO2lmKG9bMF0hPT1uJiZvWzFdIT09bil7dmFyIGE9dFtuXSxzPXRbb1swXV0sbD10W29bMV1dO3YocyxsLGEsYSkmJmkucHVzaChbcixuXSl9fSksaX1mdW5jdGlvbiBsKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyhlKXtpZihlPj10Lmxlbmd0aClyZXR1cm4gYVtlLXQubGVuZ3RoXTt2YXIgcj10W2VdO3JldHVyblt5KHJbMF0pLHkoclsxXSldfWZvcih2YXIgYT1bXSxzPTA7czxyLmxlbmd0aDsrK3Mpe3ZhciBsPXJbc10sdT1sWzBdLGM9bFsxXSxoPWVbdV0sZj1lW2NdLHA9TShfKHRbaFswXV0pLF8odFtoWzFdXSksXyh0W2ZbMF1dKSxfKHRbZlsxXV0pKTtpZihwKXt2YXIgZD1hLmxlbmd0aCt0Lmxlbmd0aDthLnB1c2gocCksbi5wdXNoKFt1LGRdLFtjLGRdKX19bi5zb3J0KGZ1bmN0aW9uKHQsZSl7aWYodFswXSE9PWVbMF0pcmV0dXJuIHRbMF0tZVswXTt2YXIgcj1vKHRbMV0pLG49byhlWzFdKTtyZXR1cm4gYihyWzBdLG5bMF0pfHxiKHJbMV0sblsxXSl9KTtmb3IodmFyIHM9bi5sZW5ndGgtMTtzPj0wOy0tcyl7dmFyIG09bltzXSx1PW1bMF0sZz1lW3VdLHY9Z1swXSx4PWdbMV0sdz10W3ZdLGs9dFt4XTtpZigod1swXS1rWzBdfHx3WzFdLWtbMV0pPDApe3ZhciBBPXY7dj14LHg9QX1nWzBdPXY7dmFyIFQsRT1nWzFdPW1bMV07Zm9yKGkmJihUPWdbMl0pO3M+MCYmbltzLTFdWzBdPT09dTspe3ZhciBtPW5bLS1zXSxTPW1bMV07aT9lLnB1c2goW0UsUyxUXSk6ZS5wdXNoKFtFLFNdKSxFPVN9aT9lLnB1c2goW0UseCxUXSk6ZS5wdXNoKFtFLHhdKX1yZXR1cm4gYX1mdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIGk9dC5sZW5ndGgrZS5sZW5ndGgsbz1uZXcgbShpKSxhPXIscz0wO3M8ZS5sZW5ndGg7KytzKXt2YXIgbD1lW3NdLHU9bihsWzBdKSxjPW4obFsxXSk7YS5wdXNoKFt1WzBdLGNbMF0sdVsxXSxjWzFdXSksdC5wdXNoKFt4KGxbMF0pLHgobFsxXSldKX1nKGEsZnVuY3Rpb24odCxlKXtvLmxpbmsodCxlKX0pO2Zvcih2YXIgaD0wLGY9ITAscD1uZXcgQXJyYXkoaSkscz0wO2k+czsrK3Mpe3ZhciBkPW8uZmluZChzKTtkPT09cz8ocFtzXT1oLHRbaCsrXT10W3NdKTooZj0hMSxwW3NdPS0xKX1pZih0Lmxlbmd0aD1oLGYpcmV0dXJuIG51bGw7Zm9yKHZhciBzPTA7aT5zOysrcylwW3NdPDAmJihwW3NdPXBbby5maW5kKHMpXSk7cmV0dXJuIHB9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9dFswXS1lWzBdfHx0WzFdLWVbMV07cmV0dXJuIHI/cjp0WzJdPGVbMl0/LTE6dFsyXT5lWzJdPzE6MH1mdW5jdGlvbiBmKHQsZSxyKXtpZigwIT09dC5sZW5ndGgpe2lmKGUpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPXRbbl0sbz1lW2lbMF1dLGE9ZVtpWzFdXTtpWzBdPU1hdGgubWluKG8sYSksaVsxXT1NYXRoLm1heChvLGEpfWVsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPXRbbl0sbz1pWzBdLGE9aVsxXTtpWzBdPU1hdGgubWluKG8sYSksaVsxXT1NYXRoLm1heChvLGEpfXI/dC5zb3J0KGgpOnQuc29ydChjKTtmb3IodmFyIHM9MSxuPTE7bjx0Lmxlbmd0aDsrK24pe3ZhciBsPXRbbi0xXSx1PXRbbl07KHVbMF0hPT1sWzBdfHx1WzFdIT09bFsxXXx8ciYmdVsyXSE9PWxbMl0pJiYodFtzKytdPXUpfXQubGVuZ3RoPXN9fWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPWkodCxlKSxjPWEodCxlLG4pLGg9byh0KSxwPXModCxlLG4saCksZD1sKHQsZSxjLHAsciksbT11KHQsZCxoKTtyZXR1cm4gZihlLG0sciksbT8hMDpjLmxlbmd0aD4wfHxwLmxlbmd0aD4wfWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuLGk9ITE7aWYocil7bj1lO2Zvcih2YXIgbz1uZXcgQXJyYXkoZS5sZW5ndGgpLGE9MDthPGUubGVuZ3RoOysrYSl7dmFyIHM9ZVthXTtvW2FdPVtzWzBdLHNbMV0sclthXV19ZT1vfWZvcig7cCh0LGUsISFyKTspaT0hMDtpZihyJiZpKXtuLmxlbmd0aD0wLHIubGVuZ3RoPTA7Zm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2Epe3ZhciBzPWVbYV07bi5wdXNoKFtzWzBdLHNbMV1dKSxyLnB1c2goc1syXSl9fXJldHVybiBpfWUuZXhwb3J0cz1kO3ZhciBtPXQoInVuaW9uLWZpbmQiKSxnPXQoImJveC1pbnRlcnNlY3QiKSx2PSh0KCJjb21wYXJlLWNlbGwiKSx0KCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiKSkseT10KCJiaWctcmF0IiksYj10KCJiaWctcmF0L2NtcCIpLHg9dCgiYmlnLXJhdC90by1mbG9hdCIpLF89dCgicmF0LXZlYyIpLHc9dCgibmV4dGFmdGVyIiksTT10KCIuL2xpYi9yYXQtc2VnLWludGVyc2VjdCIpfSx7Ii4vbGliL3JhdC1zZWctaW50ZXJzZWN0Ijo3NiwiYmlnLXJhdCI6ODAsImJpZy1yYXQvY21wIjo3OCwiYmlnLXJhdC90by1mbG9hdCI6OTMsImJveC1pbnRlcnNlY3QiOjk0LCJjb21wYXJlLWNlbGwiOjExMixuZXh0YWZ0ZXI6MTAyLCJyYXQtdmVjIjoxMDQsInJvYnVzdC1zZWdtZW50LWludGVyc2VjdCI6MTA3LCJ1bmlvbi1maW5kIjoxMDh9XSw3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHMobyh0WzBdLGVbMV0pLG8odFsxXSxlWzBdKSl9ZnVuY3Rpb24gaSh0LGUscixpKXt2YXIgbz11KGUsdCkscz11KGksciksZj1uKG8scyk7aWYoMD09PWwoZikpcmV0dXJuIG51bGw7dmFyIHA9dSh0LHIpLGQ9bihzLHApLG09YShkLGYpO3JldHVybiBjKHQsaChvLG0pKX1lLmV4cG9ydHM9aTt2YXIgbz10KCJiaWctcmF0L211bCIpLGE9dCgiYmlnLXJhdC9kaXYiKSxzPXQoImJpZy1yYXQvc3ViIiksbD10KCJiaWctcmF0L3NpZ24iKSx1PXQoInJhdC12ZWMvc3ViIiksYz10KCJyYXQtdmVjL2FkZCIpLGg9dCgicmF0LXZlYy9tdWxzIik7dCgiYmlnLXJhdC90by1mbG9hdCIpfSx7ImJpZy1yYXQvZGl2Ijo3OSwiYmlnLXJhdC9tdWwiOjg5LCJiaWctcmF0L3NpZ24iOjkxLCJiaWctcmF0L3N1YiI6OTIsImJpZy1yYXQvdG8tZmxvYXQiOjkzLCJyYXQtdmVjL2FkZCI6MTAzLCJyYXQtdmVjL211bHMiOjEwNSwicmF0LXZlYy9zdWIiOjEwNn1dLDc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gaSh0WzBdLm11bChlWzFdKS5hZGQoZVswXS5tdWwodFsxXSkpLHRbMV0ubXVsKGVbMV0pKX12YXIgaT10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1ufSx7Ii4vbGliL3JhdGlvbmFsaXplIjo4N31dLDc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gdFswXS5tdWwoZVsxXSkuY21wKGVbMF0ubXVsKHRbMV0pKX1lLmV4cG9ydHM9bn0se31dLDc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gaSh0WzBdLm11bChlWzFdKSx0WzFdLm11bChlWzBdKSl9dmFyIGk9dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9bn0seyIuL2xpYi9yYXRpb25hbGl6ZSI6ODd9XSw4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoaSh0KSlyZXR1cm4gZT91KHQsbihlKSk6W3RbMF0uY2xvbmUoKSx0WzFdLmNsb25lKCldO3ZhciByLGMsaD0wO2lmKG8odCkpcj10LmNsb25lKCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHQpcj1zKHQpO2Vsc2V7aWYoMD09PXQpcmV0dXJuW2EoMCksYSgxKV07aWYodD09PU1hdGguZmxvb3IodCkpcj1hKHQpO2Vsc2V7Zm9yKDt0IT09TWF0aC5mbG9vcih0KTspdCo9TWF0aC5wb3coMiwyNTYpLGgtPTI1NjtyPWEodCl9fWlmKGkoZSkpci5tdWwoZVsxXSksYz1lWzBdLmNsb25lKCk7ZWxzZSBpZihvKGUpKWM9ZS5jbG9uZSgpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBlKWM9cyhlKTtlbHNlIGlmKGUpaWYoZT09PU1hdGguZmxvb3IoZSkpYz1hKGUpO2Vsc2V7Zm9yKDtlIT09TWF0aC5mbG9vcihlKTspZSo9TWF0aC5wb3coMiwyNTYpLGgrPTI1NjtjPWEoZSl9ZWxzZSBjPWEoMSk7cmV0dXJuIGg+MD9yPXIuc2hsbihoKTowPmgmJihjPWMuc2hsbigtaCkpLGwocixjKX12YXIgaT10KCIuL2lzLXJhdCIpLG89dCgiLi9saWIvaXMtYm4iKSxhPXQoIi4vbGliL251bS10by1ibiIpLHM9dCgiLi9saWIvc3RyLXRvLWJuIiksbD10KCIuL2xpYi9yYXRpb25hbGl6ZSIpLHU9dCgiLi9kaXYiKTtlLmV4cG9ydHM9bn0seyIuL2RpdiI6NzksIi4vaXMtcmF0Ijo4MSwiLi9saWIvaXMtYm4iOjg1LCIuL2xpYi9udW0tdG8tYm4iOjg2LCIuL2xpYi9yYXRpb25hbGl6ZSI6ODcsIi4vbGliL3N0ci10by1ibiI6ODh9XSw4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYyPT09dC5sZW5ndGgmJmkodFswXSkmJmkodFsxXSl9dmFyIGk9dCgiLi9saWIvaXMtYm4iKTtlLmV4cG9ydHM9bn0seyIuL2xpYi9pcy1ibiI6ODV9XSw4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiB0LmNtcChuZXcgaSgwKSl9dmFyIGk9dCgiYm4uanMiKTtlLmV4cG9ydHM9bn0seyJibi5qcyI6OTB9XSw4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXQubGVuZ3RoLHI9dC53b3JkcyxuPTA7aWYoMT09PWUpbj1yWzBdO2Vsc2UgaWYoMj09PWUpbj1yWzBdKzY3MTA4ODY0KnJbMV07ZWxzZSBmb3IodmFyIG49MCxpPTA7ZT5pO2krKyl7dmFyIG89cltpXTtuKz1vKk1hdGgucG93KDY3MTA4ODY0LGkpfXJldHVybiB0LnNpZ24/LW46bn1lLmV4cG9ydHM9bn0se31dLDg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9byhpLmxvKHQpKTtpZigzMj5lKXJldHVybiBlO3ZhciByPW8oaS5oaSh0KSk7cmV0dXJuIHI+MjA/NTI6ciszMn12YXIgaT10KCJkb3VibGUtYml0cyIpLG89dCgiYml0LXR3aWRkbGUiKS5jb3VudFRyYWlsaW5nWmVyb3M7ZS5leHBvcnRzPW59LHsiYml0LXR3aWRkbGUiOjUxLCJkb3VibGUtYml0cyI6MTAxfV0sODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZCb29sZWFuKHQud29yZHMpfXQoImJuLmpzIik7ZS5leHBvcnRzPW59LHsiYm4uanMiOjkwfV0sODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT1vLmV4cG9uZW50KHQpO3JldHVybiA1Mj5lP25ldyBpKHQpOm5ldyBpKHQqTWF0aC5wb3coMiw1Mi1lKSkuc2hsbihlLTUyKX12YXIgaT10KCJibi5qcyIpLG89dCgiZG91YmxlLWJpdHMiKTtlLmV4cG9ydHM9bn0seyJibi5qcyI6OTAsImRvdWJsZS1iaXRzIjoxMDF9XSw4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9byh0KSxuPW8oZSk7aWYoMD09PXIpcmV0dXJuW2koMCksaSgxKV07aWYoMD09PW4pcmV0dXJuW2koMCksaSgwKV07MD5uJiYodD10Lm5lZygpLGU9ZS5uZWcoKSk7dmFyIGE9dC5nY2QoZSk7cmV0dXJuIGEuY21wbigxKT9bdC5kaXYoYSksZS5kaXYoYSldOlt0LGVdfXZhciBpPXQoIi4vbnVtLXRvLWJuIiksbz10KCIuL2JuLXNpZ24iKTtlLmV4cG9ydHM9bn0seyIuL2JuLXNpZ24iOjgyLCIuL251bS10by1ibiI6ODZ9XSw4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgaSh0KX12YXIgaT10KCJibi5qcyIpO2UuZXhwb3J0cz1ufSx7ImJuLmpzIjo5MH1dLDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gaSh0WzBdLm11bChlWzBdKSx0WzFdLm11bChlWzFdKSl9dmFyIGk9dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9bn0seyIuL2xpYi9yYXRpb25hbGl6ZSI6ODd9XSw5MDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gbih0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHQmJkFycmF5LmlzQXJyYXkodC53b3Jkcyk/dDoodGhpcy5zaWduPSExLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsImxlIiE9PWUmJiJiZSIhPT1lfHwocj1lLGU9MTApLHZvaWQobnVsbCE9PXQmJnRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHwiYmUiKSkpfWZ1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj0wLGk9TWF0aC5taW4odC5sZW5ndGgsciksbz1lO2k+bztvKyspe3ZhciBhPXQuY2hhckNvZGVBdChvKS00ODtuPDw9NCxufD1hPj00OSYmNTQ+PWE/YS00OSsxMDphPj0xNyYmMjI+PWE/YS0xNysxMDoxNSZhfXJldHVybiBufWZ1bmN0aW9uIGEodCxlLHIsbil7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbih0Lmxlbmd0aCxyKSxhPWU7bz5hO2ErKyl7dmFyIHM9dC5jaGFyQ29kZUF0KGEpLTQ4O2kqPW4saSs9cz49NDk/cy00OSsxMDpzPj0xNz9zLTE3KzEwOnN9cmV0dXJuIGl9ZnVuY3Rpb24gcyh0LGUpe3RoaXMubmFtZT10LHRoaXMucD1uZXcgaShlLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgaSgxKS5pc2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBsKCl7cy5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIHUoKXtzLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gYygpe3MuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBoKCl7cy5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIGYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT1pLl9wcmltZSh0KTt0aGlzLm09ZS5wLHRoaXMucHJpbWU9ZX1lbHNlIHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBwKHQpe2YuY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBpKDEpLmlzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludi5zaWduPSEwLHRoaXMubWludj10aGlzLm1pbnYubW9kKHRoaXMucil9Im9iamVjdCI9PXR5cGVvZiB0P3QuZXhwb3J0cz1pOmUuQk49aSxpLkJOPWksaS53b3JkU2l6ZT0yNixpLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUsbil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxuKTtpZigib2JqZWN0Ij09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXRBcnJheSh0LGUsbik7ImhleCI9PT1lJiYoZT0xNikscihlPT09KDB8ZSkmJmU+PTImJjM2Pj1lKSx0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIik7dmFyIGk9MDsiLSI9PT10WzBdJiZpKyssMTY9PT1lP3RoaXMuX3BhcnNlSGV4KHQsaSk6dGhpcy5fcGFyc2VCYXNlKHQsZSxpKSwiLSI9PT10WzBdJiYodGhpcy5zaWduPSEwKSx0aGlzLnN0cmlwKCksImxlIj09PW4mJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLG4pfSxpLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih0LGUsbil7MD50JiYodGhpcy5zaWduPSEwLHQ9LXQpLDY3MTA4ODY0PnQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnRdLHRoaXMubGVuZ3RoPTEpOjQ1MDM1OTk2MjczNzA0OTY+dD8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocig5MDA3MTk5MjU0NzQwOTkyPnQpLHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09biYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUsbil9LGkucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odCxlLG4pe2lmKHIoIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCksdC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwodC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09MDt2YXIgbz0wO2lmKCJiZSI9PT1uKWZvcih2YXIgaT10Lmxlbmd0aC0xLGE9MDtpPj0wO2ktPTMpe3ZhciBzPXRbaV18dFtpLTFdPDw4fHRbaS0yXTw8MTY7dGhpcy53b3Jkc1thXXw9czw8byY2NzEwODg2Myx0aGlzLndvcmRzW2ErMV09cz4+PjI2LW8mNjcxMDg4NjMsbys9MjQsbz49MjYmJihvLT0yNixhKyspfWVsc2UgaWYoImxlIj09PW4pZm9yKHZhciBpPTAsYT0wO2k8dC5sZW5ndGg7aSs9Myl7dmFyIHM9dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNjt0aGlzLndvcmRzW2FdfD1zPDxvJjY3MTA4ODYzLHRoaXMud29yZHNbYSsxXT1zPj4+MjYtbyY2NzEwODg2MyxvKz0yNCxvPj0yNiYmKG8tPTI2LGErKyl9cmV0dXJuIHRoaXMuc3RyaXAoKX0saS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh0Lmxlbmd0aC1lKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT0wO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGgtNixpPTA7cj49ZTtyLT02KXt2YXIgYT1vKHQscixyKzYpO3RoaXMud29yZHNbaV18PWE8PG4mNjcxMDg4NjMsdGhpcy53b3Jkc1tpKzFdfD1hPj4+MjYtbiY0MTk0MzAzLG4rPTI0LG4+PTI2JiYobi09MjYsaSsrKX1pZihyKzYhPT1lKXt2YXIgYT1vKHQsZSxyKzYpO3RoaXMud29yZHNbaV18PWE8PG4mNjcxMDg4NjMsdGhpcy53b3Jkc1tpKzFdfD1hPj4+MjYtbiY0MTk0MzAzfXRoaXMuc3RyaXAoKX0saS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih0LGUscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7NjcxMDg4NjM+PWk7aSo9ZSluKys7bi0tLGk9aS9lfDA7Zm9yKHZhciBvPXQubGVuZ3RoLXIscz1vJW4sbD1NYXRoLm1pbihvLG8tcykrcix1PTAsYz1yO2w+YztjKz1uKXU9YSh0LGMsYytuLGUpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSk7aWYoMCE9PXMpe2Zvcih2YXIgaD0xLHU9YSh0LGMsdC5sZW5ndGgsZSksYz0wO3M+YztjKyspaCo9ZTt0aGlzLmltdWxuKGgpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpfX0saS5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdC53b3Jkc1tlXT10aGlzLndvcmRzW2VdO3QubGVuZ3RoPXRoaXMubGVuZ3RoLHQuc2lnbj10aGlzLnNpZ24sdC5yZWQ9dGhpcy5yZWR9LGkucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGkobnVsbCk7cmV0dXJuIHRoaXMuY29weSh0KSx0fSxpLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LGkucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5zaWduPSExKSx0aGlzfSxpLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBkPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLG09WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sZz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtpLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih0LGUpe2lmKHQ9dHx8MTAsMTY9PT10fHwiaGV4Ij09PXQpe2Zvcih2YXIgbj0iIixpPTAsZT0wfGV8fDEsbz0wLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIHM9dGhpcy53b3Jkc1thXSxsPSgxNjc3NzIxNSYoczw8aXxvKSkudG9TdHJpbmcoMTYpO289cz4+PjI0LWkmMTY3NzcyMTUsbj0wIT09b3x8YSE9PXRoaXMubGVuZ3RoLTE/ZFs2LWwubGVuZ3RoXStsK246bCtuLGkrPTIsaT49MjYmJihpLT0yNixhLS0pfWZvcigwIT09byYmKG49by50b1N0cmluZygxNikrbik7bi5sZW5ndGglZSE9PTA7KW49IjAiK247cmV0dXJuIHRoaXMuc2lnbiYmKG49Ii0iK24pLG59aWYodD09PSgwfHQpJiZ0Pj0yJiYzNj49dCl7dmFyIHU9bVt0XSxjPWdbdF0sbj0iIixoPXRoaXMuY2xvbmUoKTtmb3IoaC5zaWduPSExOzAhPT1oLmNtcG4oMCk7KXt2YXIgZj1oLm1vZG4oYykudG9TdHJpbmcodCk7aD1oLmlkaXZuKGMpLG49MCE9PWguY21wbigwKT9kW3UtZi5sZW5ndGhdK2YrbjpmK259cmV0dXJuIDA9PT10aGlzLmNtcG4oMCkmJihuPSIwIituKSx0aGlzLnNpZ24mJihuPSItIituKSxufXIoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0saS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxpLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQpe3RoaXMuc3RyaXAoKTt2YXIgZT1uZXcgQXJyYXkodGhpcy5ieXRlTGVuZ3RoKCkpO2VbMF09MDt2YXIgcj10aGlzLmNsb25lKCk7aWYoImxlIiE9PXQpZm9yKHZhciBuPTA7MCE9PXIuY21wbigwKTtuKyspe3ZhciBpPXIuYW5kbG4oMjU1KTtyLmlzaHJuKDgpLGVbZS5sZW5ndGgtbi0xXT1pfWVsc2UgZm9yKHZhciBuPTA7MCE9PXIuY21wbigwKTtuKyspe3ZhciBpPXIuYW5kbG4oMjU1KTtyLmlzaHJuKDgpLGVbbl09aX1yZXR1cm4gZX0sTWF0aC5jbHozMj9pLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3JldHVybiAzMi1NYXRoLmNsejMyKHQpfTppLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj0wO3JldHVybiBlPj00MDk2JiYocis9MTMsZT4+Pj0xMyksZT49NjQmJihyKz03LGU+Pj49NyksZT49OCYmKHIrPTQsZT4+Pj00KSxlPj0yJiYocis9MixlPj4+PTIpLHIrZX0saS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiAyNjt2YXIgZT10LHI9MDtyZXR1cm4gMD09PSg4MTkxJmUpJiYocis9MTMsZT4+Pj0xMyksMD09PSgxMjcmZSkmJihyKz03LGU+Pj49NyksMD09PSgxNSZlKSYmKHIrPTQsZT4+Pj00KSwwPT09KDMmZSkmJihyKz0yLGU+Pj49MiksMD09PSgxJmUpJiZyKysscn0saS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHQ9MCxlPXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0sdD10aGlzLl9jb3VudEJpdHMoZSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt0fSxpLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKDA9PT10aGlzLmNtcG4oMCkpcmV0dXJuIDA7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2VdKTtpZih0Kz1yLDI2IT09cilicmVha31yZXR1cm4gdH0saS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0saS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuY21wbigwKSlyZXR1cm4gdGhpcy5jbG9uZSgpO3ZhciB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gdC5zaWduPSF0aGlzLnNpZ24sdH0saS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe2Zvcih0aGlzLnNpZ249dGhpcy5zaWdufHx0LnNpZ247dGhpcy5sZW5ndGg8dC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLndvcmRzW2VdPXRoaXMud29yZHNbZV18dC53b3Jkc1tlXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5vcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcih0KTp0LmNsb25lKCkuaW9yKHRoaXMpfSxpLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHQpe3RoaXMuc2lnbj10aGlzLnNpZ24mJnQuc2lnbjt2YXIgZTtlPXRoaXMubGVuZ3RoPnQubGVuZ3RoP3Q6dGhpcztmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mdC53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHQpOnQuY2xvbmUoKS5pYW5kKHRoaXMpfSxpLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3RoaXMuc2lnbj10aGlzLnNpZ258fHQuc2lnbjt2YXIgZSxyO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhlPXRoaXMscj10KTooZT10LHI9dGhpcyk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dXnIud29yZHNbbl07aWYodGhpcyE9PWUpZm9yKDtuPGUubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0saS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcih0KTp0LmNsb25lKCkuaXhvcih0aGlzKX0saS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih0LGUpe3IoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTtmb3IodmFyIG49dC8yNnwwLGk9dCUyNjt0aGlzLmxlbmd0aDw9bjspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiBlP3RoaXMud29yZHNbbl09dGhpcy53b3Jkc1tuXXwxPDxpOnRoaXMud29yZHNbbl09dGhpcy53b3Jkc1tuXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0saS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXtpZih0aGlzLnNpZ24mJiF0LnNpZ24pe3RoaXMuc2lnbj0hMTt2YXIgZT10aGlzLmlzdWIodCk7cmV0dXJuIHRoaXMuc2lnbj0hdGhpcy5zaWduLHRoaXMuX25vcm1TaWduKCl9aWYoIXRoaXMuc2lnbiYmdC5zaWduKXt0LnNpZ249ITE7dmFyIGU9dGhpcy5pc3ViKHQpO3JldHVybiB0LnNpZ249ITAsZS5fbm9ybVNpZ24oKX12YXIgcixuO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBpPTAsbz0wO288bi5sZW5ndGg7bysrKXt2YXIgZT1yLndvcmRzW29dK24ud29yZHNbb10raTt0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjZ9Zm9yKDswIT09aSYmbzxyLmxlbmd0aDtvKyspe3ZhciBlPXIud29yZHNbb10raTt0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjZ9aWYodGhpcy5sZW5ndGg9ci5sZW5ndGgsMCE9PWkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09aSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYociE9PXRoaXMpZm9yKDtvPHIubGVuZ3RoO28rKyl0aGlzLndvcmRzW29dPXIud29yZHNbb107cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtpZih0LnNpZ24mJiF0aGlzLnNpZ24pe3Quc2lnbj0hMTt2YXIgZT10aGlzLnN1Yih0KTtyZXR1cm4gdC5zaWduPSEwLGV9aWYoIXQuc2lnbiYmdGhpcy5zaWduKXt0aGlzLnNpZ249ITE7dmFyIGU9dC5zdWIodGhpcyk7cmV0dXJuIHRoaXMuc2lnbj0hMCxlfXJldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZCh0KTp0LmNsb25lKCkuaWFkZCh0aGlzKX0saS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0KXtpZih0LnNpZ24pe3Quc2lnbj0hMTt2YXIgZT10aGlzLmlhZGQodCk7cmV0dXJuIHQuc2lnbj0hMCxlLl9ub3JtU2lnbigpfWlmKHRoaXMuc2lnbilyZXR1cm4gdGhpcy5zaWduPSExLHRoaXMuaWFkZCh0KSx0aGlzLnNpZ249ITAsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcj10aGlzLmNtcCh0KTtpZigwPT09cilyZXR1cm4gdGhpcy5zaWduPSExLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dmFyIG4saTtyPjA/KG49dGhpcyxpPXQpOihuPXQsaT10aGlzKTtmb3IodmFyIG89MCxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBlPW4ud29yZHNbYV0taS53b3Jkc1thXStvO289ZT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZlfWZvcig7MCE9PW8mJmE8bi5sZW5ndGg7YSsrKXt2YXIgZT1uLndvcmRzW2FdK287bz1lPj4yNix0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmV9aWYoMD09PW8mJmE8bi5sZW5ndGgmJm4hPT10aGlzKWZvcig7YTxuLmxlbmd0aDthKyspdGhpcy53b3Jkc1thXT1uLndvcmRzW2FdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxhKSxuIT09dGhpcyYmKHRoaXMuc2lnbj0hMCksdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHQpfSxpLnByb3RvdHlwZS5fc21hbGxNdWxUbz1mdW5jdGlvbih0LGUpe2Uuc2lnbj10LnNpZ24hPT10aGlzLnNpZ24sZS5sZW5ndGg9dGhpcy5sZW5ndGgrdC5sZW5ndGg7Zm9yKHZhciByPTAsbj0wO248ZS5sZW5ndGgtMTtuKyspe2Zvcih2YXIgaT1yPj4+MjYsbz02NzEwODg2MyZyLGE9TWF0aC5taW4obix0Lmxlbmd0aC0xKSxzPU1hdGgubWF4KDAsbi10aGlzLmxlbmd0aCsxKTthPj1zO3MrKyl7dmFyIGw9bi1zLHU9MHx0aGlzLndvcmRzW2xdLGM9MHx0LndvcmRzW3NdLGg9dSpjLGY9NjcxMDg4NjMmaDtpPWkrKGgvNjcxMDg4NjR8MCl8MCxmPWYrb3wwLG89NjcxMDg4NjMmZixpPWkrKGY+Pj4yNil8MH1lLndvcmRzW25dPW8scj1pfXJldHVybiAwIT09cj9lLndvcmRzW25dPXI6ZS5sZW5ndGgtLSxlLnN0cmlwKCl9LGkucHJvdG90eXBlLl9iaWdNdWxUbz1mdW5jdGlvbih0LGUpe2Uuc2lnbj10LnNpZ24hPT10aGlzLnNpZ24sZS5sZW5ndGg9dGhpcy5sZW5ndGgrdC5sZW5ndGg7Zm9yKHZhciByPTAsbj0wLGk9MDtpPGUubGVuZ3RoLTE7aSsrKXt2YXIgbz1uO249MDtmb3IodmFyIGE9NjcxMDg4NjMmcixzPU1hdGgubWluKGksdC5sZW5ndGgtMSksbD1NYXRoLm1heCgwLGktdGhpcy5sZW5ndGgrMSk7cz49bDtsKyspe3ZhciB1PWktbCxjPTB8dGhpcy53b3Jkc1t1XSxoPTB8dC53b3Jkc1tsXSxmPWMqaCxwPTY3MTA4ODYzJmY7bz1vKyhmLzY3MTA4ODY0fDApfDAscD1wK2F8MCxhPTY3MTA4ODYzJnAsbz1vKyhwPj4+MjYpfDAsbis9bz4+PjI2LG8mPTY3MTA4ODYzfWUud29yZHNbaV09YSxyPW8sbz1ufXJldHVybiAwIT09cj9lLndvcmRzW2ldPXI6ZS5sZW5ndGgtLSxlLnN0cmlwKCl9LGkucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIHI9dGhpcy5sZW5ndGgrdC5sZW5ndGg8NjM/dGhpcy5fc21hbGxNdWxUbyh0LGUpOnRoaXMuX2JpZ011bFRvKHQsZSl9LGkucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgaShudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0saS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0KXtpZigwPT09dGhpcy5jbXBuKDApfHwwPT09dC5jbXBuKDApKXJldHVybiB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSx0aGlzO3ZhciBlPXRoaXMubGVuZ3RoLHI9dC5sZW5ndGg7dGhpcy5zaWduPXQuc2lnbiE9PXRoaXMuc2lnbix0aGlzLmxlbmd0aD10aGlzLmxlbmd0aCt0Lmxlbmd0aCx0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdPTA7Zm9yKHZhciBuPXRoaXMubGVuZ3RoLTI7bj49MDtuLS0pe2Zvcih2YXIgaT0wLG89MCxhPU1hdGgubWluKG4sci0xKSxzPU1hdGgubWF4KDAsbi1lKzEpO2E+PXM7cysrKXt2YXIgbD1uLXMsdT10aGlzLndvcmRzW2xdLGM9dC53b3Jkc1tzXSxoPXUqYyxmPTY3MTA4ODYzJmg7aSs9aC82NzEwODg2NHwwLGYrPW8sbz02NzEwODg2MyZmLGkrPWY+Pj4yNn10aGlzLndvcmRzW25dPW8sdGhpcy53b3Jkc1tuKzFdKz1pLGk9MH1mb3IodmFyIGk9MCxsPTE7bDx0aGlzLmxlbmd0aDtsKyspe3ZhciBwPXRoaXMud29yZHNbbF0raTt0aGlzLndvcmRzW2xdPTY3MTA4ODYzJnAsaT1wPj4+MjZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0saS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7cigibnVtYmVyIj09dHlwZW9mIHQpO2Zvcih2YXIgZT0wLG49MDtuPHRoaXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpcy53b3Jkc1tuXSp0LG89KDY3MTA4ODYzJmkpKyg2NzEwODg2MyZlKTtlPj49MjYsZSs9aS82NzEwODg2NHwwLGUrPW8+Pj4yNix0aGlzLndvcmRzW25dPTY3MTA4ODYzJm99cmV0dXJuIDAhPT1lJiYodGhpcy53b3Jkc1tuXT1lLHRoaXMubGVuZ3RoKyspLHRoaXN9LGkucHJvdG90eXBlLm11bG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbih0KX0saS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxpLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxpLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih0KXtyKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixuPSh0LWUpLzI2LGk9NjcxMDg4NjM+Pj4yNi1lPDwyNi1lO2lmKDAhPT1lKXtmb3IodmFyIG89MCxhPTA7YTx0aGlzLmxlbmd0aDthKyspe3ZhciBzPXRoaXMud29yZHNbYV0maSxsPXRoaXMud29yZHNbYV0tczw8ZTt0aGlzLndvcmRzW2FdPWx8byxvPXM+Pj4yNi1lfW8mJih0aGlzLndvcmRzW2FdPW8sdGhpcy5sZW5ndGgrKyl9aWYoMCE9PW4pe2Zvcih2YXIgYT10aGlzLmxlbmd0aC0xO2E+PTA7YS0tKXRoaXMud29yZHNbYStuXT10aGlzLndvcmRzW2FdO2Zvcih2YXIgYT0wO24+YTthKyspdGhpcy53b3Jkc1thXT0wO3RoaXMubGVuZ3RoKz1ufXJldHVybiB0aGlzLnN0cmlwKCl9LGkucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHQsZSxuKXtyKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGk7aT1lPyhlLWUlMjYpLzI2OjA7dmFyIG89dCUyNixhPU1hdGgubWluKCh0LW8pLzI2LHRoaXMubGVuZ3RoKSxzPTY3MTA4ODYzXjY3MTA4ODYzPj4+bzw8byxsPW47aWYoaS09YSxpPU1hdGgubWF4KDAsaSksbCl7Zm9yKHZhciB1PTA7YT51O3UrKylsLndvcmRzW3VdPXRoaXMud29yZHNbdV07bC5sZW5ndGg9YX1pZigwPT09YSk7ZWxzZSBpZih0aGlzLmxlbmd0aD5hKXt0aGlzLmxlbmd0aC09YTtmb3IodmFyIHU9MDt1PHRoaXMubGVuZ3RoO3UrKyl0aGlzLndvcmRzW3VdPXRoaXMud29yZHNbdSthXX1lbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgYz0wLHU9dGhpcy5sZW5ndGgtMTt1Pj0wJiYoMCE9PWN8fHU+PWkpO3UtLSl7dmFyIGg9dGhpcy53b3Jkc1t1XTt0aGlzLndvcmRzW3VdPWM8PDI2LW98aD4+Pm8sYz1oJnN9cmV0dXJuIGwmJjAhPT1jJiYobC53b3Jkc1tsLmxlbmd0aCsrXT1jKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpLHRoaXN9LGkucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0saS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHQpfSxpLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih0KXtyKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixuPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9bilyZXR1cm4hMTt2YXIgbz10aGlzLndvcmRzW25dO3JldHVybiEhKG8maSl9LGkucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbih0KXtyKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixuPSh0LWUpLzI2O2lmKHIoIXRoaXMuc2lnbiwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksMCE9PWUmJm4rKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihuLHRoaXMubGVuZ3RoKSwwIT09ZSl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5lPDxlO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0saS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odCl9LGkucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHQpe3JldHVybiByKCJudW1iZXIiPT10eXBlb2YgdCksMD50P3RoaXMuaXN1Ym4oLXQpOnRoaXMuc2lnbj8xPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08dD8odGhpcy53b3Jkc1swXT10LXRoaXMud29yZHNbMF0sdGhpcy5zaWduPSExLHRoaXMpOih0aGlzLnNpZ249ITEsdGhpcy5pc3Vibih0KSx0aGlzLnNpZ249ITAsdGhpcyk6dGhpcy5faWFkZG4odCl9LGkucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbih0KXt0aGlzLndvcmRzWzBdKz10O2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV0+PTY3MTA4ODY0O2UrKyl0aGlzLndvcmRzW2VdLT02NzEwODg2NCxlPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2UrMV09MTp0aGlzLndvcmRzW2UrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZSsxKSx0aGlzfSxpLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbih0KXtpZihyKCJudW1iZXIiPT10eXBlb2YgdCksMD50KXJldHVybiB0aGlzLmlhZGRuKC10KTtpZih0aGlzLnNpZ24pcmV0dXJuIHRoaXMuc2lnbj0hMSx0aGlzLmlhZGRuKHQpLHRoaXMuc2lnbj0hMCx0aGlzO3RoaXMud29yZHNbMF0tPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXTwwO2UrKyl0aGlzLndvcmRzW2VdKz02NzEwODg2NCx0aGlzLndvcmRzW2UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0saS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHQpfSxpLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4odCl9LGkucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaWduPSExLHRoaXN9LGkucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxpLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLG89dC5sZW5ndGgrbjtpZih0aGlzLndvcmRzLmxlbmd0aDxvKXtmb3IodmFyIGE9bmV3IEFycmF5KG8pLGk9MDtpPHRoaXMubGVuZ3RoO2krKylhW2ldPXRoaXMud29yZHNbaV07dGhpcy53b3Jkcz1hfWVsc2UgaT10aGlzLmxlbmd0aDtmb3IodGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsbyk7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO2Zvcih2YXIgcz0wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGw9dGhpcy53b3Jkc1tpK25dK3MsdT10LndvcmRzW2ldKmU7bC09NjcxMDg4NjMmdSxzPShsPj4yNiktKHUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tpK25dPTY3MTA4ODYzJmx9Zm9yKDtpPHRoaXMubGVuZ3RoLW47aSsrKXt2YXIgbD10aGlzLndvcmRzW2krbl0rcztzPWw+PjI2LHRoaXMud29yZHNbaStuXT02NzEwODg2MyZsfWlmKDA9PT1zKXJldHVybiB0aGlzLnN0cmlwKCk7cigtMT09PXMpLHM9MDtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl7dmFyIGw9LXRoaXMud29yZHNbaV0rcztzPWw+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmbH1yZXR1cm4gdGhpcy5zaWduPSEwLHRoaXMuc3RyaXAoKX0saS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aC10Lmxlbmd0aCxuPXRoaXMuY2xvbmUoKSxvPXQsYT1vLndvcmRzW28ubGVuZ3RoLTFdLHM9dGhpcy5fY291bnRCaXRzKGEpO3I9MjYtcywwIT09ciYmKG89by5zaGxuKHIpLG4uaXNobG4ociksYT1vLndvcmRzW28ubGVuZ3RoLTFdKTt2YXIgbCx1PW4ubGVuZ3RoLW8ubGVuZ3RoO2lmKCJtb2QiIT09ZSl7bD1uZXcgaShudWxsKSxsLmxlbmd0aD11KzEsbC53b3Jkcz1uZXcgQXJyYXkobC5sZW5ndGgpO2Zvcih2YXIgYz0wO2M8bC5sZW5ndGg7YysrKWwud29yZHNbY109MH12YXIgaD1uLmNsb25lKCkuX2lzaGxuc3VibXVsKG8sMSx1KTtoLnNpZ258fChuPWgsbCYmKGwud29yZHNbdV09MSkpO2Zvcih2YXIgZj11LTE7Zj49MDtmLS0pe3ZhciBwPTY3MTA4ODY0Km4ud29yZHNbby5sZW5ndGgrZl0rbi53b3Jkc1tvLmxlbmd0aCtmLTFdO2ZvcihwPU1hdGgubWluKHAvYXwwLDY3MTA4ODYzKSxuLl9pc2hsbnN1Ym11bChvLHAsZik7bi5zaWduOylwLS0sbi5zaWduPSExLG4uX2lzaGxuc3VibXVsKG8sMSxmKSwwIT09bi5jbXBuKDApJiYobi5zaWduPSFuLnNpZ24pO2wmJihsLndvcmRzW2ZdPXApfXJldHVybiBsJiZsLnN0cmlwKCksbi5zdHJpcCgpLCJkaXYiIT09ZSYmMCE9PXImJm4uaXNocm4ocikse2RpdjpsP2w6bnVsbCxtb2Q6bn19LGkucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUpe2lmKHIoMCE9PXQuY21wbigwKSksdGhpcy5zaWduJiYhdC5zaWduKXt2YXIgbixvLGE9dGhpcy5uZWcoKS5kaXZtb2QodCxlKTtyZXR1cm4ibW9kIiE9PWUmJihuPWEuZGl2Lm5lZygpKSwiZGl2IiE9PWUmJihvPTA9PT1hLm1vZC5jbXBuKDApP2EubW9kOnQuc3ViKGEubW9kKSkse2RpdjpuLG1vZDpvfX1pZighdGhpcy5zaWduJiZ0LnNpZ24pe3ZhciBuLGE9dGhpcy5kaXZtb2QodC5uZWcoKSxlKTtyZXR1cm4ibW9kIiE9PWUmJihuPWEuZGl2Lm5lZygpKSx7ZGl2Om4sbW9kOmEubW9kfX1yZXR1cm4gdGhpcy5zaWduJiZ0LnNpZ24/dGhpcy5uZWcoKS5kaXZtb2QodC5uZWcoKSxlKTp0Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodCk8MD97ZGl2Om5ldyBpKDApLG1vZDp0aGlzfToxPT09dC5sZW5ndGg/ImRpdiI9PT1lP3tkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWU/e2RpdjpudWxsLG1vZDpuZXcgaSh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bmV3IGkodGhpcy5tb2RuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih0LGUpfSxpLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsImRpdiIpLmRpdn0saS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LCJtb2QiKS5tb2R9LGkucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGl2bW9kKHQpO2lmKDA9PT1lLm1vZC5jbXBuKDApKXJldHVybiBlLmRpdjt2YXIgcj1lLmRpdi5zaWduP2UubW9kLmlzdWIodCk6ZS5tb2Qsbj10LnNocm4oMSksaT10LmFuZGxuKDEpLG89ci5jbXAobik7cmV0dXJuIDA+b3x8MT09PWkmJjA9PT1vP2UuZGl2OmUuZGl2LnNpZ24/ZS5kaXYuaXN1Ym4oMSk6ZS5kaXYuaWFkZG4oMSl9LGkucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odCl7cig2NzEwODg2Mz49dCk7Zm9yKHZhciBlPSgxPDwyNikldCxuPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKW49KGUqbit0aGlzLndvcmRzW2ldKSV0O3JldHVybiBufSxpLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih0KXtyKDY3MTA4ODYzPj10KTtmb3IodmFyIGU9MCxuPXRoaXMubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBpPXRoaXMud29yZHNbbl0rNjcxMDg4NjQqZTt0aGlzLndvcmRzW25dPWkvdHwwLGU9aSV0fXJldHVybiB0aGlzLnN0cmlwKCl9LGkucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bih0KX0saS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbih0KXtyKCF0LnNpZ24pLHIoMCE9PXQuY21wbigwKSk7dmFyIGU9dGhpcyxuPXQuY2xvbmUoKTtlPWUuc2lnbj9lLm1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBvPW5ldyBpKDEpLGE9bmV3IGkoMCkscz1uZXcgaSgwKSxsPW5ldyBpKDEpLHU9MDtlLmlzRXZlbigpJiZuLmlzRXZlbigpOyllLmlzaHJuKDEpLG4uaXNocm4oMSksKyt1O2Zvcih2YXIgYz1uLmNsb25lKCksaD1lLmNsb25lKCk7MCE9PWUuY21wbigwKTspe2Zvcig7ZS5pc0V2ZW4oKTspZS5pc2hybigxKSxvLmlzRXZlbigpJiZhLmlzRXZlbigpPyhvLmlzaHJuKDEpLGEuaXNocm4oMSkpOihvLmlhZGQoYykuaXNocm4oMSksYS5pc3ViKGgpLmlzaHJuKDEpKTtmb3IoO24uaXNFdmVuKCk7KW4uaXNocm4oMSkscy5pc0V2ZW4oKSYmbC5pc0V2ZW4oKT8ocy5pc2hybigxKSxsLmlzaHJuKDEpKToocy5pYWRkKGMpLmlzaHJuKDEpLGwuaXN1YihoKS5pc2hybigxKSk7ZS5jbXAobik+PTA/KGUuaXN1YihuKSxvLmlzdWIocyksYS5pc3ViKGwpKToobi5pc3ViKGUpLHMuaXN1YihvKSxsLmlzdWIoYSkpfXJldHVybnthOnMsYjpsLGdjZDpuLmlzaGxuKHUpfX0saS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHQpe3IoIXQuc2lnbikscigwIT09dC5jbXBuKDApKTt2YXIgZT10aGlzLG49dC5jbG9uZSgpO2U9ZS5zaWduP2UubW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIG89bmV3IGkoMSksYT1uZXcgaSgwKSxzPW4uY2xvbmUoKTtlLmNtcG4oMSk+MCYmbi5jbXBuKDEpPjA7KXtmb3IoO2UuaXNFdmVuKCk7KWUuaXNocm4oMSksby5pc0V2ZW4oKT9vLmlzaHJuKDEpOm8uaWFkZChzKS5pc2hybigxKTtmb3IoO24uaXNFdmVuKCk7KW4uaXNocm4oMSksYS5pc0V2ZW4oKT9hLmlzaHJuKDEpOmEuaWFkZChzKS5pc2hybigxKTtlLmNtcChuKT49MD8oZS5pc3ViKG4pLG8uaXN1YihhKSk6KG4uaXN1YihlKSxhLmlzdWIobykpfXJldHVybiAwPT09ZS5jbXBuKDEpP286YX0saS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHQpe2lmKDA9PT10aGlzLmNtcG4oMCkpcmV0dXJuIHQuY2xvbmUoKTtpZigwPT09dC5jbXBuKDApKXJldHVybiB0aGlzLmNsb25lKCk7dmFyIGU9dGhpcy5jbG9uZSgpLHI9dC5jbG9uZSgpO2Uuc2lnbj0hMSxyLnNpZ249ITE7Zm9yKHZhciBuPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTtuKyspZS5pc2hybigxKSxyLmlzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLmlzaHJuKDEpO2Zvcig7ci5pc0V2ZW4oKTspci5pc2hybigxKTt2YXIgaT1lLmNtcChyKTtpZigwPmkpe3ZhciBvPWU7ZT1yLHI9b31lbHNlIGlmKDA9PT1pfHwwPT09ci5jbXBuKDEpKWJyZWFrO2UuaXN1YihyKX1yZXR1cm4gci5pc2hsbihuKX0saS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEubW9kKHQpfSxpLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09PSgxJnRoaXMud29yZHNbMF0pfSxpLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT09KDEmdGhpcy53b3Jkc1swXSl9LGkucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndvcmRzWzBdJnR9LGkucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHQpe3IoIm51bWJlciI9PXR5cGVvZiB0KTt2YXIgZT10JTI2LG49KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1uKXtmb3IodmFyIG89dGhpcy5sZW5ndGg7bisxPm87bysrKXRoaXMud29yZHNbb109MDtyZXR1cm4gdGhpcy53b3Jkc1tuXXw9aSx0aGlzLmxlbmd0aD1uKzEsdGhpc31mb3IodmFyIGE9aSxvPW47MCE9PWEmJm88dGhpcy5sZW5ndGg7bysrKXt2YXIgcz10aGlzLndvcmRzW29dO3MrPWEsYT1zPj4+MjYscyY9NjcxMDg4NjMsdGhpcy53b3Jkc1tvXT1zfXJldHVybiAwIT09YSYmKHRoaXMud29yZHNbb109YSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxpLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHQpe3ZhciBlPTA+dDtpZihlJiYodD0tdCksdGhpcy5zaWduJiYhZSlyZXR1cm4tMTtpZighdGhpcy5zaWduJiZlKXJldHVybiAxO3QmPTY3MTA4ODYzLHRoaXMuc3RyaXAoKTsKdmFyIHI7aWYodGhpcy5sZW5ndGg+MSlyPTE7ZWxzZXt2YXIgbj10aGlzLndvcmRzWzBdO3I9bj09PXQ/MDp0Pm4/LTE6MX1yZXR1cm4gdGhpcy5zaWduJiYocj0tcikscn0saS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHQpe2lmKHRoaXMuc2lnbiYmIXQuc2lnbilyZXR1cm4tMTtpZighdGhpcy5zaWduJiZ0LnNpZ24pcmV0dXJuIDE7dmFyIGU9dGhpcy51Y21wKHQpO3JldHVybiB0aGlzLnNpZ24/LWU6ZX0saS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPXRoaXMud29yZHNbcl0saT10LndvcmRzW3JdO2lmKG4hPT1pKXtpPm4/ZT0tMTpuPmkmJihlPTEpO2JyZWFrfX1yZXR1cm4gZX0saS5yZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmKHQpfSxpLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih0KXtyZXR1cm4gcighdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxyKCF0aGlzLnNpZ24sInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxpLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0saS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZD10LHRoaXN9LGkucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiByKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxpLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0saS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdCl9LGkucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxpLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiByKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0saS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiByKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsdCl9LGkucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LGkucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0saS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGkucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcih0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxpLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0saS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiByKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGkucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiByKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxpLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcy5yZWQmJiF0LnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIHY9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtzLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGkobnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0fSxzLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDtkbyB0aGlzLnNwbGl0KHIsdGhpcy50bXApLHI9dGhpcy5pbXVsSyhyKSxyPXIuaWFkZCh0aGlzLnRtcCksZT1yLmJpdExlbmd0aCgpO3doaWxlKGU+dGhpcy5uKTt2YXIgbj1lPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6ci5zdHJpcCgpLHJ9LHMucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pc2hybih0aGlzLm4sMCxlKX0scy5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxuKGwscyksbC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9NDE5NDMwMyxuPU1hdGgubWluKHQubGVuZ3RoLDkpLGk9MDtuPmk7aSsrKWUud29yZHNbaV09dC53b3Jkc1tpXTtpZihlLmxlbmd0aD1uLHQubGVuZ3RoPD05KXJldHVybiB0LndvcmRzWzBdPTAsdm9pZCh0Lmxlbmd0aD0xKTt2YXIgbz10LndvcmRzWzldO2Uud29yZHNbZS5sZW5ndGgrK109byZyO2Zvcih2YXIgaT0xMDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dC53b3Jkc1tpXTt0LndvcmRzW2ktMTBdPShhJnIpPDw0fG8+Pj4yMixvPWF9dC53b3Jkc1tpLTEwXT1vPj4+MjIsdC5sZW5ndGgtPTl9LGwucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3Qud29yZHNbdC5sZW5ndGhdPTAsdC53b3Jkc1t0Lmxlbmd0aCsxXT0wLHQubGVuZ3RoKz0yO2Zvcih2YXIgZSxyPTAsbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10LndvcmRzW25dO2U9NjQqaSxyKz05NzcqaSxlKz1yLzY3MTA4ODY0fDAsciY9NjcxMDg4NjMsdC53b3Jkc1tuXT1yLHI9ZX1yZXR1cm4gMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJih0Lmxlbmd0aC0tLDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiZ0Lmxlbmd0aC0tKSx0fSxuKHUscyksbihjLHMpLG4oaCxzKSxoLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTE5KnQud29yZHNbcl0rZSxpPTY3MTA4ODYzJm47bj4+Pj0yNix0LndvcmRzW3JdPWksZT1ufXJldHVybiAwIT09ZSYmKHQud29yZHNbdC5sZW5ndGgrK109ZSksdH0saS5fcHJpbWU9ZnVuY3Rpb24geSh0KXtpZih2W3RdKXJldHVybiB2W3RdO3ZhciB5O2lmKCJrMjU2Ij09PXQpeT1uZXcgbDtlbHNlIGlmKCJwMjI0Ij09PXQpeT1uZXcgdTtlbHNlIGlmKCJwMTkyIj09PXQpeT1uZXcgYztlbHNle2lmKCJwMjU1MTkiIT09dCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIit0KTt5PW5ldyBofXJldHVybiB2W3RdPXkseX0sZi5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7cighdC5zaWduLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHIodC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sZi5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odCxlKXtyKCF0LnNpZ24mJiFlLnNpZ24sInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscih0LnJlZCYmdC5yZWQ9PT1lLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxmLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh0KS5fZm9yY2VSZWQodGhpcyk6dC5tb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LGYucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCk7cmV0dXJuIGUuc2lnbj0hZS5zaWduLGUuaWFkZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sZi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sZi5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlhZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHJ9LGYucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LnN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxmLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaXN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHJ9LGYucHJvdG90eXBlLnNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHQpLHRoaXMuaW1vZCh0LnNobG4oZSkpfSxmLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5pbXVsKGUpKX0sZi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5tdWwoZSkpfSxmLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltdWwodCx0KX0sZi5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm11bCh0LHQpfSxmLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHQpe2lmKDA9PT10LmNtcG4oMCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT10aGlzLm0uYW5kbG4oMyk7aWYocihlJTI9PT0xKSwzPT09ZSl7dmFyIG49dGhpcy5tLmFkZChuZXcgaSgxKSkuaXNocm4oMiksbz10aGlzLnBvdyh0LG4pO3JldHVybiBvfWZvcih2YXIgYT10aGlzLm0uc3VibigxKSxzPTA7MCE9PWEuY21wbigwKSYmMD09PWEuYW5kbG4oMSk7KXMrKyxhLmlzaHJuKDEpO3IoMCE9PWEuY21wbigwKSk7dmFyIGw9bmV3IGkoMSkudG9SZWQodGhpcyksdT1sLnJlZE5lZygpLGM9dGhpcy5tLnN1Ym4oMSkuaXNocm4oMSksaD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGg9bmV3IGkoMipoKmgpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhoLGMpLmNtcCh1KTspaC5yZWRJQWRkKHUpO2Zvcih2YXIgZj10aGlzLnBvdyhoLGEpLG89dGhpcy5wb3codCxhLmFkZG4oMSkuaXNocm4oMSkpLHA9dGhpcy5wb3codCxhKSxkPXM7MCE9PXAuY21wKGwpOyl7Zm9yKHZhciBtPXAsZz0wOzAhPT1tLmNtcChsKTtnKyspbT1tLnJlZFNxcigpO3IoZD5nKTt2YXIgdj10aGlzLnBvdyhmLG5ldyBpKDEpLmlzaGxuKGQtZy0xKSk7bz1vLnJlZE11bCh2KSxmPXYucmVkU3FyKCkscD1wLnJlZE11bChmKSxkPWd9cmV0dXJuIG99LGYucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dC5faW52bXAodGhpcy5tKTtyZXR1cm4gZS5zaWduPyhlLnNpZ249ITEsdGhpcy5pbW9kKGUpLnJlZE5lZygpKTp0aGlzLmltb2QoZSl9LGYucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO2lmKDA9PT1lLmNtcG4oMCkpcmV0dXJuIG5ldyBpKDEpO2Zvcih2YXIgbj1lLmNsb25lKCk7MCE9PW4uY21wbigwKTspci5wdXNoKG4uYW5kbG4oMSkpLG4uaXNocm4oMSk7Zm9yKHZhciBvPXQsYT0wO2E8ci5sZW5ndGgmJjA9PT1yW2FdO2ErKyxvPXRoaXMuc3FyKG8pKTtpZigrK2E8ci5sZW5ndGgpZm9yKHZhciBuPXRoaXMuc3FyKG8pO2E8ci5sZW5ndGg7YSsrLG49dGhpcy5zcXIobikpMCE9PXJbYV0mJihvPXRoaXMubXVsKG8sbikpO3JldHVybiBvfSxmLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7dmFyIGU9dC5tb2QodGhpcy5tKTtyZXR1cm4gZT09PXQ/ZS5jbG9uZSgpOmV9LGYucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvbmUoKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxpLm1vbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwKHQpfSxuKHAsZikscC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC5zaGxuKHRoaXMuc2hpZnQpKX0scC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQubXVsKHRoaXMucmludikpO3JldHVybiBlLnJlZD1udWxsLGV9LHAucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtpZigwPT09dC5jbXBuKDApfHwwPT09ZS5jbXBuKDApKXJldHVybiB0LndvcmRzWzBdPTAsdC5sZW5ndGg9MSx0O3ZhciByPXQuaW11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLmlzaHJuKHRoaXMuc2hpZnQpLG89aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9vPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYobz1pLmlhZGQodGhpcy5tKSksby5fZm9yY2VSZWQodGhpcyl9LHAucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe2lmKDA9PT10LmNtcG4oMCl8fDA9PT1lLmNtcG4oMCkpcmV0dXJuIG5ldyBpKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgcj10Lm11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLG89ci5pc3ViKG4pLmlzaHJuKHRoaXMuc2hpZnQpLGE9bztyZXR1cm4gby5jbXAodGhpcy5tKT49MD9hPW8uaXN1Yih0aGlzLm0pOm8uY21wbigwKTwwJiYoYT1vLmlhZGQodGhpcy5tKSksYS5fZm9yY2VSZWQodGhpcyl9LHAucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKTtyZXR1cm4gZS5fZm9yY2VSZWQodGhpcyl9fSgidW5kZWZpbmVkIj09dHlwZW9mIGV8fGUsdGhpcyl9LHt9XSw5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiBpKHRbMF0pKmkodFsxXSl9dmFyIGk9dCgiLi9saWIvYm4tc2lnbiIpO2UuZXhwb3J0cz1ufSx7Ii4vbGliL2JuLXNpZ24iOjgyfV0sOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBpKHRbMF0ubXVsKGVbMV0pLnN1Yih0WzFdLm11bChlWzBdKSksdFsxXS5tdWwoZVsxXSkpfXZhciBpPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPW59LHsiLi9saWIvcmF0aW9uYWxpemUiOjg3fV0sOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10WzBdLHI9dFsxXTtpZigwPT09ZS5jbXBuKDApKXJldHVybiAwO3ZhciBuPWUuZGl2bW9kKHIpLGE9bi5kaXYscz1pKGEpLGw9bi5tb2Q7aWYoMD09PWwuY21wbigwKSlyZXR1cm4gcztpZihzKXt2YXIgdT1vKHMpKzQsYz1pKGwuc2hsbih1KS5kaXZSb3VuZChyKSk7cmV0dXJuIDA+cyYmKGM9LWMpLHMrYypNYXRoLnBvdygyLC11KX12YXIgaD1yLmJpdExlbmd0aCgpLWwuYml0TGVuZ3RoKCkrNTMsYz1pKGwuc2hsbihoKS5kaXZSb3VuZChyKSk7cmV0dXJuIDEwMjM+aD9jKk1hdGgucG93KDIsLWgpOihjKj1NYXRoLnBvdygyLC0xMDIzKSxjKk1hdGgucG93KDIsMTAyMy1oKSl9dmFyIGk9dCgiLi9saWIvYm4tdG8tbnVtIiksbz10KCIuL2xpYi9jdHoiKTtlLmV4cG9ydHM9bn0seyIuL2xpYi9ibi10by1udW0iOjgzLCIuL2xpYi9jdHoiOjg0fV0sOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj0wO3Q+cjsrK3IpaWYoIShlW3JdPD1lW3IrdF0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGkodCxlLHIsaSl7Zm9yKHZhciBvPTAsYT0wLHM9MCxsPXQubGVuZ3RoO2w+czsrK3Mpe3ZhciB1PXRbc107aWYoIW4oZSx1KSl7Zm9yKHZhciBjPTA7MiplPmM7KytjKXJbbysrXT11W2NdO2lbYSsrXT1zfX1yZXR1cm4gYX1mdW5jdGlvbiBvKHQsZSxyLG4pe3ZhciBvPXQubGVuZ3RoLGE9ZS5sZW5ndGg7aWYoISgwPj1vfHwwPj1hKSl7dmFyIHM9dFswXS5sZW5ndGg+Pj4xO2lmKCEoMD49cykpe3ZhciBsLHU9aC5tYWxsb2NEb3VibGUoMipzKm8pLGM9aC5tYWxsb2NJbnQzMihvKTtpZihvPWkodCxzLHUsYyksbz4wKXtpZigxPT09cyYmbilmLmluaXQobyksbD1mLnN3ZWVwQ29tcGxldGUocyxyLDAsbyx1LGMsMCxvLHUsYyk7ZWxzZXt2YXIgZD1oLm1hbGxvY0RvdWJsZSgyKnMqYSksbT1oLm1hbGxvY0ludDMyKGEpO2E9aShlLHMsZCxtKSxhPjAmJihmLmluaXQobythKSxsPTE9PT1zP2Yuc3dlZXBCaXBhcnRpdGUocyxyLDAsbyx1LGMsMCxhLGQsbSk6cChzLHIsbixvLHUsYyxhLGQsbSksaC5mcmVlKGQpLGguZnJlZShtKSl9aC5mcmVlKHUpLGguZnJlZShjKX1yZXR1cm4gbH19fWZ1bmN0aW9uIGEodCxlKXtjLnB1c2goW3QsZV0pfWZ1bmN0aW9uIHModCl7cmV0dXJuIGM9W10sbyh0LHQsYSwhMCksY31mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGM9W10sbyh0LGUsYSwhMSksY31mdW5jdGlvbiB1KHQsZSxyKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBzKHQpO2Nhc2UgMjpyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9vKHQsdCxlLCEwKTpsKHQsZSk7Y2FzZSAzOnJldHVybiBvKHQsZSxyLCExKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiYm94LWludGVyc2VjdDogSW52YWxpZCBhcmd1bWVudHMiKX19ZS5leHBvcnRzPXU7dmFyIGMsaD10KCJ0eXBlZGFycmF5LXBvb2wiKSxmPXQoIi4vbGliL3N3ZWVwIikscD10KCIuL2xpYi9pbnRlcnNlY3QiKX0seyIuL2xpYi9pbnRlcnNlY3QiOjk2LCIuL2xpYi9zd2VlcCI6MTAwLCJ0eXBlZGFycmF5LXBvb2wiOjQ4MX1dLDk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPSJicnV0ZUZvcmNlIisodD8iUmVkIjoiQmx1ZSIpKyhlPyJGbGlwIjoiIikrKHI/IkZ1bGwiOiIiKSxpPVsiZnVuY3Rpb24gIixuLCIoIix3LmpvaW4oKSwiKXsiLCJ2YXIgIix1LCI9MioiLG8sIjsiXSxsPSJmb3IodmFyIGk9IitjKyIsIitkKyI9Iit1KyIqIitjKyI7aTwiK2grIjsrK2ksIitkKyIrPSIrdSsiKXt2YXIgeDA9IitmKyJbIithKyIrIitkKyJdLHgxPSIrZisiWyIrYSsiKyIrZCsiKyIrbysiXSx4aT0iK3ArIltpXTsiLE09ImZvcih2YXIgaj0iK20rIiwiK2IrIj0iK3UrIioiK20rIjtqPCIrZysiOysraiwiK2IrIis9Iit1KyIpe3ZhciB5MD0iK3YrIlsiK2ErIisiK2IrIl0sIisocj8ieTE9Iit2KyJbIithKyIrIitiKyIrIitvKyJdLCI6IiIpKyJ5aT0iK3krIltqXTsiO3JldHVybiB0P2kucHVzaChsLF8sIjoiLE0pOmkucHVzaChNLF8sIjoiLGwpLHI/aS5wdXNoKCJpZih5MTx4MHx8eDE8eTApY29udGludWU7Iik6ZT9pLnB1c2goImlmKHkwPD14MHx8eDE8eTApY29udGludWU7Iik6aS5wdXNoKCJpZih5MDx4MHx8eDE8eTApY29udGludWU7IiksaS5wdXNoKCJmb3IodmFyIGs9IithKyIrMTtrPCIrbysiOysrayl7dmFyIHIwPSIrZisiW2srIitkKyJdLHIxPSIrZisiW2srIitvKyIrIitkKyJdLGIwPSIrdisiW2srIitiKyJdLGIxPSIrdisiW2srIitvKyIrIitiKyJdO2lmKHIxPGIwfHxiMTxyMCljb250aW51ZSAiK18rIjt9dmFyICIreCsiPSIrcysiKCIpLGU/aS5wdXNoKCJ5aSx4aSIpOmkucHVzaCgieGkseWkiKSxpLnB1c2goIik7aWYoIit4KyIhPT12b2lkIDApcmV0dXJuICIreCsiO319fSIpLHtuYW1lOm4sY29kZTppLmpvaW4oIiIpfX1mdW5jdGlvbiBpKHQpe2Z1bmN0aW9uIGUoZSxyKXt2YXIgbz1uKGUscix0KTtpLnB1c2goby5jb2RlKSxhLnB1c2goInJldHVybiAiK28ubmFtZSsiKCIrdy5qb2luKCkrIik7Iil9dmFyIHI9ImJydXRlRm9yY2UiKyh0PyJGdWxsIjoiUGFydGlhbCIpLGk9W10sbz13LnNsaWNlKCk7dHx8by5zcGxpY2UoMywwLGwpO3ZhciBhPVsiZnVuY3Rpb24gIityKyIoIitvLmpvaW4oKSsiKXsiXTthLnB1c2goImlmKCIraCsiLSIrYysiPiIrZysiLSIrbSsiKXsiKSx0PyhlKCEwLCExKSxhLnB1c2goIn1lbHNleyIpLGUoITEsITEpKTooYS5wdXNoKCJpZigiK2wrIil7IiksZSghMCwhMCksYS5wdXNoKCJ9ZWxzZXsiKSxlKCEwLCExKSxhLnB1c2goIn19ZWxzZXtpZigiK2wrIil7IiksZSghMSwhMCksYS5wdXNoKCJ9ZWxzZXsiKSxlKCExLCExKSxhLnB1c2goIn0iKSksYS5wdXNoKCJ9fXJldHVybiAiK3IpO3ZhciBzPWkuam9pbigiIikrYS5qb2luKCIiKSx1PW5ldyBGdW5jdGlvbihzKTtyZXR1cm4gdSgpfXZhciBvPSJkIixhPSJheCIscz0idnYiLGw9ImZwIix1PSJlcyIsYz0icnMiLGg9InJlIixmPSJyYiIscD0icmkiLGQ9InJwIixtPSJicyIsZz0iYmUiLHY9ImJiIix5PSJiaSIsYj0iYnAiLHg9InJ2IixfPSJRIix3PVtvLGEscyxjLGgsZixwLG0sZyx2LHldO3IucGFydGlhbD1pKCExKSxyLmZ1bGw9aSghMCl9LHt9XSw5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9OCp1LmxvZzIoZSsxKSoodCsxKXwwLG49dS5uZXh0UG93MihBKnIpO1MubGVuZ3RoPG4mJihsLmZyZWUoUyksUz1sLm1hbGxvY0ludDMyKG4pKTt2YXIgaT11Lm5leHRQb3cyKFQqcik7aT5MJiYobC5mcmVlKEwpLEw9bC5tYWxsb2NEb3VibGUoaSkpfWZ1bmN0aW9uIGkodCxlLHIsbixpLG8sYSxzLGwpe3ZhciB1PUEqdDtTW3VdPWUsU1t1KzFdPXIsU1t1KzJdPW4sU1t1KzNdPWksU1t1KzRdPW8sU1t1KzVdPWE7dmFyIGM9VCp0O0xbY109cyxMW2MrMV09bH1mdW5jdGlvbiBvKHQsZSxyLG4saSxvLGEscyxsLHUsYyl7dmFyIGg9Mip0LGY9bCpoLHA9dVtmK2VdO3Q6Zm9yKHZhciBkPWksbT1pKmg7bz5kOysrZCxtKz1oKXt2YXIgZz1hW20rZV0sdj1hW20rZSt0XTtpZighKGc+cHx8cD52fHxuJiZwPT09Zykpe2Zvcih2YXIgeT1zW2RdLGI9ZSsxO3Q+YjsrK2Ipe3ZhciBnPWFbbStiXSx2PWFbbStiK3RdLHg9dVtmK2JdLF89dVtmK2IrdF07aWYoeD52fHxnPl8pY29udGludWUgdH12YXIgdztpZih3PW4/cihjLHkpOnIoeSxjKSx2b2lkIDAhPT13KXJldHVybiB3fX19ZnVuY3Rpb24gYSh0LGUscixuLGksbyxhLHMsbCx1KXt2YXIgYz0yKnQsaD1zKmMsZj1sW2grZV07dDpmb3IodmFyIHA9bixkPW4qYztpPnA7KytwLGQrPWMpe3ZhciBtPWFbcF07aWYobSE9PXUpe3ZhciBnPW9bZCtlXSx2PW9bZCtlK3RdO2lmKCEoZz5mfHxmPnYpKXtmb3IodmFyIHk9ZSsxO3Q+eTsrK3kpe3ZhciBnPW9bZCt5XSx2PW9bZCt5K3RdLGI9bFtoK3ldLHg9bFtoK3krdF07aWYoYj52fHxnPngpY29udGludWUgdH12YXIgXz1yKG0sdSk7aWYodm9pZCAwIT09XylyZXR1cm4gX319fX1mdW5jdGlvbiBzKHQsZSxyLHMsbCx1LGMsbSxFKXtuKHQscytjKTt2YXIgeixJPTAsUD0yKnQ7Zm9yKGkoSSsrLDAsMCxzLDAsYyxyPzE2OjAsLSgxLzApLDEvMCkscnx8aShJKyssMCwwLGMsMCxzLDEsLSgxLzApLDEvMCk7ST4wOyl7SS09MTt2YXIgQz1JKkEsUj1TW0NdLGo9U1tDKzFdLEQ9U1tDKzJdLE89U1tDKzNdLEY9U1tDKzRdLE49U1tDKzVdLEI9SSpULFU9TFtCXSxWPUxbQisxXSxxPTEmTixHPSEhKDE2Jk4pLEg9bCxYPXUsWT1tLFc9RTtpZihxJiYoSD1tLFg9RSxZPWwsVz11KSwhKDImTiYmKEQ9Xyh0LFIsaixELEgsWCxWKSxqPj1EKXx8NCZOJiYoaj13KHQsUixqLEQsSCxYLFUpLGo+PUQpKSl7dmFyIFo9RC1qLFE9Ri1PO2lmKEcpe2lmKHk+dCpaKihaK1EpKXtpZih6PXAuc2NhbkNvbXBsZXRlKHQsUixlLGosRCxILFgsTyxGLFksVyksdm9pZCAwIT09eilyZXR1cm4gejtjb250aW51ZX19ZWxzZXtpZih0Kk1hdGgubWluKFosUSk8Zyl7aWYoej1oKHQsUixlLHEsaixELEgsWCxPLEYsWSxXKSx2b2lkIDAhPT16KXJldHVybiB6O2NvbnRpbnVlfWlmKHY+dCpaKlEpe2lmKHo9cC5zY2FuQmlwYXJ0aXRlKHQsUixlLHEsaixELEgsWCxPLEYsWSxXKSx2b2lkIDAhPT16KXJldHVybiB6O2NvbnRpbnVlfX12YXIgSz1iKHQsUixqLEQsSCxYLFUsVik7aWYoSz5qKWlmKGc+dCooSy1qKSl7aWYoej1mKHQsUisxLGUsaixLLEgsWCxPLEYsWSxXKSx2b2lkIDAhPT16KXJldHVybiB6fWVsc2UgaWYoUj09PXQtMil7aWYoej1xP3Auc3dlZXBCaXBhcnRpdGUodCxlLE8sRixZLFcsaixLLEgsWCk6cC5zd2VlcEJpcGFydGl0ZSh0LGUsaixLLEgsWCxPLEYsWSxXKSx2b2lkIDAhPT16KXJldHVybiB6fWVsc2UgaShJKyssUisxLGosSyxPLEYscSwtKDEvMCksMS8wKSxpKEkrKyxSKzEsTyxGLGosSywxXnEsLSgxLzApLDEvMCk7aWYoRD5LKXt2YXIgSj1kKHQsUixPLEYsWSxXKSwkPVlbUCpKK1JdLHR0PXgodCxSLEosRixZLFcsJCk7aWYoRj50dCYmaShJKyssUixLLEQsdHQsRiwoNHxxKSsoRz8xNjowKSwkLFYpLEo+TyYmaShJKyssUixLLEQsTyxKLCgyfHEpKyhHPzE2OjApLFUsJCksSisxPT09dHQpe2lmKHo9Rz9hKHQsUixlLEssRCxILFgsSixZLFdbSl0pOm8odCxSLGUscSxLLEQsSCxYLEosWSxXW0pdKSx2b2lkIDAhPT16KXJldHVybiB6fWVsc2UgaWYodHQ+Sil7dmFyIGV0O2lmKEcpe2lmKGV0PU0odCxSLEssRCxILFgsJCksZXQ+Syl7dmFyIHJ0PXgodCxSLEssZXQsSCxYLCQpO2lmKFI9PT10LTIpe2lmKHJ0PksmJih6PXAuc3dlZXBDb21wbGV0ZSh0LGUsSyxydCxILFgsSix0dCxZLFcpLHZvaWQgMCE9PXopKXJldHVybiB6O2lmKGV0PnJ0JiYoej1wLnN3ZWVwQmlwYXJ0aXRlKHQsZSxydCxldCxILFgsSix0dCxZLFcpLHZvaWQgMCE9PXopKXJldHVybiB6fWVsc2UgcnQ+SyYmaShJKyssUisxLEsscnQsSix0dCwxNiwtKDEvMCksMS8wKSxldD5ydCYmKGkoSSsrLFIrMSxydCxldCxKLHR0LDAsLSgxLzApLDEvMCksaShJKyssUisxLEosdHQscnQsZXQsMSwtKDEvMCksMS8wKSl9fWVsc2UgZXQ9cT9rKHQsUixLLEQsSCxYLCQpOk0odCxSLEssRCxILFgsJCksZXQ+SyYmKFI9PT10LTI/ej1xP3Auc3dlZXBCaXBhcnRpdGUodCxlLEosdHQsWSxXLEssZXQsSCxYKTpwLnN3ZWVwQmlwYXJ0aXRlKHQsZSxLLGV0LEgsWCxKLHR0LFksVyk6KGkoSSsrLFIrMSxLLGV0LEosdHQscSwtKDEvMCksMS8wKSxpKEkrKyxSKzEsSix0dCxLLGV0LDFecSwtKDEvMCksMS8wKSkpfX19fX1lLmV4cG9ydHM9czt2YXIgbD10KCJ0eXBlZGFycmF5LXBvb2wiKSx1PXQoImJpdC10d2lkZGxlIiksYz10KCIuL2JydXRlIiksaD1jLnBhcnRpYWwsZj1jLmZ1bGwscD10KCIuL3N3ZWVwIiksZD10KCIuL21lZGlhbiIpLG09dCgiLi9wYXJ0aXRpb24iKSxnPTEyOCx2PTE8PDIyLHk9MTw8MjIsYj1tKCIhKGxvPj1wMCkmJiEocDE+PWhpKSIsWyJwMCIsInAxIl0pLHg9bSgibG89PT1wMCIsWyJwMCJdKSxfPW0oImxvPHAwIixbInAwIl0pLHc9bSgiaGk8PXAwIixbInAwIl0pLE09bSgibG88PXAwJiZwMDw9aGkiLFsicDAiXSksaz1tKCJsbzxwMCYmcDA8PWhpIixbInAwIl0pLEE9NixUPTIsRT0xMDI0LFM9bC5tYWxsb2NJbnQzMihFKSxMPWwubWFsbG9jRG91YmxlKEUpfSx7Ii4vYnJ1dGUiOjk1LCIuL21lZGlhbiI6OTcsIi4vcGFydGl0aW9uIjo5OCwiLi9zd2VlcCI6MTAwLCJiaXQtdHdpZGRsZSI6NTEsInR5cGVkYXJyYXktcG9vbCI6NDgxfV0sOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksbyl7Zm9yKHZhciBhPTIqdCxzPWEqKHIrMSkrZSxsPXIrMTtuPmw7KytsLHMrPWEpZm9yKHZhciB1PWlbc10sYz1sLGg9YSoobC0xKTtjPnImJmlbaCtlXT51Oy0tYyxoLT1hKXtmb3IodmFyIGY9aCxwPWgrYSxkPTA7YT5kOysrZCwrK2YsKytwKXt2YXIgbT1pW2ZdO2lbZl09aVtwXSxpW3BdPW19dmFyIGc9b1tjXTtvW2NdPW9bYy0xXSxvW2MtMV09Z319ZnVuY3Rpb24gaSh0LGUscixpLG8sbCl7aWYocisxPj1pKXJldHVybiByO2Zvcih2YXIgdT1yLGM9aSxoPWkrcj4+PjEsZj0yKnQscD1oLGQ9b1tmKmgrZV07Yz51Oyl7aWYocz5jLXUpe24odCxlLHUsYyxvLGwpLGQ9b1tmKmgrZV07YnJlYWt9dmFyIG09Yy11LGc9TWF0aC5yYW5kb20oKSptK3V8MCx2PW9bZipnK2VdLHk9TWF0aC5yYW5kb20oKSptK3V8MCxiPW9bZip5K2VdLHg9TWF0aC5yYW5kb20oKSptK3V8MCxfPW9bZip4K2VdO2I+PXY/Xz49Yj8ocD15LGQ9Yik6dj49Xz8ocD1nLGQ9dik6KHA9eCxkPV8pOmI+PV8/KHA9eSxkPWIpOl8+PXY/KHA9ZyxkPXYpOihwPXgsZD1fKTtmb3IodmFyIHc9ZiooYy0xKSxNPWYqcCxrPTA7Zj5rOysraywrK3csKytNKXt2YXIgQT1vW3ddO29bd109b1tNXSxvW01dPUF9dmFyIFQ9bFtjLTFdO2xbYy0xXT1sW3BdLGxbcF09VCxwPWEodCxlLHUsYy0xLG8sbCxkKTtmb3IodmFyIHc9ZiooYy0xKSxNPWYqcCxrPTA7Zj5rOysraywrK3csKytNKXt2YXIgQT1vW3ddO29bd109b1tNXSxvW01dPUF9dmFyIFQ9bFtjLTFdO2lmKGxbYy0xXT1sW3BdLGxbcF09VCxwPmgpe2ZvcihjPXAtMTtjPnUmJm9bZiooYy0xKStlXT09PWQ7KWMtPTE7Yys9MX1lbHNle2lmKCEoaD5wKSlicmVhaztmb3IodT1wKzE7Yz51JiZvW2YqdStlXT09PWQ7KXUrPTF9fXJldHVybiBhKHQsZSxyLGgsbyxsLG9bZipoK2VdKX1lLmV4cG9ydHM9aTt2YXIgbz10KCIuL3BhcnRpdGlvbiIpLGE9bygibG88cDAiLFsicDAiXSkscz04fSx7Ii4vcGFydGl0aW9uIjo5OH1dLDk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj0iYWJjZGVmIi5zcGxpdCgiIikuY29uY2F0KGUpLG49W107cmV0dXJuIHQuaW5kZXhPZigibG8iKT49MCYmbi5wdXNoKCJsbz1lW2srbl0iKSx0LmluZGV4T2YoImhpIik+PTAmJm4ucHVzaCgiaGk9ZVtrK29dIiksci5wdXNoKGkucmVwbGFjZSgiXyIsbi5qb2luKCkpLnJlcGxhY2UoIiQiLHQpKSxGdW5jdGlvbi5hcHBseSh2b2lkIDAscil9ZS5leHBvcnRzPW47dmFyIGk9ImZvcih2YXIgaj0yKmEsaz1qKmMsbD1rLG09YyxuPWIsbz1hK2IscD1jO2Q+cDsrK3Asays9ail7dmFyIF87aWYoJClpZihtPT09cCltKz0xLGwrPWo7ZWxzZXtmb3IodmFyIHM9MDtqPnM7KytzKXt2YXIgdD1lW2src107ZVtrK3NdPWVbbF0sZVtsKytdPXR9dmFyIHU9ZltwXTtmW3BdPWZbbV0sZlttKytdPXV9fXJldHVybiBtIn0se31dLDk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXs0KmY+PWU/aSgwLGUtMSx0KTpoKDAsZS0xLHQpfWZ1bmN0aW9uIGkodCxlLHIpe2Zvcih2YXIgbj0yKih0KzEpLGk9dCsxO2U+PWk7KytpKXtmb3IodmFyIG89cltuKytdLGE9cltuKytdLHM9aSxsPW4tMjtzLS0gPnQ7KXt2YXIgdT1yW2wtMl0sYz1yW2wtMV07aWYobz51KWJyZWFrO2lmKHU9PT1vJiZhPmMpYnJlYWs7cltsXT11LHJbbCsxXT1jLGwtPTJ9cltsXT1vLHJbbCsxXT1hfX1mdW5jdGlvbiBvKHQsZSxyKXt0Kj0yLGUqPTI7dmFyIG49clt0XSxpPXJbdCsxXTtyW3RdPXJbZV0sclt0KzFdPXJbZSsxXSxyW2VdPW4scltlKzFdPWl9ZnVuY3Rpb24gYSh0LGUscil7dCo9MixlKj0yLHJbdF09cltlXSxyW3QrMV09cltlKzFdfWZ1bmN0aW9uIHModCxlLHIsbil7dCo9MixlKj0yLHIqPTI7dmFyIGk9blt0XSxvPW5bdCsxXTtuW3RdPW5bZV0sblt0KzFdPW5bZSsxXSxuW2VdPW5bcl0sbltlKzFdPW5bcisxXSxuW3JdPWksbltyKzFdPW99ZnVuY3Rpb24gbCh0LGUscixuLGkpe3QqPTIsZSo9MixpW3RdPWlbZV0saVtlXT1yLGlbdCsxXT1pW2UrMV0saVtlKzFdPW59ZnVuY3Rpb24gdSh0LGUscil7dCo9MixlKj0yO3ZhciBuPXJbdF0saT1yW2VdO3JldHVybiBpPm4/ITE6bj09PWk/clt0KzFdPnJbZSsxXTohMH1mdW5jdGlvbiBjKHQsZSxyLG4pe3QqPTI7dmFyIGk9blt0XTtyZXR1cm4gZT5pPyEwOmk9PT1lP25bdCsxXTxyOiExfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPShlLXQrMSkvNnwwLHA9dCtuLGQ9ZS1uLG09dCtlPj4xLGc9bS1uLHY9bStuLHk9cCxiPWcseD1tLF89dix3PWQsTT10KzEsaz1lLTEsQT0wO3UoeSxiLHIpJiYoQT15LHk9YixiPUEpLHUoXyx3LHIpJiYoQT1fLF89dyx3PUEpLHUoeSx4LHIpJiYoQT15LHk9eCx4PUEpLHUoYix4LHIpJiYoQT1iLGI9eCx4PUEpLHUoeSxfLHIpJiYoQT15LHk9XyxfPUEpLHUoeCxfLHIpJiYoQT14LHg9XyxfPUEpLHUoYix3LHIpJiYoQT1iLGI9dyx3PUEpLHUoYix4LHIpJiYoQT1iLGI9eCx4PUEpLHUoXyx3LHIpJiYoQT1fLF89dyx3PUEpO2Zvcih2YXIgVD1yWzIqYl0sRT1yWzIqYisxXSxTPXJbMipfXSxMPXJbMipfKzFdLHo9Mip5LEk9Mip4LFA9Mip3LEM9MipwLFI9MiptLGo9MipkLEQ9MDsyPkQ7KytEKXt2YXIgTz1yW3orRF0sRj1yW0krRF0sTj1yW1ArRF07cltDK0RdPU8scltSK0RdPUYscltqK0RdPU59YShnLHQsciksYSh2LGUscik7Zm9yKHZhciBCPU07az49QjsrK0IpaWYoYyhCLFQsRSxyKSlCIT09TSYmbyhCLE0sciksKytNO2Vsc2UgaWYoIWMoQixTLEwscikpZm9yKDs7KXtpZihjKGssUyxMLHIpKXtjKGssVCxFLHIpPyhzKEIsTSxrLHIpLCsrTSwtLWspOihvKEIsayxyKSwtLWspO2JyZWFrfWlmKC0tazxCKWJyZWFrfWwodCxNLTEsVCxFLHIpLGwoZSxrKzEsUyxMLHIpLGY+PU0tMi10P2kodCxNLTIscik6aCh0LE0tMixyKSxmPj1lLShrKzIpP2koaysyLGUscik6aChrKzIsZSxyKSxmPj1rLU0/aShNLGsscik6aChNLGsscil9ZS5leHBvcnRzPW47dmFyIGY9MzJ9LHt9XSwxMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT1oLm5leHRQb3cyKHQpO20ubGVuZ3RoPGUmJihjLmZyZWUobSksbT1jLm1hbGxvY0ludDMyKGUpKSxnLmxlbmd0aDxlJiYoYy5mcmVlKGcpLGc9Yy5tYWxsb2NJbnQzMihlKSksdi5sZW5ndGg8ZSYmKGMuZnJlZSh2KSx2PWMubWFsbG9jSW50MzIoZSkpLHkubGVuZ3RoPGUmJihjLmZyZWUoeSkseT1jLm1hbGxvY0ludDMyKGUpKSxiLmxlbmd0aDxlJiYoYy5mcmVlKGIpLGI9Yy5tYWxsb2NJbnQzMihlKSkseC5sZW5ndGg8ZSYmKGMuZnJlZSh4KSx4PWMubWFsbG9jSW50MzIoZSkpO3ZhciByPTgqZTtfLmxlbmd0aDxyJiYoYy5mcmVlKF8pLF89Yy5tYWxsb2NEb3VibGUocikpfWZ1bmN0aW9uIGkodCxlLHIsbil7dmFyIGk9ZVtuXSxvPXRbci0xXTt0W2ldPW8sZVtvXT1pfWZ1bmN0aW9uIG8odCxlLHIsbil7dFtyXT1uLGVbbl09cn1mdW5jdGlvbiBhKHQsZSxyLG4sYSxzLGwsdSxjLGgpe2Zvcih2YXIgZD0wLGI9Mip0LHg9dC0xLHc9Yi0xLE09cjtuPk07KytNKXt2YXIgaz1zW01dLEE9YipNO19bZCsrXT1hW0EreF0sX1tkKytdPS0oaysxKSxfW2QrK109YVtBK3ddLF9bZCsrXT1rfWZvcih2YXIgTT1sO3U+TTsrK00pe3ZhciBrPWhbTV0rcCxUPWIqTTtfW2QrK109Y1tUK3hdLF9bZCsrXT0tayxfW2QrK109Y1tUK3ddLF9bZCsrXT1rfXZhciBFPWQ+Pj4xO2YoXyxFKTtmb3IodmFyIFM9MCxMPTAsTT0wO0U+TTsrK00pe3ZhciB6PTB8X1syKk0rMV07aWYoej49cCl6PXotcHwwLGkodix5LEwtLSx6KTtlbHNlIGlmKHo+PTApaShtLGcsUy0tLHopO2Vsc2UgaWYoLXA+PXope3o9LXotcHwwO2Zvcih2YXIgST0wO1M+STsrK0kpe3ZhciBQPWUobVtJXSx6KTtpZih2b2lkIDAhPT1QKXJldHVybiBQfW8odix5LEwrKyx6KX1lbHNle3o9LXotMXwwO2Zvcih2YXIgST0wO0w+STsrK0kpe3ZhciBQPWUoeix2W0ldKTtpZih2b2lkIDAhPT1QKXJldHVybiBQfW8obSxnLFMrKyx6KX19fWZ1bmN0aW9uIHModCxlLHIsbixhLHMsbCx1LGMsaCl7Zm9yKHZhciBwPTAsZD0yKnQsdz10LTEsTT1kLTEsaz1yO24+azsrK2spe3ZhciBBPXNba10rMTw8MSxUPWQqaztfW3ArK109YVtUK3ddLF9bcCsrXT0tQSxfW3ArK109YVtUK01dLF9bcCsrXT1BfWZvcih2YXIgaz1sO3U+azsrK2spe3ZhciBBPWhba10rMTw8MSxFPWQqaztfW3ArK109Y1tFK3ddLF9bcCsrXT0xfC1BLF9bcCsrXT1jW0UrTV0sX1twKytdPTF8QX12YXIgUz1wPj4+MTtmKF8sUyk7Zm9yKHZhciBMPTAsej0wLEk9MCxrPTA7Uz5rOysrayl7dmFyIFA9MHxfWzIqaysxXSxDPTEmUDtpZihTLTE+ayYmUD4+MT09PV9bMiprKzNdPj4xJiYoQz0yLGsrPTEpLDA+UCl7Zm9yKHZhciBSPS0oUD4+MSktMSxqPTA7ST5qOysrail7dmFyIEQ9ZShiW2pdLFIpO2lmKHZvaWQgMCE9PUQpcmV0dXJuIER9aWYoMCE9PUMpZm9yKHZhciBqPTA7TD5qOysrail7dmFyIEQ9ZShtW2pdLFIpO2lmKHZvaWQgMCE9PUQpcmV0dXJuIER9aWYoMSE9PUMpZm9yKHZhciBqPTA7ej5qOysrail7dmFyIEQ9ZSh2W2pdLFIpO2lmKHZvaWQgMCE9PUQpcmV0dXJuIER9MD09PUM/byhtLGcsTCsrLFIpOjE9PT1DP28odix5LHorKyxSKToyPT09QyYmbyhiLHgsSSsrLFIpfWVsc2V7dmFyIFI9KFA+PjEpLTE7MD09PUM/aShtLGcsTC0tLFIpOjE9PT1DP2kodix5LHotLSxSKToyPT09QyYmaShiLHgsSS0tLFIpfX19ZnVuY3Rpb24gbCh0LGUscixuLGEscyxsLHUsYyxoLGQsdil7dmFyIHk9MCxiPTIqdCx4PWUsdz1lK3QsTT0xLGs9MTtuP2s9cDpNPXA7Zm9yKHZhciBBPWE7cz5BOysrQSl7dmFyIFQ9QStNLEU9YipBO19beSsrXT1sW0UreF0sX1t5KytdPS1ULF9beSsrXT1sW0Urd10sX1t5KytdPVR9Zm9yKHZhciBBPWM7aD5BOysrQSl7dmFyIFQ9QStrLFM9YipBO19beSsrXT1kW1MreF0sX1t5KytdPS1UfXZhciBMPXk+Pj4xO2YoXyxMKTtmb3IodmFyIHo9MCxBPTA7TD5BOysrQSl7dmFyIEk9MHxfWzIqQSsxXTtpZigwPkkpe3ZhciBUPS1JLFA9ITE7aWYoVD49cD8oUD0hbixULT1wKTooUD0hIW4sVC09MSksUClvKG0sZyx6KyssVCk7ZWxzZXt2YXIgQz12W1RdLFI9YipULGo9ZFtSK2UrMV0sRD1kW1IrZSsxK3RdO3Q6Zm9yKHZhciBPPTA7ej5POysrTyl7dmFyIEY9bVtPXSxOPWIqRjtpZighKEQ8bFtOK2UrMV18fGxbTitlKzErdF08aikpe2Zvcih2YXIgQj1lKzI7dD5COysrQilpZihkW1IrQit0XTxsW04rQl18fGxbTitCK3RdPGRbUitCXSljb250aW51ZSB0O3ZhciBVLFY9dVtGXTtpZihVPW4/cihDLFYpOnIoVixDKSx2b2lkIDAhPT1VKXJldHVybiBVfX19fWVsc2UgaShtLGcsei0tLEktTSl9fWZ1bmN0aW9uIHUodCxlLHIsbixpLG8sYSxzLGwsdSxjKXtmb3IodmFyIGg9MCxkPTIqdCxnPWUsdj1lK3QseT1uO2k+eTsrK3kpe3ZhciBiPXkrcCx4PWQqeTtfW2grK109b1t4K2ddLF9baCsrXT0tYixfW2grK109b1t4K3ZdLF9baCsrXT1ifWZvcih2YXIgeT1zO2w+eTsrK3kpe3ZhciBiPXkrMSx3PWQqeTtfW2grK109dVt3K2ddLF9baCsrXT0tYn12YXIgTT1oPj4+MTtmKF8sTSk7Zm9yKHZhciBrPTAseT0wO00+eTsrK3kpe3ZhciBBPTB8X1syKnkrMV07aWYoMD5BKXt2YXIgYj0tQTtpZihiPj1wKW1baysrXT1iLXA7ZWxzZXtiLT0xO3ZhciBUPWNbYl0sRT1kKmIsUz11W0UrZSsxXSxMPXVbRStlKzErdF07dDpmb3IodmFyIHo9MDtrPno7Kyt6KXt2YXIgST1tW3pdLFA9YVtJXTtpZihQPT09VClicmVhazt2YXIgQz1kKkk7aWYoIShMPG9bQytlKzFdfHxvW0MrZSsxK3RdPFMpKXtmb3IodmFyIFI9ZSsyO3Q+UjsrK1IpaWYodVtFK1IrdF08b1tDK1JdfHxvW0MrUit0XTx1W0UrUl0pY29udGludWUgdDt2YXIgaj1yKFAsVCk7aWYodm9pZCAwIT09ailyZXR1cm4gan19fX1lbHNle2Zvcih2YXIgYj1BLXAsej1rLTE7ej49MDstLXopaWYobVt6XT09PWIpe2Zvcih2YXIgUj16KzE7az5SOysrUiltW1ItMV09bVtSXTticmVha30tLWt9fX1lLmV4cG9ydHM9e2luaXQ6bixzd2VlcEJpcGFydGl0ZTphLHN3ZWVwQ29tcGxldGU6cyxzY2FuQmlwYXJ0aXRlOmwsc2NhbkNvbXBsZXRlOnV9O3ZhciBjPXQoInR5cGVkYXJyYXktcG9vbCIpLGg9dCgiYml0LXR3aWRkbGUiKSxmPXQoIi4vc29ydCIpLHA9MTw8MjgsZD0xMDI0LG09Yy5tYWxsb2NJbnQzMihkKSxnPWMubWFsbG9jSW50MzIoZCksdj1jLm1hbGxvY0ludDMyKGQpLHk9Yy5tYWxsb2NJbnQzMihkKSxiPWMubWFsbG9jSW50MzIoZCkseD1jLm1hbGxvY0ludDMyKGQpLF89Yy5tYWxsb2NEb3VibGUoOCpkKX0seyIuL3NvcnQiOjk5LCJiaXQtdHdpZGRsZSI6NTEsInR5cGVkYXJyYXktcG9vbCI6NDgxfV0sMTAxOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCxlKXtyZXR1cm4gcFswXT10LHBbMV09ZSxmWzBdfWZ1bmN0aW9uIG4odCl7cmV0dXJuIGZbMF09dCxwWzBdfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGZbMF09dCxwWzFdfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gcFsxXT10LHBbMF09ZSxmWzBdfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGZbMF09dCxwWzFdfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZbMF09dCxwWzBdfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gZC53cml0ZVVJbnQzMkxFKHQsMCwhMCksZC53cml0ZVVJbnQzMkxFKGUsNCwhMCksZC5yZWFkRG91YmxlTEUoMCwhMCl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gZC53cml0ZURvdWJsZUxFKHQsMCwhMCksZC5yZWFkVUludDMyTEUoMCwhMCl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gZC53cml0ZURvdWJsZUxFKHQsMCwhMCksZC5yZWFkVUludDMyTEUoNCwhMCl9dmFyIGg9ITE7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBGbG9hdDY0QXJyYXkpe3ZhciBmPW5ldyBGbG9hdDY0QXJyYXkoMSkscD1uZXcgVWludDMyQXJyYXkoZi5idWZmZXIpO2ZbMF09MSxoPSEwLDEwNzI2OTMyNDg9PT1wWzFdPyhlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZbMF09dCxbcFswXSxwWzFdXX0sZS5leHBvcnRzLnBhY2s9cixlLmV4cG9ydHMubG89bixlLmV4cG9ydHMuaGk9aSk6MTA3MjY5MzI0OD09PXBbMF0/KGUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZlswXT10LFtwWzFdLHBbMF1dfSxlLmV4cG9ydHMucGFjaz1vLGUuZXhwb3J0cy5sbz1hLGUuZXhwb3J0cy5oaT1zKTpoPSExfWlmKCFoKXt2YXIgZD1uZXcgdCg4KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGQud3JpdGVEb3VibGVMRSh0LDAsITApLFtkLnJlYWRVSW50MzJMRSgwLCEwKSxkLnJlYWRVSW50MzJMRSg0LCEwKV19LGUuZXhwb3J0cy5wYWNrPWwsZS5leHBvcnRzLmxvPXUsZS5leHBvcnRzLmhpPWN9ZS5leHBvcnRzLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGUuZXhwb3J0cy5oaSh0KT4+PjMxfSxlLmV4cG9ydHMuZXhwb25lbnQ9ZnVuY3Rpb24odCl7dmFyIHI9ZS5leHBvcnRzLmhpKHQpO3JldHVybihyPDwxPj4+MjEpLTEwMjN9LGUuZXhwb3J0cy5mcmFjdGlvbj1mdW5jdGlvbih0KXt2YXIgcj1lLmV4cG9ydHMubG8odCksbj1lLmV4cG9ydHMuaGkodCksaT0xMDQ4NTc1Jm47cmV0dXJuIDIxNDY0MzUwNzImbiYmKGkrPTE8PDIwKSxbcixpXX0sZS5leHBvcnRzLmRlbm9ybWFsaXplZD1mdW5jdGlvbih0KXt2YXIgcj1lLmV4cG9ydHMuaGkodCk7cmV0dXJuISgyMTQ2NDM1MDcyJnIpfX0pLmNhbGwodGhpcyx0KCJidWZmZXIiKS5CdWZmZXIpfSx7YnVmZmVyOjUyfV0sMTAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZihpc05hTih0KXx8aXNOYU4oZSkpcmV0dXJuIE5hTjtpZih0PT09ZSlyZXR1cm4gdDtpZigwPT09dClyZXR1cm4gMD5lPy1vOm87dmFyIHI9aS5oaSh0KSxuPWkubG8odCk7cmV0dXJuIGU+dD09dD4wP249PT1hPyhyKz0xLG49MCk6bis9MTowPT09bj8obj1hLHItPTEpOm4tPTEsaS5wYWNrKG4scil9dmFyIGk9dCgiZG91YmxlLWJpdHMiKSxvPU1hdGgucG93KDIsLTEwNzQpLGE9LTE+Pj4wO2UuZXhwb3J0cz1ufSx7ImRvdWJsZS1iaXRzIjoxMDF9XSwxMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxvPTA7cj5vOysrbyluW29dPWkodFtvXSxlW29dKTtyZXR1cm4gbn12YXIgaT10KCJiaWctcmF0L2FkZCIpO2UuZXhwb3J0cz1ufSx7ImJpZy1yYXQvYWRkIjo3N31dLDEwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcillW3JdPWkodFtyXSk7cmV0dXJuIGV9ZS5leHBvcnRzPW47dmFyIGk9dCgiYmlnLXJhdCIpfSx7ImJpZy1yYXQiOjgwfV0sMTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9aShlKSxuPXQubGVuZ3RoLGE9bmV3IEFycmF5KG4pLHM9MDtuPnM7KytzKWFbc109byh0W3NdLHIpO3JldHVybiBhfXZhciBpPXQoImJpZy1yYXQiKSxvPXQoImJpZy1yYXQvbXVsIik7ZS5leHBvcnRzPW59LHsiYmlnLXJhdCI6ODAsImJpZy1yYXQvbXVsIjo4OX1dLDEwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLG89MDtyPm87KytvKW5bb109aSh0W29dLGVbb10pO3JldHVybiBufXZhciBpPXQoImJpZy1yYXQvc3ViIik7ZS5leHBvcnRzPW59LHsiYmlnLXJhdC9zdWIiOjkyfV0sMTA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7Zm9yKHZhciBpPTA7Mj5pOysraSl7dmFyIG89dFtpXSxhPWVbaV0scz1NYXRoLm1pbihvLGEpLGw9TWF0aC5tYXgobyxhKSx1PXJbaV0sYz1uW2ldLGg9TWF0aC5taW4odSxjKSxmPU1hdGgubWF4KHUsYyk7aWYocz5mfHxoPmwpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gaSh0LGUscixpKXt2YXIgYT1vKHQscixpKSxzPW8oZSxyLGkpO2lmKGE+MCYmcz4wfHwwPmEmJjA+cylyZXR1cm4hMTt2YXIgbD1vKHIsdCxlKSx1PW8oaSx0LGUpO3JldHVybiBsPjAmJnU+MHx8MD5sJiYwPnU/ITE6MD09PWEmJjA9PT1zJiYwPT09bCYmMD09PXU/bih0LGUscixpKTohMH1lLmV4cG9ydHM9aTt2YXIgbz10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjQ2Mn1dLDEwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsidXNlIHJlc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucm9vdHM9bmV3IEFycmF5KHQpLHRoaXMucmFua3M9bmV3IEFycmF5KHQpO2Zvcih2YXIgZT0wO3Q+ZTsrK2UpdGhpcy5yb290c1tlXT1lLHRoaXMucmFua3NbZV09MH1lLmV4cG9ydHM9bjt2YXIgaT1uLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdHMubGVuZ3RofX0pLGkubWFrZVNldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucm9vdHMubGVuZ3RoO3JldHVybiB0aGlzLnJvb3RzLnB1c2godCksdGhpcy5yYW5rcy5wdXNoKDApLHR9LGkuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dCxyPXRoaXMucm9vdHM7clt0XSE9PXQ7KXQ9clt0XTtmb3IoO3JbZV0hPT10Oyl7dmFyIG49cltlXTtyW2VdPXQsZT1ufXJldHVybiB0fSxpLmxpbms9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmZpbmQodCksbj10aGlzLmZpbmQoZSk7aWYociE9PW4pe3ZhciBpPXRoaXMucmFua3Msbz10aGlzLnJvb3RzLGE9aVtyXSxzPWlbbl07cz5hP29bcl09bjphPnM/b1tuXT1yOihvW25dPXIsKytpW3JdKX19fSx7fV0sMTA5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe3ZhciByPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUocixuLGksbyl7ZnVuY3Rpb24gcyhyLGkpe2lmKG51bGw9PT1yKXJldHVybiBudWxsO2lmKDA9PWkpcmV0dXJuIHI7dmFyIGwsZjtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7aWYoZS5fX2lzQXJyYXkocikpbD1bXTtlbHNlIGlmKGUuX19pc1JlZ0V4cChyKSlsPW5ldyBSZWdFeHAoci5zb3VyY2UsYShyKSksci5sYXN0SW5kZXgmJihsLmxhc3RJbmRleD1yLmxhc3RJbmRleCk7ZWxzZSBpZihlLl9faXNEYXRlKHIpKWw9bmV3IERhdGUoci5nZXRUaW1lKCkpO2Vsc2V7aWYoaCYmdC5pc0J1ZmZlcihyKSlyZXR1cm4gbD1uZXcgdChyLmxlbmd0aCksci5jb3B5KGwpLGw7InVuZGVmaW5lZCI9PXR5cGVvZiBvPyhmPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKSxsPU9iamVjdC5jcmVhdGUoZikpOihsPU9iamVjdC5jcmVhdGUobyksZj1vKX1pZihuKXt2YXIgcD11LmluZGV4T2Yocik7aWYoLTEhPXApcmV0dXJuIGNbcF07dS5wdXNoKHIpLGMucHVzaChsKX1mb3IodmFyIGQgaW4gcil7dmFyIG07ZiYmKG09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihmLGQpKSxtJiZudWxsPT1tLnNldHx8KGxbZF09cyhyW2RdLGktMSkpfXJldHVybiBsfXZhciBsOyJvYmplY3QiPT10eXBlb2YgbiYmKGk9bi5kZXB0aCxvPW4ucHJvdG90eXBlLGw9bi5maWx0ZXIsbj1uLmNpcmN1bGFyKTt2YXIgdT1bXSxjPVtdLGg9InVuZGVmaW5lZCIhPXR5cGVvZiB0O3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgbiYmKG49ITApLCJ1bmRlZmluZWQiPT10eXBlb2YgaSYmKGk9MS8wKSxzKHIsaSl9ZnVuY3Rpb24gcih0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIG4odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYiW29iamVjdCBEYXRlXSI9PT1yKHQpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYiW29iamVjdCBBcnJheV0iPT09cih0KX1mdW5jdGlvbiBvKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmIltvYmplY3QgUmVnRXhwXSI9PT1yKHQpfWZ1bmN0aW9uIGEodCl7dmFyIGU9IiI7cmV0dXJuIHQuZ2xvYmFsJiYoZSs9ImciKSx0Lmlnbm9yZUNhc2UmJihlKz0iaSIpLHQubXVsdGlsaW5lJiYoZSs9Im0iKSxlfXJldHVybiBlLmNsb25lUHJvdG90eXBlPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT10KXJldHVybiBudWxsO3ZhciBlPWZ1bmN0aW9uKCl7fTtyZXR1cm4gZS5wcm90b3R5cGU9dCxuZXcgZX0sZS5fX29ialRvU3RyPXIsZS5fX2lzRGF0ZT1uLGUuX19pc0FycmF5PWksZS5fX2lzUmVnRXhwPW8sZS5fX2dldFJlZ0V4cEZsYWdzPWEsZX0oKTsib2JqZWN0Ij09dHlwZW9mIGUmJmUuZXhwb3J0cyYmKGUuZXhwb3J0cz1yKX0pLmNhbGwodGhpcyx0KCJidWZmZXIiKS5CdWZmZXIpfSx7YnVmZmVyOjUyfV0sMTEwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtqZXQ6W3tpbmRleDowLHJnYjpbMCwwLDEzMV19LHtpbmRleDouMTI1LHJnYjpbMCw2MCwxNzBdfSx7aW5kZXg6LjM3NSxyZ2I6WzUsMjU1LDI1NV19LHtpbmRleDouNjI1LHJnYjpbMjU1LDI1NSwwXX0se2luZGV4Oi44NzUscmdiOlsyNTAsMCwwXX0se2luZGV4OjEscmdiOlsxMjgsMCwwXX1dLGhzdjpbe2luZGV4OjAscmdiOlsyNTUsMCwwXX0se2luZGV4Oi4xNjkscmdiOlsyNTMsMjU1LDJdfSx7aW5kZXg6LjE3MyxyZ2I6WzI0NywyNTUsMl19LHtpbmRleDouMzM3LHJnYjpbMCwyNTIsNF19LHtpbmRleDouMzQxLHJnYjpbMCwyNTIsMTBdfSx7aW5kZXg6LjUwNixyZ2I6WzEsMjQ5LDI1NV19LHtpbmRleDouNjcxLHJnYjpbMiwwLDI1M119LHtpbmRleDouNjc1LHJnYjpbOCwwLDI1M119LHtpbmRleDouODM5LHJnYjpbMjU1LDAsMjUxXX0se2luZGV4Oi44NDMscmdiOlsyNTUsMCwyNDVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDZdfV0saG90Olt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4zLHJnYjpbMjMwLDAsMF19LHtpbmRleDouNixyZ2I6WzI1NSwyMTAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0sY29vbDpbe2luZGV4OjAscmdiOlswLDI1NSwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDI1NV19XSxzcHJpbmc6W3tpbmRleDowLHJnYjpbMjU1LDAsMjU1XX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDBdfV0sc3VtbWVyOlt7aW5kZXg6MCxyZ2I6WzAsMTI4LDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwxMDJdfV0sYXV0dW1uOlt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMF19XSx3aW50ZXI6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDoxLHJnYjpbMCwyNTUsMTI4XX1dLGJvbmU6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjM3NixyZ2I6Wzg0LDg0LDExNl19LHtpbmRleDouNzUzLHJnYjpbMTY5LDIwMCwyMDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGNvcHBlcjpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouODA0LHJnYjpbMjU1LDE2MCwxMDJdfSx7aW5kZXg6MSxyZ2I6WzI1NSwxOTksMTI3XX1dLGdyZXlzOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSx5aWduYnU6W3tpbmRleDowLHJnYjpbOCwyOSw4OF19LHtpbmRleDouMTI1LHJnYjpbMzcsNTIsMTQ4XX0se2luZGV4Oi4yNSxyZ2I6WzM0LDk0LDE2OF19LHtpbmRleDouMzc1LHJnYjpbMjksMTQ1LDE5Ml19LHtpbmRleDouNSxyZ2I6WzY1LDE4MiwxOTZdfSx7aW5kZXg6LjYyNSxyZ2I6WzEyNywyMDUsMTg3XX0se2luZGV4Oi43NSxyZ2I6WzE5OSwyMzMsMTgwXX0se2luZGV4Oi44NzUscmdiOlsyMzcsMjQ4LDIxN119LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyMTddfV0sZ3JlZW5zOlt7aW5kZXg6MCxyZ2I6WzAsNjgsMjddfSx7aW5kZXg6LjEyNSxyZ2I6WzAsMTA5LDQ0XX0se2luZGV4Oi4yNSxyZ2I6WzM1LDEzOSw2OV19LHtpbmRleDouMzc1LHJnYjpbNjUsMTcxLDkzXX0se2luZGV4Oi41LHJnYjpbMTE2LDE5NiwxMThdfSx7aW5kZXg6LjYyNSxyZ2I6WzE2MSwyMTcsMTU1XX0se2luZGV4Oi43NSxyZ2I6WzE5OSwyMzMsMTkyXX0se2luZGV4Oi44NzUscmdiOlsyMjksMjQ1LDIyNF19LHtpbmRleDoxLHJnYjpbMjQ3LDI1MiwyNDVdfV0seWlvcnJkOlt7aW5kZXg6MCxyZ2I6WzEyOCwwLDM4XX0se2luZGV4Oi4xMjUscmdiOlsxODksMCwzOF19LHtpbmRleDouMjUscmdiOlsyMjcsMjYsMjhdfSx7aW5kZXg6LjM3NSxyZ2I6WzI1Miw3OCw0Ml19LHtpbmRleDouNSxyZ2I6WzI1MywxNDEsNjBdfSx7aW5kZXg6LjYyNSxyZ2I6WzI1NCwxNzgsNzZdfSx7aW5kZXg6Ljc1LHJnYjpbMjU0LDIxNywxMThdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1NSwyMzcsMTYwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDIwNF19XSxibHVlcmVkOlt7aW5kZXg6MCxyZ2I6WzAsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDBdfV0scmRidTpbe2luZGV4OjAscmdiOls1LDEwLDE3Ml19LHtpbmRleDouMzUscmdiOlsxMDYsMTM3LDI0N119LHtpbmRleDouNSxyZ2I6WzE5MCwxOTAsMTkwXX0se2luZGV4Oi42LHJnYjpbMjIwLDE3MCwxMzJdfSx7aW5kZXg6LjcscmdiOlsyMzAsMTQ1LDkwXX0se2luZGV4OjEscmdiOlsxNzgsMTAsMjhdfV0scGljbmljOlt7aW5kZXg6MCxyZ2I6WzAsMCwyNTVdfSx7aW5kZXg6LjEscmdiOls1MSwxNTMsMjU1XX0se2luZGV4Oi4yLHJnYjpbMTAyLDIwNCwyNTVdfSx7aW5kZXg6LjMscmdiOlsxNTMsMjA0LDI1NV19LHtpbmRleDouNCxyZ2I6WzIwNCwyMDQsMjU1XX0se2luZGV4Oi41LHJnYjpbMjU1LDI1NSwyNTVdfSx7aW5kZXg6LjYscmdiOlsyNTUsMjA0LDI1NV19LHtpbmRleDouNyxyZ2I6WzI1NSwxNTMsMjU1XX0se2luZGV4Oi44LHJnYjpbMjU1LDEwMiwyMDRdfSx7aW5kZXg6LjkscmdiOlsyNTUsMTAyLDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxyYWluYm93Olt7aW5kZXg6MCxyZ2I6WzE1MCwwLDkwXX0se2luZGV4Oi4xMjUscmdiOlswLDAsMjAwXX0se2luZGV4Oi4yNSxyZ2I6WzAsMjUsMjU1XX0se2luZGV4Oi4zNzUscmdiOlswLDE1MiwyNTVdfSx7aW5kZXg6LjUscmdiOls0NCwyNTUsMTUwXX0se2luZGV4Oi42MjUscmdiOlsxNTEsMjU1LDBdfSx7aW5kZXg6Ljc1LHJnYjpbMjU1LDIzNCwwXX0se2luZGV4Oi44NzUscmdiOlsyNTUsMTExLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDBdfV0scG9ydGxhbmQ6W3tpbmRleDowLHJnYjpbMTIsNTEsMTMxXX0se2luZGV4Oi4yNSxyZ2I6WzEwLDEzNiwxODZdfSx7aW5kZXg6LjUscmdiOlsyNDIsMjExLDU2XX0se2luZGV4Oi43NSxyZ2I6WzI0MiwxNDMsNTZdfSx7aW5kZXg6MSxyZ2I6WzIxNywzMCwzMF19XSxibGFja2JvZHk6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjIscmdiOlsyMzAsMCwwXX0se2luZGV4Oi40LHJnYjpbMjMwLDIxMCwwXX0se2luZGV4Oi43LHJnYjpbMjU1LDI1NSwyNTVdfSx7aW5kZXg6MSxyZ2I6WzE2MCwyMDAsMjU1XX1dLGVhcnRoOlt7aW5kZXg6MCxyZ2I6WzAsMCwxMzBdfSx7aW5kZXg6LjEscmdiOlswLDE4MCwxODBdfSx7aW5kZXg6LjIscmdiOls0MCwyMTAsNDBdfSx7aW5kZXg6LjQscmdiOlsyMzAsMjMwLDUwXX0se2luZGV4Oi42LHJnYjpbMTIwLDcwLDIwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxlbGVjdHJpYzpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMTUscmdiOlszMCwwLDEwMF19LHtpbmRleDouNCxyZ2I6WzEyMCwwLDEwMF19LHtpbmRleDouNixyZ2I6WzE2MCw5MCwwXX0se2luZGV4Oi44LHJnYjpbMjMwLDIwMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjUwLDIyMF19XSxhbHBoYTpbe2luZGV4OjAscmdiOlsyNTUsMjU1LDI1NSwwXX0se2luZGV4OjAscmdiOlsyNTUsMjU1LDI1NSwxXX1dfX0se31dLDExMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZSxyPSIjIixuPTA7Mz5uOysrbillPXRbbl0sZT1lLnRvU3RyaW5nKDE2KSxyKz0oIjAwIitlKS5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiByfWZ1bmN0aW9uIGkodCl7cmV0dXJuInJnYmEoIit0LmpvaW4oIiwiKSsiKSJ9dmFyIG89dCgiYXJyYXl0b29scyIpLGE9dCgiY2xvbmUiKSxzPXQoIi4vY29sb3JTY2FsZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixsLHUsYyxoLGYscCxkLG0sZyx2LHksYj1bXSx4PVtdLF89W10sdz1bXTtpZihvLmlzUGxhaW5PYmplY3QodCl8fCh0PXt9KSxkPXQubnNoYWRlc3x8NzIscD10LmZvcm1hdHx8ImhleCIsZj10LmNvbG9ybWFwLGZ8fChmPSJqZXQiKSwic3RyaW5nIj09dHlwZW9mIGYpe2lmKGY9Zi50b0xvd2VyQ2FzZSgpLCFzW2ZdKXRocm93IEVycm9yKGYrIiBub3QgYSBzdXBwb3J0ZWQgY29sb3JzY2FsZSIpO2g9YShzW2ZdKX1lbHNle2lmKCFBcnJheS5pc0FycmF5KGYpKXRocm93IEVycm9yKCJ1bnN1cHBvcnRlZCBjb2xvcm1hcCBvcHRpb24iLGYpO2g9YShmKX1pZihoLmxlbmd0aD5kKXRocm93IG5ldyBFcnJvcihmKyIgbWFwIHJlcXVpcmVzIG5zaGFkZXMgdG8gYmUgYXQgbGVhc3Qgc2l6ZSAiK2gubGVuZ3RoKTtmb3IoZz1BcnJheS5pc0FycmF5KHQuYWxwaGEpPzIhPT10LmFscGhhLmxlbmd0aD9bMSwxXTphKHQuYWxwaGEpOiJudW1iZXIiPT10eXBlb2YgdC5hbHBoYT9bdC5hbHBoYSx0LmFscGhhXTpbMSwxXSxlPWgubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQuaW5kZXgqZCl9KSxnWzBdPDAmJihnWzBdPTApLGdbMV08MCYmKGdbMF09MCksZ1swXT4xJiYoZ1swXT0xKSxnWzFdPjEmJihnWzBdPTEpLHk9MDt5PGUubGVuZ3RoOysreSl2PWhbeV0uaW5kZXgscj1oW3ldLnJnYiw0PT09ci5sZW5ndGgmJnJbM10+PTAmJnJbM108PTF8fChyWzNdPWdbMF0rKGdbMV0tZ1swXSkqdik7Zm9yKHk9MDt5PGUubGVuZ3RoLTE7Kyt5KWM9ZVt5KzFdLWVbeV0sbD1oW3ldLnJnYix1PWhbeSsxXS5yZ2IsYj1iLmNvbmNhdChvLmxpbnNwYWNlKGxbMF0sdVswXSxjKSkseD14LmNvbmNhdChvLmxpbnNwYWNlKGxbMV0sdVsxXSxjKSksXz1fLmNvbmNhdChvLmxpbnNwYWNlKGxbMl0sdVsyXSxjKSksdz13LmNvbmNhdChvLmxpbnNwYWNlKGxbM10sdVszXSxjKSk7cmV0dXJuIGI9Yi5tYXAoTWF0aC5yb3VuZCkseD14Lm1hcChNYXRoLnJvdW5kKSxfPV8ubWFwKE1hdGgucm91bmQpLG09by56aXAoYix4LF8sdyksImhleCI9PT1wJiYobT1tLm1hcChuKSksInJnYmFTdHJpbmciPT09cCYmKG09bS5tYXAoaSkpLG19fSx7Ii4vY29sb3JTY2FsZXMiOjExMCxhcnJheXRvb2xzOjUwLGNsb25lOjEwOX1dLDExMjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gdC1lfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj10Lmxlbmd0aCxpPXQubGVuZ3RoLWUubGVuZ3RoO2lmKGkpcmV0dXJuIGk7c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIHRbMF0tZVswXTtjYXNlIDI6cmV0dXJuIHRbMF0rdFsxXS1lWzBdLWVbMV18fG8odFswXSx0WzFdKS1vKGVbMF0sZVsxXSk7Y2FzZSAzOnZhciBhPXRbMF0rdFsxXSxzPWVbMF0rZVsxXTtpZihpPWErdFsyXS0ocytlWzJdKSlyZXR1cm4gaTt2YXIgbD1vKHRbMF0sdFsxXSksdT1vKGVbMF0sZVsxXSk7cmV0dXJuIG8obCx0WzJdKS1vKHUsZVsyXSl8fG8obCt0WzJdLGEpLW8odStlWzJdLHMpO2Nhc2UgNDp2YXIgYz10WzBdLGg9dFsxXSxmPXRbMl0scD10WzNdLGQ9ZVswXSxtPWVbMV0sZz1lWzJdLHY9ZVszXTtyZXR1cm4gYytoK2YrcC0oZCttK2crdil8fG8oYyxoLGYscCktbyhkLG0sZyx2LGQpfHxvKGMraCxjK2YsYytwLGgrZixoK3AsZitwKS1vKGQrbSxkK2csZCt2LG0rZyxtK3YsZyt2KXx8byhjK2grZixjK2grcCxjK2YrcCxoK2YrcCktbyhkK20rZyxkK20rdixkK2crdixtK2crdik7ZGVmYXVsdDpmb3IodmFyIHk9dC5zbGljZSgpLnNvcnQobiksYj1lLnNsaWNlKCkuc29ydChuKSx4PTA7cj54OysreClpZihpPXlbeF0tYlt4XSlyZXR1cm4gaTtyZXR1cm4gMH19ZS5leHBvcnRzPWk7dmFyIG89TWF0aC5taW59LHt9XSwxMTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTtpZigxPT09ZSlyZXR1cm5bWzBdXTt2YXIgcj10WzBdLmxlbmd0aDtyZXR1cm4gMD09PXI/W106MT09PXI/aSh0KToyPT09cj9vKHQpOmEodCxyKX12YXIgaT10KCIuL2xpYi9jaDFkIiksbz10KCIuL2xpYi9jaDJkIiksYT10KCIuL2xpYi9jaG5kIik7ZS5leHBvcnRzPW59LHsiLi9saWIvY2gxZCI6MTE0LCIuL2xpYi9jaDJkIjoxMTUsIi4vbGliL2NobmQiOjExNn1dLDExNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wLHI9MCxuPTE7bjx0Lmxlbmd0aDsrK24pdFtuXVswXTx0W2VdWzBdJiYoZT1uKSx0W25dWzBdPnRbcl1bMF0mJihyPW4pO3JldHVybiByPmU/W1tlXSxbcl1dOmU+cj9bW3JdLFtlXV06W1tlXV19ZS5leHBvcnRzPW59LHt9XSwxMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT1pKHQpLHI9ZS5sZW5ndGg7aWYoMj49cilyZXR1cm5bXTtmb3IodmFyIG49bmV3IEFycmF5KHIpLG89ZVtyLTFdLGE9MDtyPmE7KythKXt2YXIgcz1lW2FdO25bYV09W28sc10sbz1zfXJldHVybiBufWUuZXhwb3J0cz1uO3ZhciBpPXQoIm1vbm90b25lLWNvbnZleC1odWxsLTJkIil9LHsibW9ub3RvbmUtY29udmV4LWh1bGwtMmQiOjExOH1dLDExNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPGUubGVuZ3RoOysraSluW2ldPXRbZVtpXV07Zm9yKHZhciBvPWUubGVuZ3RoLGk9MDtyPmk7KytpKWUuaW5kZXhPZihpKTwwJiYobltvKytdPXRbaV0pO3JldHVybiBufWZ1bmN0aW9uIGkodCxlKXsKZm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wO3I+aTsrK2kpZm9yKHZhciBvPXRbaV0sYT0wO2E8by5sZW5ndGg7KythKXt2YXIgcz1vW2FdO2lmKG4+cylvW2FdPWVbc107ZWxzZXtzLT1uO2Zvcih2YXIgbD0wO24+bDsrK2wpcz49ZVtsXSYmKHMrPTEpO29bYV09c319cmV0dXJuIHR9ZnVuY3Rpb24gbyh0LGUpe3RyeXtyZXR1cm4gYSh0LCEwKX1jYXRjaChyKXt2YXIgbz1zKHQpO2lmKG8ubGVuZ3RoPD1lKXJldHVybltdO3ZhciBsPW4odCxvKSx1PWEobCwhMCk7cmV0dXJuIGkodSxvKX19ZS5leHBvcnRzPW87dmFyIGE9dCgiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiKSxzPXQoImFmZmluZS1odWxsIil9LHsiYWZmaW5lLWh1bGwiOjExNywiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiOjI0Nn1dLDExNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKzEpLG49MDtuPHQubGVuZ3RoOysrbilyW25dPXRbbl07Zm9yKHZhciBuPTA7bjw9dC5sZW5ndGg7KytuKXtmb3IodmFyIGk9dC5sZW5ndGg7ZT49aTsrK2kpe2Zvcih2YXIgYT1uZXcgQXJyYXkoZSkscz0wO2U+czsrK3MpYVtzXT1NYXRoLnBvdyhpKzEtbixzKTtyW2ldPWF9dmFyIGw9by5hcHBseSh2b2lkIDAscik7aWYobClyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDA9PT1lKXJldHVybltdO2lmKDE9PT1lKXJldHVyblswXTtmb3IodmFyIHI9dFswXS5sZW5ndGgsaT1bdFswXV0sbz1bMF0sYT0xO2U+YTsrK2EpaWYoaS5wdXNoKHRbYV0pLG4oaSxyKSl7aWYoby5wdXNoKGEpLG8ubGVuZ3RoPT09cisxKXJldHVybiBvfWVsc2UgaS5wb3AoKTtyZXR1cm4gb31lLmV4cG9ydHM9aTt2YXIgbz10KCJyb2J1c3Qtb3JpZW50YXRpb24iKX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjQ2Mn1dLDExODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDM+ZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7ZT5uOysrbilyW25dPW47cmV0dXJuIDI9PT1lJiZ0WzBdWzBdPT09dFsxXVswXSYmdFswXVsxXT09PXRbMV1bMV0/WzBdOnJ9Zm9yKHZhciBvPW5ldyBBcnJheShlKSxuPTA7ZT5uOysrbilvW25dPW47by5zb3J0KGZ1bmN0aW9uKGUscil7dmFyIG49dFtlXVswXS10W3JdWzBdO3JldHVybiBuP246dFtlXVsxXS10W3JdWzFdfSk7Zm9yKHZhciBhPVtvWzBdLG9bMV1dLHM9W29bMF0sb1sxXV0sbj0yO2U+bjsrK24pe2Zvcih2YXIgbD1vW25dLHU9dFtsXSxjPWEubGVuZ3RoO2M+MSYmaSh0W2FbYy0yXV0sdFthW2MtMV1dLHUpPD0wOyljLT0xLGEucG9wKCk7Zm9yKGEucHVzaChsKSxjPXMubGVuZ3RoO2M+MSYmaSh0W3NbYy0yXV0sdFtzW2MtMV1dLHUpPj0wOyljLT0xLHMucG9wKCk7cy5wdXNoKGwpfWZvcih2YXIgcj1uZXcgQXJyYXkocy5sZW5ndGgrYS5sZW5ndGgtMiksaD0wLG49MCxmPWEubGVuZ3RoO2Y+bjsrK24pcltoKytdPWFbbl07Zm9yKHZhciBwPXMubGVuZ3RoLTI7cD4wOy0tcClyW2grK109c1twXTtyZXR1cm4gcn1lLmV4cG9ydHM9bjt2YXIgaT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjQ2Mn1dLDExOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17QUZHOiJhZmdoYW4iLEFMQToiXFxiXFx3bGFuZCIsQUxCOiJhbGJhbmlhIixEWkE6ImFsZ2VyaWEiLEFTTToiXig/PS4qYW1lcmljKS4qc2Ftb2EiLEFORDoiYW5kb3JyYSIsQUdPOiJhbmdvbGEiLEFJQToiYW5ndWlsbD9hIixBVEE6ImFudGFyY3RpY2EiLEFURzoiYW50aWd1YSIsQVJHOiJhcmdlbnRpbiIsQVJNOiJhcm1lbmlhIixBQlc6Il4oPyEuKmJvbmFpcmUpLipcXGJhcnViYSIsQVVTOiJhdXN0cmFsaWEiLEFVVDoiXig/IS4qaHVuZ2FyeSkuKmF1c3RyaWF8XFxiYXVzdHJpLipcXGJlbXAiLEFaRToiYXplcmJhaWphbiIsQkhTOiJiYWhhbWFzIixCSFI6ImJhaHJhaW4iLEJHRDoiYmFuZ2xhZGVzaHxeKD89LiplYXN0KS4qcGFraT9zdGFuIixCUkI6ImJhcmJhZG9zIixCTFI6ImJlbGFydXN8YnllbG8iLEJFTDoiXig/IS4qbHV4ZW0pLipiZWxnaXVtIixCTFo6ImJlbGl6ZXxeKD89Lipicml0aXNoKS4qaG9uZHVyYXMiLEJFTjoiYmVuaW58ZGFob21lIixCTVU6ImJlcm11ZGEiLEJUTjoiYmh1dGFuIixCT0w6ImJvbGl2aWEiLEJFUzoiXig/PS4qYm9uYWlyZSkuKmV1c3RhdGl1c3xeKD89LipjYXJpYikuKm5ldGhlcmxhbmRzfFxcYmJlcy4/aXNsYW5kcyIsQklIOiJoZXJ6ZWdvdmluYXxib3NuaWEiLEJXQToiYm90c3dhbmF8YmVjaHVhbmEiLEJWVDoiYm91dmV0IixCUkE6ImJyYXppbCIsSU9UOiJicml0aXNoLj9pbmRpYW4uP29jZWFuIixCUk46ImJydW5laSIsQkdSOiJidWxnYXJpYSIsQkZBOiJidXJraW5hfFxcYmZhc298dXBwZXIuP3ZvbHRhIixCREk6ImJ1cnVuZGkiLEtITToiY2FtYm9kaWF8a2FtcHVjaGVhfGtobWVyIixDTVI6ImNhbWVyb29uIixDQU46ImNhbmFkYSIsQ1BWOiJ2ZXJkZSIsQ1lNOiJjYXltYW4iLENBRjoiXFxiY2VudHJhbC5hZnJpY2FuLnJlcHVibGljIixUQ0Q6IlxcYmNoYWQiLENITDoiXFxiY2hpbGUiLENITjoiXig/IS4qXFxibWFjKSg/IS4qXFxiaG9uZykoPyEuKlxcYnRhaSkuKmNoaW5hIixDWFI6ImNocmlzdG1hcyIsQ0NLOiJcXGJjb2Nvc3xrZWVsaW5nIixDT0w6ImNvbG9tYmlhIixDT006ImNvbW9ybyIsQ09EOiJcXGJkZW0uKmNvbmdvfGNvbmdvLipcXGJkZW18Y29uZ28uKlxcYmRyfFxcYmRyLipjb25nb3xiZWxnaWFuLj9jb25nb3xjb25nby4/ZnJlZS4/c3RhdGV8a2luc2hhc2F8emFpcmV8bC5vcG9sZHZpbGxlfGRyY3xkcm9jfHJkYyIsQ09HOiJeKD8hLipcXGJkZW0pKD8hLipcXGJkcikoPyEuKmtpbnNoYXNhKSg/IS4qemFpcmUpKD8hLipiZWxnKSg/IS4qbC5vcG9sZHZpbGxlKSg/IS4qZnJlZSkuKlxcYmNvbmdvIixDT0s6IlxcYmNvb2siLENSSToiY29zdGEuP3JpY2EiLENJVjoiaXZvaXJlfGl2b3J5IixIUlY6ImNyb2F0aWEiLENVQjoiXFxiY3ViYSIsQ1VXOiJeKD8hLipib25haXJlKS4qXFxiY3VyYShjfFx4ZTcpYW8iLENZUDoiY3lwcnVzIixDWkU6Il4oPz0uKnJlcCkuKmN6ZWNofGN6ZWNoaWF8Ym9oZW1pYSIsQ1NLOiJjemVjaG9zbG92YWtpYSIsRE5LOiJkZW5tYXJrIixESkk6ImRqaWJvdXRpIixETUE6ImRvbWluaWNhKD8hbikiLERPTToiZG9taW5pY2FuLnJlcCIsRUNVOiJlY3VhZG9yIixFR1k6ImVneXB0IixTTFY6ImVsLj9zYWx2YWRvciIsR05ROiJndWluZS4qZXF8ZXEuKmd1aW5lfF4oPz0uKnNwYW4pLipndWluZWEiLEVSSToiZXJpdHJlYSIsRVNUOiJlc3RvbmlhIixFVEg6ImV0aGlvcGlhfGFieXNzaW5pYSIsRkxLOiJmYWxrbGFuZHxtYWx2aW5hcyIsRlJPOiJmYXJvZXxmYWVyb2UiLEZKSToiZmlqaSIsRklOOiJmaW5sYW5kIixGUkE6Il4oPyEuKlxcYmRlcCkoPyEuKm1hcnRpbmlxdWUpLipmcmFuY2V8ZnJlbmNoLj9yZXB1YmxpY3xcXGJnYXVsIixHVUY6Il4oPz0uKmZyZW5jaCkuKmd1aWFuYSIsUFlGOiJmcmVuY2guP3BvbHluZXNpYXx0YWhpdGkiLEFURjoiZnJlbmNoLj9zb3V0aGVybiIsR0FCOiJnYWJvbiIsR01COiJnYW1iaWEiLEdFTzoiXig/IS4qc291dGgpLipnZW9yZ2lhIixERFI6Imdlcm1hbi4/ZGVtb2NyYXRpYy4/cmVwdWJsaWN8ZGVtb2NyYXRpYy4/cmVwdWJsaWMuKmdlcm1hbnl8ZWFzdC5nZXJtYW55IixERVU6Il4oPyEuKmVhc3QpLipnZXJtYW55fF4oPz0uKlxcYmZlZC4qXFxicmVwKS4qZ2VybWFuIixHSEE6ImdoYW5hfGdvbGQuP2NvYXN0IixHSUI6ImdpYnJhbHRhciIsR1JDOiJncmVlY2V8aGVsbGVuaWN8aGVsbGFzIixHUkw6ImdyZWVubGFuZCIsR1JEOiJncmVuYWRhIixHTFA6Imd1YWRlbG91cGUiLEdVTToiXFxiZ3VhbSIsR1RNOiJndWF0ZW1hbGEiLEdHWToiZ3Vlcm5zZXkiLEdJTjoiXig/IS4qZXEpKD8hLipzcGFuKSg/IS4qYmlzc2F1KSg/IS4qcG9ydHUpKD8hLipuZXcpLipndWluZWEiLEdOQjoiYmlzc2F1fF4oPz0uKnBvcnR1KS4qZ3VpbmVhIixHVVk6Imd1eWFuYXxicml0aXNoLj9ndWlhbmEiLEhUSToiaGFpdGkiLEhNRDoiaGVhcmQuKm1jZG9uYWxkIixWQVQ6ImhvbHkuP3NlZXx2YXRpY2FufHBhcGFsLj9zdCIsSE5EOiJeKD8hLipicml0KS4qaG9uZHVyYXMiLEhLRzoiaG9uZy4/a29uZyIsSFVOOiJeKD8hLiphdXN0cikuKmh1bmdhcnkiLElTTDoiaWNlbGFuZCIsSU5EOiJpbmRpYSg/IS4qb2NlYSkiLElETjoiaW5kb25lc2lhIixJUk46IlxcYmlyYW58cGVyc2lhIixJUlE6IlxcYmlyYXF8bWVzb3BvdGFtaWEiLElSTDoiaXJlbGFuZCIsSU1OOiJeKD89Lippc2xlKS4qXFxibWFuIixJU1I6ImlzcmFlbCIsSVRBOiJpdGFseSIsSkFNOiJqYW1haWNhIixKUE46ImphcGFuIixKRVk6ImplcnNleSIsSk9SOiJqb3JkYW4iLEtBWjoia2F6YWsiLEtFTjoia2VueWF8YnJpdGlzaC4/ZWFzdC4/YWZyaWNhfGVhc3QuP2FmcmljYS4/cHJvdCIsS0lSOiJraXJpYmF0aSIsUFJLOiJeKD89LipkZW1vY3JhdCkuKlxcYmtvcmVhfF4oPz0uKnBlb3BsZSkuKlxcYmtvcmVhfF4oPz0uKm5vcnRoKS4qXFxia29yZWF8ZHByayIsS09SOiJeKD8hLipkZW1vY3JhdCkoPyEuKnBlb3BsZSkoPyEuKm5vcnRoKS4qXFxia29yZWEiLEtXVDoia3V3YWl0IixLR1o6Imt5cmd5enxraXJnaGl6IixMQU86IlxcYmxhb3M/XFxiIixMVkE6ImxhdHZpYSIsTEJOOiJsZWJhbm9uIixMU086Imxlc290aG98YmFzdXRvIixMQlI6ImxpYmVyaWEiLExCWToibGlieWEiLExJRToibGllY2h0ZW5zdGVpbiIsTFRVOiJsaXRodWFuaWEiLExVWDoiXig/IS4qYmVsZykuKmx1eGVtIixNQUM6Im1hY2Eob3x1KSIsTUtEOiJtYWNlZG9uaWF8Znlyb20iLE1ERzoibWFkYWdhc2NhcnxtYWxhZ2FzeSIsTVdJOiJtYWxhd2l8bnlhc2EiLE1ZUzoibWFsYXlzaWEiLE1EVjoibWFsZGl2ZSIsTUxJOiJcXGJtYWxpXFxiIixNTFQ6IlxcYm1hbHRhIixNSEw6Im1hcnNoYWxsIixNVFE6Im1hcnRpbmlxdWUiLE1SVDoibWF1cml0YW5pYSIsTVVTOiJtYXVyaXRpdXMiLE1ZVDoiXFxibWF5b3R0ZSIsTUVYOiJcXGJtZXhpYyIsRlNNOiJtaWNyb25lc2lhIixNREE6Im1vbGRvdnxiKGF8ZSlzc2FyYWJpYSIsTUNPOiJtb25hY28iLE1ORzoibW9uZ29saWEiLE1ORToiXig/IS4qc2VyYmlhKS4qbW9udGVuZWdybyIsTVNSOiJtb250c2VycmF0IixNQVI6Im1vcm9jY298XFxibWFyb2MiLE1PWjoibW96YW1iaXF1ZSIsTU1SOiJteWFubWFyfGJ1cm1hIixOQU06Im5hbWliaWEiLE5SVToibmF1cnUiLE5QTDoibmVwYWwiLE5MRDoiXig/IS4qXFxiYW50KSg/IS4qXFxiY2FyaWIpLipuZXRoZXJsYW5kcyIsQU5UOiJeKD89LipcXGJhbnQpLioobmV0aGVyfGR1dGNoKSIsTkNMOiJuZXcuP2NhbGVkb25pYSIsTlpMOiJuZXcuP3plYWxhbmQiLE5JQzoibmljYXJhZ3VhIixORVI6IlxcYm5pZ2VyKD8haWEpIixOR0E6Im5pZ2VyaWEiLE5JVToibml1ZSIsTkZLOiJub3Jmb2xrIixNTlA6Im1hcmlhbmEiLE5PUjoibm9yd2F5IixPTU46IlxcYm9tYW58dHJ1Y2lhbCIsUEFLOiJeKD8hLiplYXN0KS4qcGFraT9zdGFuIixQTFc6InBhbGF1IixQU0U6InBhbGVzdGlufFxcYmdhemF8d2VzdC4/YmFuayIsUEFOOiJwYW5hbWEiLFBORzoicGFwdWF8bmV3Lj9ndWluZWEiLFBSWToicGFyYWd1YXkiLFBFUjoicGVydSIsUEhMOiJwaGlsaXBwaW5lcyIsUENOOiJwaXRjYWlybiIsUE9MOiJwb2xhbmQiLFBSVDoicG9ydHVnYWwiLFBSSToicHVlcnRvLj9yaWNvIixRQVQ6InFhdGFyIixSRVU6InIoZXxceGU5KXVuaW9uIixST1U6InIob3x1fG91KW1hbmlhIixSVVM6IlxcYnJ1c3NpYXxzb3ZpZXQuP3VuaW9ufHVcXC4/c1xcLj9zXFwuP3J8c29jaWFsaXN0Lj9yZXB1YmxpY3MiLFJXQToicndhbmRhIixCTE06ImJhcnRoKGV8XHhlOSlsZW15IixTSE46ImhlbGVuYSIsS05BOiJraXR0c3xcXGJuZXZpcyIsTENBOiJcXGJsdWNpYSIsTUFGOiJeKD89Lipjb2xsZWN0aXZpdHkpLiptYXJ0aW58Xig/PS4qZnJhbmNlKS4qbWFydGluKD8haXF1ZSl8Xig/PS4qZnJlbmNoKS4qbWFydGluKD8haXF1ZSkiLFNQTToibWlxdWVsb24iLFZDVDoidmluY2VudCIsV1NNOiJeKD8hLiphbWVyKS4qc2Ftb2EiLFNNUjoic2FuLj9tYXJpbm8iLFNUUDoiXFxicyhhfFx4ZTMpby4/dG9tKGV8XHhlOSkiLFNBVToiXFxic2FcXHcqLj9hcmFiaWEiLFNFTjoic2VuZWdhbCIsU1JCOiJeKD8hLiptb250ZSkuKnNlcmJpYSIsU1lDOiJzZXljaGVsbCIsU0xFOiJzaWVycmEiLFNHUDoic2luZ2Fwb3JlIixTWE06Il4oPyEuKm1hcnRpbikoPyEuKnNhYmEpLiptYWFydGVuIixTVks6Il4oPyEuKmN6ZSkuKnNsb3ZhayIsU1ZOOiJzbG92ZW5pYSIsU0xCOiJzb2xvbW9uIixTT006InNvbWFsaSIsWkFGOiJcXGJzXFx3Ki4/YWZyaWNhIixTR1M6InNvdXRoLj9nZW9yZ2lhfHNhbmR3aWNoIixTU0Q6IlxcYnNcXHcqLj9zdWRhbiIsRVNQOiJzcGFpbiIsTEtBOiJzcmkuP2xhbmthfGNleWxvbiIsU0ROOiJeKD8hLipcXGJzKD8hdSkpLipzdWRhbiIsU1VSOiJzdXJpbmFtfGR1dGNoLj9ndWlhbmEiLFNKTToic3ZhbGJhcmQiLFNXWjoic3dhemlsYW5kIixTV0U6InN3ZWRlbiIsQ0hFOiJzd2l0enxzd2lzcyIsU1lSOiJzeXJpYSIsVFdOOiJ0YWl3YW58dGFpcGVpfGZvcm1vc2EiLFRKSzoidGFqaWsiLFRaQToidGFuemFuaWEiLFRIQToidGhhaWxhbmR8XFxic2lhbSIsVExTOiJeKD89LipsZXN0ZSkuKnRpbW9yfF4oPz0uKmVhc3QpLip0aW1vciIsVEdPOiJ0b2dvIixUS0w6InRva2VsYXUiLFRPTjoidG9uZ2EiLFRUTzoidHJpbmlkYWR8dG9iYWdvIixUVU46InR1bmlzaWEiLFRVUjoidHVya2V5IixUS006InR1cmttZW4iLFRDQToidHVya3MiLFRVVjoidHV2YWx1IixVR0E6InVnYW5kYSIsVUtSOiJ1a3JhaW4iLEFSRToiZW1pcmF0ZXN8XnVcXC4/YVxcLj9lXFwuPyR8dW5pdGVkLj9hcmFiLj9lbSIsR0JSOiJ1bml0ZWQuP2tpbmdkb218YnJpdGFpbnxedVxcLj9rXFwuPyQiLFVTQToidW5pdGVkLj9zdGF0ZXN8XFxidVxcLj9zXFwuP2FcXC4/XFxifFxcYnVcXC4/c1xcLj9cXGIoPyEuKmlzbGFuZHMpIixVTUk6Im1pbm9yLj9vdXRseWluZy4/aXMiLFVSWToidXJ1Z3VheSIsVVpCOiJ1emJlayIsVlVUOiJ2YW51YXR1fG5ldy4/aGVicmlkZXMiLFZFTjoidmVuZXp1ZWxhIixWTk06Il4oPyEuKnJlcHVibGljKS4qdmlldC4/bmFtfF4oPz0uKnNvY2lhbGlzdCkuKnZpZXQuP25hbSIsVkdCOiJeKD89LipcXGJ1XFwuP1xccz9rKS4qdmlyZ2lufF4oPz0uKmJyaXQpLip2aXJnaW58Xig/PS4qa2luZ2RvbSkuKnZpcmdpbiIsVklSOiJeKD89LipcXGJ1XFwuP1xccz9zKS4qdmlyZ2lufF4oPz0uKnN0YXRlcykuKnZpcmdpbiIsV0xGOiJmdXR1bmF8d2FsbGlzIixFU0g6Indlc3Rlcm4uc2FoYXJhIixZRU06Il4oPyEuKmFyYWIpKD8hLipub3J0aCkoPyEuKnNhbmEpKD8hLipwZW8pKD8hLipkZW0pKD8hLipzb3V0aCkoPyEuKmFkZW4pKD8hLipcXGJwXFwuP2RcXC4/cikuKnllbWVuIixZTUQ6Il4oPz0uKnBlbykuKnllbWVufF4oPyEuKnJlcCkoPz0uKmRlbSkuKnllbWVufF4oPz0uKnNvdXRoKS4qeWVtZW58Xig/PS4qYWRlbikuKnllbWVufF4oPz0uKlxcYnBcXC4/ZFxcLj9yKS4qeWVtZW4iLFlVRzoieXVnb3NsYXZpYSIsWk1COiJ6YW1iaWF8bm9ydGhlcm4uP3Job2Rlc2lhIixFQVo6InphbnppYmFyIixaV0U6InppbWJhYndlfF4oPyEuKm5vcnRoZXJuKS4qcmhvZGVzaWEifX0se31dLDEyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7dGhpcy5hcmdUeXBlcz1bXSx0aGlzLnNoaW1BcmdzPVtdLHRoaXMuYXJyYXlBcmdzPVtdLHRoaXMuYXJyYXlCbG9ja0luZGljZXM9W10sdGhpcy5zY2FsYXJBcmdzPVtdLHRoaXMub2Zmc2V0QXJncz1bXSx0aGlzLm9mZnNldEFyZ0luZGV4PVtdLHRoaXMuaW5kZXhBcmdzPVtdLHRoaXMuc2hhcGVBcmdzPVtdLHRoaXMuZnVuY05hbWU9IiIsdGhpcy5wcmU9bnVsbCx0aGlzLmJvZHk9bnVsbCx0aGlzLnBvc3Q9bnVsbCx0aGlzLmRlYnVnPSExfWZ1bmN0aW9uIGkodCl7dmFyIGU9bmV3IG47ZS5wcmU9dC5wcmUsZS5ib2R5PXQuYm9keSxlLnBvc3Q9dC5wb3N0O3ZhciByPXQuYXJncy5zbGljZSgwKTtlLmFyZ1R5cGVzPXI7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBhPXJbaV07aWYoImFycmF5Ij09PWF8fCJvYmplY3QiPT10eXBlb2YgYSYmYS5ibG9ja0luZGljZXMpe2lmKGUuYXJnVHlwZXNbaV09ImFycmF5IixlLmFycmF5QXJncy5wdXNoKGkpLGUuYXJyYXlCbG9ja0luZGljZXMucHVzaChhLmJsb2NrSW5kaWNlcz9hLmJsb2NrSW5kaWNlczowKSxlLnNoaW1BcmdzLnB1c2goImFycmF5IitpKSxpPGUucHJlLmFyZ3MubGVuZ3RoJiZlLnByZS5hcmdzW2ldLmNvdW50PjApdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgYXJncyIpO2lmKGk8ZS5wb3N0LmFyZ3MubGVuZ3RoJiZlLnBvc3QuYXJnc1tpXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBhcmdzIil9ZWxzZSBpZigic2NhbGFyIj09PWEpZS5zY2FsYXJBcmdzLnB1c2goaSksZS5zaGltQXJncy5wdXNoKCJzY2FsYXIiK2kpO2Vsc2UgaWYoImluZGV4Ij09PWEpe2lmKGUuaW5kZXhBcmdzLnB1c2goaSksaTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1tpXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGluZGV4Iik7aWYoaTxlLmJvZHkuYXJncy5sZW5ndGgmJmUuYm9keS5hcmdzW2ldLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBib2R5KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBpbmRleCIpO2lmKGk8ZS5wb3N0LmFyZ3MubGVuZ3RoJiZlLnBvc3QuYXJnc1tpXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBpbmRleCIpfWVsc2UgaWYoInNoYXBlIj09PWEpe2lmKGUuc2hhcGVBcmdzLnB1c2goaSksaTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1tpXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZSIpO2lmKGk8ZS5ib2R5LmFyZ3MubGVuZ3RoJiZlLmJvZHkuYXJnc1tpXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogYm9keSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGUiKTtpZihpPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbaV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHdyaXRlIHRvIGFycmF5IHNoYXBlIil9ZWxzZXtpZigib2JqZWN0IiE9dHlwZW9mIGF8fCFhLm9mZnNldCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBVbmtub3duIGFyZ3VtZW50IHR5cGUgIityW2ldKTtlLmFyZ1R5cGVzW2ldPSJvZmZzZXQiLGUub2Zmc2V0QXJncy5wdXNoKHthcnJheTphLmFycmF5LG9mZnNldDphLm9mZnNldH0pLGUub2Zmc2V0QXJnSW5kZXgucHVzaChpKX19aWYoZS5hcnJheUFyZ3MubGVuZ3RoPD0wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IE5vIGFycmF5IGFyZ3VtZW50cyBzcGVjaWZpZWQiKTtpZihlLnByZS5hcmdzLmxlbmd0aD5yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gcHJlKCkgYmxvY2siKTtpZihlLmJvZHkuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVG9vIG1hbnkgYXJndW1lbnRzIGluIGJvZHkoKSBibG9jayIpO2lmKGUucG9zdC5hcmdzLmxlbmd0aD5yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gcG9zdCgpIGJsb2NrIik7cmV0dXJuIGUuZGVidWc9ISF0LnByaW50Q29kZXx8ISF0LmRlYnVnLGUuZnVuY05hbWU9dC5mdW5jTmFtZXx8ImN3aXNlIixlLmJsb2NrU2l6ZT10LmJsb2NrU2l6ZXx8NjQsbyhlKX12YXIgbz10KCIuL2xpYi90aHVuay5qcyIpO2UuZXhwb3J0cz1pfSx7Ii4vbGliL3RodW5rLmpzIjoxMjJ9XSwxMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG4saSxvPXQubGVuZ3RoLGE9ZS5hcnJheUFyZ3MubGVuZ3RoLHM9ZS5pbmRleEFyZ3MubGVuZ3RoPjAsbD1bXSx1PVtdLGM9MCxoPTA7Zm9yKG49MDtvPm47KytuKXUucHVzaChbImkiLG4sIj0wIl0uam9pbigiIikpO2ZvcihpPTA7YT5pOysraSlmb3Iobj0wO28+bjsrK24paD1jLGM9dFtuXSwwPT09bj91LnB1c2goWyJkIixpLCJzIixuLCI9dCIsaSwicCIsY10uam9pbigiIikpOnUucHVzaChbImQiLGksInMiLG4sIj0odCIsaSwicCIsYywiLXMiLGgsIip0IixpLCJwIixoLCIpIl0uam9pbigiIikpO2ZvcihsLnB1c2goInZhciAiK3Uuam9pbigiLCIpKSxuPW8tMTtuPj0wOy0tbiljPXRbbl0sbC5wdXNoKFsiZm9yKGkiLG4sIj0wO2kiLG4sIjxzIixjLCI7KytpIixuLCIpeyJdLmpvaW4oIiIpKTtmb3IobC5wdXNoKHIpLG49MDtvPm47KytuKXtmb3IoaD1jLGM9dFtuXSxpPTA7YT5pOysraSlsLnB1c2goWyJwIixpLCIrPWQiLGksInMiLG5dLmpvaW4oIiIpKTtzJiYobj4wJiZsLnB1c2goWyJpbmRleFsiLGgsIl0tPXMiLGhdLmpvaW4oIiIpKSxsLnB1c2goWyIrK2luZGV4WyIsYywiXSJdLmpvaW4oIiIpKSksbC5wdXNoKCJ9Iil9cmV0dXJuIGwuam9pbigiXG4iKX1mdW5jdGlvbiBpKHQsZSxyLGkpe2Zvcih2YXIgbz1lLmxlbmd0aCxhPXIuYXJyYXlBcmdzLmxlbmd0aCxzPXIuYmxvY2tTaXplLGw9ci5pbmRleEFyZ3MubGVuZ3RoPjAsdT1bXSxjPTA7YT5jOysrYyl1LnB1c2goWyJ2YXIgb2Zmc2V0IixjLCI9cCIsY10uam9pbigiIikpO2Zvcih2YXIgYz10O28+YzsrK2MpdS5wdXNoKFsiZm9yKHZhciBqIitjKyI9U1NbIixlW2NdLCJdfDA7aiIsYywiPjA7KXsiXS5qb2luKCIiKSksdS5wdXNoKFsiaWYoaiIsYywiPCIscywiKXsiXS5qb2luKCIiKSksdS5wdXNoKFsicyIsZVtjXSwiPWoiLGNdLmpvaW4oIiIpKSx1LnB1c2goWyJqIixjLCI9MCJdLmpvaW4oIiIpKSx1LnB1c2goWyJ9ZWxzZXtzIixlW2NdLCI9IixzXS5qb2luKCIiKSksdS5wdXNoKFsiaiIsYywiLT0iLHMsIn0iXS5qb2luKCIiKSksbCYmdS5wdXNoKFsiaW5kZXhbIixlW2NdLCJdPWoiLGNdLmpvaW4oIiIpKTtmb3IodmFyIGM9MDthPmM7KytjKXtmb3IodmFyIGg9WyJvZmZzZXQiK2NdLGY9dDtvPmY7KytmKWgucHVzaChbImoiLGYsIip0IixjLCJwIixlW2ZdXS5qb2luKCIiKSk7dS5wdXNoKFsicCIsYywiPSgiLGguam9pbigiKyIpLCIpIl0uam9pbigiIikpfXUucHVzaChuKGUscixpKSk7Zm9yKHZhciBjPXQ7bz5jOysrYyl1LnB1c2goIn0iKTtyZXR1cm4gdS5qb2luKCJcbiIpfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPTAscj10WzBdLmxlbmd0aDtyPmU7KXtmb3IodmFyIG49MTtuPHQubGVuZ3RoOysrbilpZih0W25dW2VdIT09dFswXVtlXSlyZXR1cm4gZTsrK2V9cmV0dXJuIGV9ZnVuY3Rpb24gYSh0LGUscil7Zm9yKHZhciBuPXQuYm9keSxpPVtdLG89W10sYT0wO2E8dC5hcmdzLmxlbmd0aDsrK2Epe3ZhciBzPXQuYXJnc1thXTtpZighKHMuY291bnQ8PTApKXt2YXIgbD1uZXcgUmVnRXhwKHMubmFtZSwiZyIpLHU9IiIsYz1lLmFycmF5QXJncy5pbmRleE9mKGEpO3N3aXRjaChlLmFyZ1R5cGVzW2FdKXtjYXNlIm9mZnNldCI6dmFyIGg9ZS5vZmZzZXRBcmdJbmRleC5pbmRleE9mKGEpLGY9ZS5vZmZzZXRBcmdzW2hdO2M9Zi5hcnJheSx1PSIrcSIraDtjYXNlImFycmF5Ijp1PSJwIitjK3U7dmFyIHA9ImwiK2EsZD0iYSIrYztpZigwPT09ZS5hcnJheUJsb2NrSW5kaWNlc1tjXSkxPT09cy5jb3VudD8iZ2VuZXJpYyI9PT1yW2NdP3MubHZhbHVlPyhpLnB1c2goWyJ2YXIgIixwLCI9IixkLCIuZ2V0KCIsdSwiKSJdLmpvaW4oIiIpKSxuPW4ucmVwbGFjZShsLHApLG8ucHVzaChbZCwiLnNldCgiLHUsIiwiLHAsIikiXS5qb2luKCIiKSkpOm49bi5yZXBsYWNlKGwsW2QsIi5nZXQoIix1LCIpIl0uam9pbigiIikpOm49bi5yZXBsYWNlKGwsW2QsIlsiLHUsIl0iXS5qb2luKCIiKSk6ImdlbmVyaWMiPT09cltjXT8oaS5wdXNoKFsidmFyICIscCwiPSIsZCwiLmdldCgiLHUsIikiXS5qb2luKCIiKSksbj1uLnJlcGxhY2UobCxwKSxzLmx2YWx1ZSYmby5wdXNoKFtkLCIuc2V0KCIsdSwiLCIscCwiKSJdLmpvaW4oIiIpKSk6KGkucHVzaChbInZhciAiLHAsIj0iLGQsIlsiLHUsIl0iXS5qb2luKCIiKSksbj1uLnJlcGxhY2UobCxwKSxzLmx2YWx1ZSYmby5wdXNoKFtkLCJbIix1LCJdPSIscF0uam9pbigiIikpKTtlbHNle2Zvcih2YXIgbT1bcy5uYW1lXSxnPVt1XSx2PTA7djxNYXRoLmFicyhlLmFycmF5QmxvY2tJbmRpY2VzW2NdKTt2KyspbS5wdXNoKCJcXHMqXFxbKFteXFxdXSspXFxdIiksZy5wdXNoKCIkIisodisxKSsiKnQiK2MrImIiK3YpO2lmKGw9bmV3IFJlZ0V4cChtLmpvaW4oIiIpLCJnIiksdT1nLmpvaW4oIisiKSwiZ2VuZXJpYyI9PT1yW2NdKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IEdlbmVyaWMgYXJyYXlzIG5vdCBzdXBwb3J0ZWQgaW4gY29tYmluYXRpb24gd2l0aCBibG9ja3MhIik7bj1uLnJlcGxhY2UobCxbZCwiWyIsdSwiXSJdLmpvaW4oIiIpKX1icmVhaztjYXNlInNjYWxhciI6bj1uLnJlcGxhY2UobCwiWSIrZS5zY2FsYXJBcmdzLmluZGV4T2YoYSkpO2JyZWFrO2Nhc2UiaW5kZXgiOm49bi5yZXBsYWNlKGwsImluZGV4Iik7YnJlYWs7Y2FzZSJzaGFwZSI6bj1uLnJlcGxhY2UobCwic2hhcGUiKX19fXJldHVybltpLmpvaW4oIlxuIiksbixvLmpvaW4oIlxuIildLmpvaW4oIlxuIikudHJpbSgpfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0hMCxuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPXRbbl0sbz1pLm1hdGNoKC9cZCsvKTtvPW8/b1swXToiIiwwPT09aS5jaGFyQXQoMCk/ZVtuXT0idSIraS5jaGFyQXQoMSkrbzplW25dPWkuY2hhckF0KDApK28sbj4wJiYocj1yJiZlW25dPT09ZVtuLTFdKX1yZXR1cm4gcj9lWzBdOmUuam9pbigiIil9ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj1lWzFdLmxlbmd0aC1NYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKXwwLGw9bmV3IEFycmF5KHQuYXJyYXlBcmdzLmxlbmd0aCksYz1uZXcgQXJyYXkodC5hcnJheUFyZ3MubGVuZ3RoKSxoPTA7aDx0LmFycmF5QXJncy5sZW5ndGg7KytoKWNbaF09ZVsyKmhdLGxbaF09ZVsyKmgrMV07Zm9yKHZhciBmPVtdLHA9W10sZD1bXSxtPVtdLGc9W10saD0wO2g8dC5hcnJheUFyZ3MubGVuZ3RoOysraCl7dC5hcnJheUJsb2NrSW5kaWNlc1toXTwwPyhkLnB1c2goMCksbS5wdXNoKHIpLGYucHVzaChyKSxwLnB1c2gocit0LmFycmF5QmxvY2tJbmRpY2VzW2hdKSk6KGQucHVzaCh0LmFycmF5QmxvY2tJbmRpY2VzW2hdKSxtLnB1c2godC5hcnJheUJsb2NrSW5kaWNlc1toXStyKSxmLnB1c2goMCkscC5wdXNoKHQuYXJyYXlCbG9ja0luZGljZXNbaF0pKTtmb3IodmFyIHY9W10seT0wO3k8bFtoXS5sZW5ndGg7eSsrKWRbaF08PWxbaF1beV0mJmxbaF1beV08bVtoXSYmdi5wdXNoKGxbaF1beV0tZFtoXSk7Zy5wdXNoKHYpfWZvcih2YXIgYj1bIlNTIl0seD1bIid1c2Ugc3RyaWN0JyJdLF89W10seT0wO3I+eTsrK3kpXy5wdXNoKFsicyIseSwiPVNTWyIseSwiXSJdLmpvaW4oIiIpKTtmb3IodmFyIGg9MDtoPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2gpe2IucHVzaCgiYSIraCksYi5wdXNoKCJ0IitoKSxiLnB1c2goInAiK2gpO2Zvcih2YXIgeT0wO3I+eTsrK3kpXy5wdXNoKFsidCIsaCwicCIseSwiPXQiLGgsIlsiLGRbaF0reSwiXSJdLmpvaW4oIiIpKTtmb3IodmFyIHk9MDt5PE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbaF0pOysreSlfLnB1c2goWyJ0IixoLCJiIix5LCI9dCIsaCwiWyIsZltoXSt5LCJdIl0uam9pbigiIikpfWZvcih2YXIgaD0wO2g8dC5zY2FsYXJBcmdzLmxlbmd0aDsrK2gpYi5wdXNoKCJZIitoKTtpZih0LnNoYXBlQXJncy5sZW5ndGg+MCYmXy5wdXNoKCJzaGFwZT1TUy5zbGljZSgwKSIpLHQuaW5kZXhBcmdzLmxlbmd0aD4wKXtmb3IodmFyIHc9bmV3IEFycmF5KHIpLGg9MDtyPmg7KytoKXdbaF09IjAiO18ucHVzaChbImluZGV4PVsiLHcuam9pbigiLCIpLCJdIl0uam9pbigiIikpfWZvcih2YXIgaD0wO2g8dC5vZmZzZXRBcmdzLmxlbmd0aDsrK2gpe2Zvcih2YXIgTT10Lm9mZnNldEFyZ3NbaF0saz1bXSx5PTA7eTxNLm9mZnNldC5sZW5ndGg7Kyt5KTAhPT1NLm9mZnNldFt5XSYmKDE9PT1NLm9mZnNldFt5XT9rLnB1c2goWyJ0IixNLmFycmF5LCJwIix5XS5qb2luKCIiKSk6ay5wdXNoKFtNLm9mZnNldFt5XSwiKnQiLE0uYXJyYXksInAiLHldLmpvaW4oIiIpKSk7MD09PWsubGVuZ3RoP18ucHVzaCgicSIraCsiPTAiKTpfLnB1c2goWyJxIixoLCI9IixrLmpvaW4oIisiKV0uam9pbigiIikpfXZhciBBPXUoW10uY29uY2F0KHQucHJlLnRoaXNWYXJzKS5jb25jYXQodC5ib2R5LnRoaXNWYXJzKS5jb25jYXQodC5wb3N0LnRoaXNWYXJzKSk7Xz1fLmNvbmNhdChBKSx4LnB1c2goInZhciAiK18uam9pbigiLCIpKTtmb3IodmFyIGg9MDtoPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2gpeC5wdXNoKCJwIitoKyJ8PTAiKTt0LnByZS5ib2R5Lmxlbmd0aD4zJiZ4LnB1c2goYSh0LnByZSx0LGMpKTt2YXIgVD1hKHQuYm9keSx0LGMpLEU9byhnKTtyPkU/eC5wdXNoKGkoRSxnWzBdLHQsVCkpOngucHVzaChuKGdbMF0sdCxUKSksdC5wb3N0LmJvZHkubGVuZ3RoPjMmJngucHVzaChhKHQucG9zdCx0LGMpKSx0LmRlYnVnJiZjb25zb2xlLmxvZygiLS0tLS1HZW5lcmF0ZWQgY3dpc2Ugcm91dGluZSBmb3IgIixlLCI6XG4iK3guam9pbigiXG4iKSsiXG4tLS0tLS0tLS0tIik7dmFyIFM9W3QuZnVuY05hbWV8fCJ1bm5hbWVkIiwiX2N3aXNlX2xvb3BfIixsWzBdLmpvaW4oInMiKSwibSIsRSxzKGMpXS5qb2luKCIiKSxMPW5ldyBGdW5jdGlvbihbImZ1bmN0aW9uICIsUywiKCIsYi5qb2luKCIsIiksIil7Iix4LmpvaW4oIlxuIiksIn0gcmV0dXJuICIsU10uam9pbigiIikpO3JldHVybiBMKCl9dmFyIHU9dCgidW5pcSIpO2UuZXhwb3J0cz1sfSx7dW5pcTo0ODJ9XSwxMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT1bIid1c2Ugc3RyaWN0JyIsInZhciBDQUNIRUQ9e30iXSxyPVtdLG49dC5mdW5jTmFtZSsiX2N3aXNlX3RodW5rIjtlLnB1c2goWyJyZXR1cm4gZnVuY3Rpb24gIixuLCIoIix0LnNoaW1BcmdzLmpvaW4oIiwiKSwiKXsiXS5qb2luKCIiKSk7Zm9yKHZhciBvPVtdLGE9W10scz1bWyJhcnJheSIsdC5hcnJheUFyZ3NbMF0sIi5zaGFwZS5zbGljZSgiLE1hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1swXSksdC5hcnJheUJsb2NrSW5kaWNlc1swXTwwPyIsIit0LmFycmF5QmxvY2tJbmRpY2VzWzBdKyIpIjoiKSJdLmpvaW4oIiIpXSxsPVtdLHU9W10sYz0wO2M8dC5hcnJheUFyZ3MubGVuZ3RoOysrYyl7dmFyIGg9dC5hcnJheUFyZ3NbY107ci5wdXNoKFsidCIsaCwiPWFycmF5IixoLCIuZHR5cGUsIiwiciIsaCwiPWFycmF5IixoLCIub3JkZXIiXS5qb2luKCIiKSksby5wdXNoKCJ0IitoKSxvLnB1c2goInIiK2gpLGEucHVzaCgidCIraCksYS5wdXNoKCJyIitoKyIuam9pbigpIikscy5wdXNoKCJhcnJheSIraCsiLmRhdGEiKSxzLnB1c2goImFycmF5IitoKyIuc3RyaWRlIikscy5wdXNoKCJhcnJheSIraCsiLm9mZnNldHwwIiksYz4wJiYobC5wdXNoKCJhcnJheSIrdC5hcnJheUFyZ3NbMF0rIi5zaGFwZS5sZW5ndGg9PT1hcnJheSIraCsiLnNoYXBlLmxlbmd0aCsiKyhNYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKS1NYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzW2NdKSkpLHUucHVzaCgiYXJyYXkiK3QuYXJyYXlBcmdzWzBdKyIuc2hhcGVbc2hhcGVJbmRleCsiK01hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1swXSkrIl09PT1hcnJheSIraCsiLnNoYXBlW3NoYXBlSW5kZXgrIitNYXRoLm1heCgwLHQuYXJyYXlCbG9ja0luZGljZXNbY10pKyJdIikpfXQuYXJyYXlBcmdzLmxlbmd0aD4xJiYoZS5wdXNoKCJpZiAoISgiK2wuam9pbigiICYmICIpKyIpKSB0aHJvdyBuZXcgRXJyb3IoJ2N3aXNlOiBBcnJheXMgZG8gbm90IGFsbCBoYXZlIHRoZSBzYW1lIGRpbWVuc2lvbmFsaXR5IScpIiksZS5wdXNoKCJmb3IodmFyIHNoYXBlSW5kZXg9YXJyYXkiK3QuYXJyYXlBcmdzWzBdKyIuc2hhcGUubGVuZ3RoLSIrTWF0aC5hYnModC5hcnJheUJsb2NrSW5kaWNlc1swXSkrIjsgc2hhcGVJbmRleC0tPjA7KSB7IiksZS5wdXNoKCJpZiAoISgiK3Uuam9pbigiICYmICIpKyIpKSB0aHJvdyBuZXcgRXJyb3IoJ2N3aXNlOiBBcnJheXMgZG8gbm90IGFsbCBoYXZlIHRoZSBzYW1lIHNoYXBlIScpIiksZS5wdXNoKCJ9IikpO2Zvcih2YXIgYz0wO2M8dC5zY2FsYXJBcmdzLmxlbmd0aDsrK2Mpcy5wdXNoKCJzY2FsYXIiK3Quc2NhbGFyQXJnc1tjXSk7ci5wdXNoKFsidHlwZT1bIixhLmpvaW4oIiwiKSwiXS5qb2luKCkiXS5qb2luKCIiKSksci5wdXNoKCJwcm9jPUNBQ0hFRFt0eXBlXSIpLGUucHVzaCgidmFyICIrci5qb2luKCIsIikpLGUucHVzaChbImlmKCFwcm9jKXsiLCJDQUNIRURbdHlwZV09cHJvYz1jb21waWxlKFsiLG8uam9pbigiLCIpLCJdKX0iLCJyZXR1cm4gcHJvYygiLHMuam9pbigiLCIpLCIpfSJdLmpvaW4oIiIpKSx0LmRlYnVnJiZjb25zb2xlLmxvZygiLS0tLS1HZW5lcmF0ZWQgdGh1bms6XG4iK2Uuam9pbigiXG4iKSsiXG4tLS0tLS0tLS0tIik7dmFyIGY9bmV3IEZ1bmN0aW9uKCJjb21waWxlIixlLmpvaW4oIlxuIikpO3JldHVybiBmKGkuYmluZCh2b2lkIDAsdCkpfXZhciBpPXQoIi4vY29tcGlsZS5qcyIpO2UuZXhwb3J0cz1ufSx7Ii4vY29tcGlsZS5qcyI6MTIxfV0sMTIzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImN3aXNlLWNvbXBpbGVyIil9LHsiY3dpc2UtY29tcGlsZXIiOjEyMH1dLDEyNDpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cmV0dXJuIHQmJih0Lm93bmVyRG9jdW1lbnR8fHQuZG9jdW1lbnR8fHQpLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBuKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXcpfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gZT50Py0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbnVsbD09PXQ/TmFOOit0fWZ1bmN0aW9uIGEodCl7cmV0dXJuIWlzTmFOKHQpfWZ1bmN0aW9uIHModCl7cmV0dXJue2xlZnQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoaT1lLmxlbmd0aCk7aT5uOyl7dmFyIG89bitpPj4+MTt0KGVbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKGUscixuLGkpe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihuPTApLGFyZ3VtZW50cy5sZW5ndGg8NCYmKGk9ZS5sZW5ndGgpO2k+bjspe3ZhciBvPW4raT4+PjE7dChlW29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC5sZW5ndGh9ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9MTt0KmUlMTspZSo9MTA7cmV0dXJuIGV9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgciBpbiBlKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxyLHt2YWx1ZTplW3JdLGVudW1lcmFibGU6ITF9KX1mdW5jdGlvbiBoKCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9ZnVuY3Rpb24gZih0KXtyZXR1cm4odCs9IiIpPT09TWF8fHRbMF09PT1rYT9rYSt0OnR9ZnVuY3Rpb24gcCh0KXtyZXR1cm4odCs9IiIpWzBdPT09a2E/dC5zbGljZSgxKTp0fWZ1bmN0aW9uIGQodCl7cmV0dXJuIGYodClpbiB0aGlzLl99ZnVuY3Rpb24gbSh0KXtyZXR1cm4odD1mKHQpKWluIHRoaXMuXyYmZGVsZXRlIHRoaXMuX1t0XX1mdW5jdGlvbiBnKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2gocChlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gdigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMuXykrK3Q7cmV0dXJuIHR9ZnVuY3Rpb24geSgpe2Zvcih2YXIgdCBpbiB0aGlzLl8pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gYigpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHR9ZnVuY3Rpb24gXyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ci5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q6bn19ZnVuY3Rpb24gdyh0LGUpe2lmKGUgaW4gdClyZXR1cm4gZTtlPWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtmb3IodmFyIHI9MCxuPUFhLmxlbmd0aDtuPnI7KytyKXt2YXIgaT1BYVtyXStlO2lmKGkgaW4gdClyZXR1cm4gaX19ZnVuY3Rpb24gTSgpe31mdW5jdGlvbiBrKCl7fWZ1bmN0aW9uIEEodCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZSxuPXIsaT0tMSxvPW4ubGVuZ3RoOysraTxvOykoZT1uW2ldLm9uKSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHR9dmFyIHI9W10sbj1uZXcgaDtyZXR1cm4gZS5vbj1mdW5jdGlvbihlLGkpe3ZhciBvLGE9bi5nZXQoZSk7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9hJiZhLm9uOihhJiYoYS5vbj1udWxsLHI9ci5zbGljZSgwLG89ci5pbmRleE9mKGEpKS5jb25jYXQoci5zbGljZShvKzEpKSxuLnJlbW92ZShlKSksaSYmci5wdXNoKG4uc2V0KGUse29uOml9KSksdCl9LGV9ZnVuY3Rpb24gVCgpe2NhLmV2ZW50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gRSgpe2Zvcih2YXIgdCxlPWNhLmV2ZW50O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIFModCl7Zm9yKHZhciBlPW5ldyBrLHI9MCxuPWFyZ3VtZW50cy5sZW5ndGg7KytyPG47KWVbYXJndW1lbnRzW3JdXT1BKGUpO3JldHVybiBlLm9mPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3RyeXt2YXIgbz1pLnNvdXJjZUV2ZW50PWNhLmV2ZW50O2kudGFyZ2V0PXQsY2EuZXZlbnQ9aSxlW2kudHlwZV0uYXBwbHkocixuKX1maW5hbGx5e2NhLmV2ZW50PW99fX0sZX1mdW5jdGlvbiBMKHQpe3JldHVybiBFYSh0LElhKSx0fWZ1bmN0aW9uIHoodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiBTYSh0LHRoaXMpfX1mdW5jdGlvbiBJKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gTGEodCx0aGlzKX19ZnVuY3Rpb24gUCh0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX1mdW5jdGlvbiBuKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfWZ1bmN0aW9uIGkoKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfWZ1bmN0aW9uIG8oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX1mdW5jdGlvbiBhKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LHIpfWZ1bmN0aW9uIHMoKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxyKX1yZXR1cm4gdD1jYS5ucy5xdWFsaWZ5KHQpLG51bGw9PWU/dC5sb2NhbD9uOnI6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dC5sb2NhbD9zOmE6dC5sb2NhbD9vOml9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdC50cmltKCkucmVwbGFjZSgvXHMrL2csIiAiKX1mdW5jdGlvbiBSKHQpe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefFxccyspIitjYS5yZXF1b3RlKHQpKyIoPzpcXHMrfCQpIiwiZyIpfWZ1bmN0aW9uIGoodCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBEKHQsZSl7ZnVuY3Rpb24gcigpe2Zvcih2YXIgcj0tMTsrK3I8aTspdFtyXSh0aGlzLGUpfWZ1bmN0aW9uIG4oKXtmb3IodmFyIHI9LTEsbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsrK3I8aTspdFtyXSh0aGlzLG4pfXQ9aih0KS5tYXAoTyk7dmFyIGk9dC5sZW5ndGg7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/bjpyfWZ1bmN0aW9uIE8odCl7dmFyIGU9Uih0KTtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihpPXIuY2xhc3NMaXN0KXJldHVybiBuP2kuYWRkKHQpOmkucmVtb3ZlKHQpO3ZhciBpPXIuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIjtuPyhlLmxhc3RJbmRleD0wLGUudGVzdChpKXx8ci5zZXRBdHRyaWJ1dGUoImNsYXNzIixDKGkrIiAiK3QpKSk6ci5zZXRBdHRyaWJ1dGUoImNsYXNzIixDKGkucmVwbGFjZShlLCIgIikpKX19ZnVuY3Rpb24gRih0LGUscil7ZnVuY3Rpb24gbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9ZnVuY3Rpb24gaSgpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLHIpfWZ1bmN0aW9uIG8oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4scil9cmV0dXJuIG51bGw9PWU/bjoiZnVuY3Rpb24iPT10eXBlb2YgZT9vOml9ZnVuY3Rpb24gTih0LGUpe2Z1bmN0aW9uIHIoKXtkZWxldGUgdGhpc1t0XX1mdW5jdGlvbiBuKCl7dGhpc1t0XT1lfWZ1bmN0aW9uIGkoKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09cn1yZXR1cm4gbnVsbD09ZT9yOiJmdW5jdGlvbiI9PXR5cGVvZiBlP2k6bn1mdW5jdGlvbiBCKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PVBhJiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1QYT9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMocix0KX1mdW5jdGlvbiByKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90Oih0PWNhLm5zLnF1YWxpZnkodCkpLmxvY2FsP3I6ZX1mdW5jdGlvbiBVKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gVih0KXtyZXR1cm57X19kYXRhX186dH19ZnVuY3Rpb24gcSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gemEodGhpcyx0KX19ZnVuY3Rpb24gRyh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aHx8KHQ9aSksZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSYmcj90KGUuX19kYXRhX18sci5fX2RhdGFfXyk6IWUtIXJ9fWZ1bmN0aW9uIEgodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO24+cjtyKyspZm9yKHZhciBpLG89dFtyXSxhPTAscz1vLmxlbmd0aDtzPmE7YSsrKShpPW9bYV0pJiZlKGksYSxyKTtyZXR1cm4gdH1mdW5jdGlvbiBYKHQpe3JldHVybiBFYSh0LFJhKSx0fWZ1bmN0aW9uIFkodCl7dmFyIGUscjtyZXR1cm4gZnVuY3Rpb24obixpLG8pe3ZhciBhLHM9dFtvXS51cGRhdGUsbD1zLmxlbmd0aDtmb3IobyE9ciYmKHI9byxlPTApLGk+PWUmJihlPWkrMSk7IShhPXNbZV0pJiYrK2U8bDspO3JldHVybiBhfX1mdW5jdGlvbiBXKHQsZSxyKXtmdW5jdGlvbiBuKCl7dmFyIGU9dGhpc1thXTtlJiYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHQsZSxlLiQpLGRlbGV0ZSB0aGlzW2FdKX1mdW5jdGlvbiBpKCl7dmFyIGk9bChlLGZhKGFyZ3VtZW50cykpO24uY2FsbCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIodCx0aGlzW2FdPWksaS4kPXIpLGkuXz1lfWZ1bmN0aW9uIG8oKXt2YXIgZSxyPW5ldyBSZWdFeHAoIl5fX29uKFteLl0rKSIrY2EucmVxdW90ZSh0KSsiJCIpO2Zvcih2YXIgbiBpbiB0aGlzKWlmKGU9bi5tYXRjaChyKSl7dmFyIGk9dGhpc1tuXTt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZVsxXSxpLGkuJCksZGVsZXRlIHRoaXNbbl19fXZhciBhPSJfX29uIit0LHM9dC5pbmRleE9mKCIuIiksbD1aO3M+MCYmKHQ9dC5zbGljZSgwLHMpKTt2YXIgdT1qYS5nZXQodCk7cmV0dXJuIHUmJih0PXUsbD1RKSxzP2U/aTpuOmU/TTpvfWZ1bmN0aW9uIFoodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49Y2EuZXZlbnQ7Y2EuZXZlbnQ9cixlWzBdPXRoaXMuX19kYXRhX187dHJ5e3QuYXBwbHkodGhpcyxlKX1maW5hbGx5e2NhLmV2ZW50PW59fX1mdW5jdGlvbiBRKHQsZSl7dmFyIHI9Wih0LGUpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC5yZWxhdGVkVGFyZ2V0O24mJihuPT09ZXx8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpKXx8ci5jYWxsKGUsdCl9fWZ1bmN0aW9uIEsodCl7dmFyIHI9Ii5kcmFnc3VwcHJlc3MtIisgKytPYSxpPSJjbGljayIrcixvPWNhLnNlbGVjdChuKHQpKS5vbigidG91Y2htb3ZlIityLFQpLm9uKCJkcmFnc3RhcnQiK3IsVCkub24oInNlbGVjdHN0YXJ0IityLFQpO2lmKG51bGw9PURhJiYoRGE9Im9uc2VsZWN0c3RhcnQiaW4gdD8hMTp3KHQuc3R5bGUsInVzZXJTZWxlY3QiKSksRGEpe3ZhciBhPWUodCkuc3R5bGUscz1hW0RhXTthW0RhXT0ibm9uZSJ9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKG8ub24ocixudWxsKSxEYSYmKGFbRGFdPXMpLHQpe3ZhciBlPWZ1bmN0aW9uKCl7by5vbihpLG51bGwpfTtvLm9uKGksZnVuY3Rpb24oKXtUKCksZSgpfSwhMCksc2V0VGltZW91dChlLDApfX19ZnVuY3Rpb24gSih0LGUpe2UuY2hhbmdlZFRvdWNoZXMmJihlPWUuY2hhbmdlZFRvdWNoZXNbMF0pO3ZhciByPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKHIuY3JlYXRlU1ZHUG9pbnQpe3ZhciBpPXIuY3JlYXRlU1ZHUG9pbnQoKTtpZigwPkZhKXt2YXIgbz1uKHQpO2lmKG8uc2Nyb2xsWHx8by5zY3JvbGxZKXtyPWNhLnNlbGVjdCgiYm9keSIpLmFwcGVuZCgic3ZnIikuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLG1hcmdpbjowLHBhZGRpbmc6MCxib3JkZXI6Im5vbmUifSwiaW1wb3J0YW50Iik7dmFyIGE9clswXVswXS5nZXRTY3JlZW5DVE0oKTtGYT0hKGEuZnx8YS5lKSxyLnJlbW92ZSgpfX1yZXR1cm4gRmE/KGkueD1lLnBhZ2VYLGkueT1lLnBhZ2VZKTooaS54PWUuY2xpZW50WCxpLnk9ZS5jbGllbnRZKSxpPWkubWF0cml4VHJhbnNmb3JtKHQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSxbaS54LGkueV19dmFyIHM9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bZS5jbGllbnRYLXMubGVmdC10LmNsaWVudExlZnQsZS5jbGllbnRZLXMudG9wLXQuY2xpZW50VG9wXX1mdW5jdGlvbiAkKCl7cmV0dXJuIGNhLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9ZnVuY3Rpb24gdHQodCl7cmV0dXJuIHQ+MD8xOjA+dD8tMTowfWZ1bmN0aW9uIGV0KHQsZSxyKXtyZXR1cm4oZVswXS10WzBdKSooclsxXS10WzFdKS0oZVsxXS10WzFdKSooclswXS10WzBdKX1mdW5jdGlvbiBydCh0KXtyZXR1cm4gdD4xPzA6LTE+dD9VYTpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gbnQodCl7cmV0dXJuIHQ+MT9HYTotMT50Py1HYTpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gaXQodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9ZnVuY3Rpb24gb3QodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9ZnVuY3Rpb24gYXQodCl7cmV0dXJuKCh0PU1hdGguZXhwKDIqdCkpLTEpLyh0KzEpfWZ1bmN0aW9uIHN0KHQpe3JldHVybih0PU1hdGguc2luKHQvMikpKnR9ZnVuY3Rpb24gbHQoKXt9ZnVuY3Rpb24gdXQodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgdXQ/KHRoaXMuaD0rdCx0aGlzLnM9K2Usdm9pZCh0aGlzLmw9K3IpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIHV0P25ldyB1dCh0LmgsdC5zLHQubCk6TXQoIiIrdCxrdCx1dCk6bmV3IHV0KHQsZSxyKX1mdW5jdGlvbiBjdCh0LGUscil7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdD4zNjA/dC09MzYwOjA+dCYmKHQrPTM2MCksNjA+dD9vKyhhLW8pKnQvNjA6MTgwPnQ/YToyNDA+dD9vKyhhLW8pKigyNDAtdCkvNjA6b31mdW5jdGlvbiBpKHQpe3JldHVybiBNYXRoLnJvdW5kKDI1NSpuKHQpKX12YXIgbyxhO3JldHVybiB0PWlzTmFOKHQpPzA6KHQlPTM2MCk8MD90KzM2MDp0LGU9aXNOYU4oZSk/MDowPmU/MDplPjE/MTplLHI9MD5yPzA6cj4xPzE6cixhPS41Pj1yP3IqKDErZSk6citlLXIqZSxvPTIqci1hLG5ldyBidChpKHQrMTIwKSxpKHQpLGkodC0xMjApKX1mdW5jdGlvbiBodCh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBodD8odGhpcy5oPSt0LHRoaXMuYz0rZSx2b2lkKHRoaXMubD0rcikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgaHQ/bmV3IGh0KHQuaCx0LmMsdC5sKTp0IGluc3RhbmNlb2YgcHQ/bXQodC5sLHQuYSx0LmIpOm10KCh0PUF0KCh0PWNhLnJnYih0KSkucix0LmcsdC5iKSkubCx0LmEsdC5iKTpuZXcgaHQodCxlLHIpfWZ1bmN0aW9uIGZ0KHQsZSxyKXtyZXR1cm4gaXNOYU4odCkmJih0PTApLGlzTmFOKGUpJiYoZT0wKSxuZXcgcHQocixNYXRoLmNvcyh0Kj1IYSkqZSxNYXRoLnNpbih0KSplKX1mdW5jdGlvbiBwdCh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBwdD8odGhpcy5sPSt0LHRoaXMuYT0rZSx2b2lkKHRoaXMuYj0rcikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgcHQ/bmV3IHB0KHQubCx0LmEsdC5iKTp0IGluc3RhbmNlb2YgaHQ/ZnQodC5oLHQuYyx0LmwpOkF0KCh0PWJ0KHQpKS5yLHQuZyx0LmIpOm5ldyBwdCh0LGUscil9ZnVuY3Rpb24gZHQodCxlLHIpe3ZhciBuPSh0KzE2KS8xMTYsaT1uK2UvNTAwLG89bi1yLzIwMDtyZXR1cm4gaT1ndChpKSpycyxuPWd0KG4pKm5zLG89Z3QobykqaXMsbmV3IGJ0KHl0KDMuMjQwNDU0MippLTEuNTM3MTM4NSpuLS40OTg1MzE0Km8pLHl0KC0uOTY5MjY2KmkrMS44NzYwMTA4Km4rLjA0MTU1NipvKSx5dCguMDU1NjQzNCppLS4yMDQwMjU5Km4rMS4wNTcyMjUyKm8pKX1mdW5jdGlvbiBtdCh0LGUscil7cmV0dXJuIHQ+MD9uZXcgaHQoTWF0aC5hdGFuMihyLGUpKlhhLE1hdGguc3FydChlKmUrcipyKSx0KTpuZXcgaHQoTmFOLE5hTix0KX1mdW5jdGlvbiBndCh0KXtyZXR1cm4gdD4uMjA2ODkzMDM0P3QqdCp0Oih0LTQvMjkpLzcuNzg3MDM3fWZ1bmN0aW9uIHZ0KHQpe3JldHVybiB0Pi4wMDg4NTY/TWF0aC5wb3codCwxLzMpOjcuNzg3MDM3KnQrNC8yOX1mdW5jdGlvbiB5dCh0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqKC4wMDMwND49dD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpKX1mdW5jdGlvbiBidCh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBidD8odGhpcy5yPX5+dCx0aGlzLmc9fn5lLHZvaWQodGhpcy5iPX5+cikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgYnQ/bmV3IGJ0KHQucix0LmcsdC5iKTpNdCgiIit0LGJ0LGN0KTpuZXcgYnQodCxlLHIpfWZ1bmN0aW9uIHh0KHQpe3JldHVybiBuZXcgYnQodD4+MTYsdD4+OCYyNTUsMjU1JnQpfWZ1bmN0aW9uIF90KHQpe3JldHVybiB4dCh0KSsiIn1mdW5jdGlvbiB3dCh0KXtyZXR1cm4gMTY+dD8iMCIrTWF0aC5tYXgoMCx0KS50b1N0cmluZygxNik6TWF0aC5taW4oMjU1LHQpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBNdCh0LGUscil7dmFyIG4saSxvLGE9MCxzPTAsbD0wO2lmKG49LyhbYS16XSspXCgoLiopXCkvLmV4ZWModD10LnRvTG93ZXJDYXNlKCkpKXN3aXRjaChpPW5bMl0uc3BsaXQoIiwiKSxuWzFdKXtjYXNlImhzbCI6cmV0dXJuIHIocGFyc2VGbG9hdChpWzBdKSxwYXJzZUZsb2F0KGlbMV0pLzEwMCxwYXJzZUZsb2F0KGlbMl0pLzEwMCk7Y2FzZSJyZ2IiOnJldHVybiBlKEV0KGlbMF0pLEV0KGlbMV0pLEV0KGlbMl0pKX1yZXR1cm4obz1zcy5nZXQodCkpP2Uoby5yLG8uZyxvLmIpOihudWxsPT10fHwiIyIhPT10LmNoYXJBdCgwKXx8aXNOYU4obz1wYXJzZUludCh0LnNsaWNlKDEpLDE2KSl8fCg0PT09dC5sZW5ndGg/KGE9KDM4NDAmbyk+PjQsYT1hPj40fGEscz0yNDAmbyxzPXM+PjR8cyxsPTE1Jm8sbD1sPDw0fGwpOjc9PT10Lmxlbmd0aCYmKGE9KDE2NzExNjgwJm8pPj4xNixzPSg2NTI4MCZvKT4+OCxsPTI1NSZvKSksZShhLHMsbCkpfWZ1bmN0aW9uIGt0KHQsZSxyKXt2YXIgbixpLG89TWF0aC5taW4odC89MjU1LGUvPTI1NSxyLz0yNTUpLGE9TWF0aC5tYXgodCxlLHIpLHM9YS1vLGw9KGErbykvMjtyZXR1cm4gcz8oaT0uNT5sP3MvKGErbyk6cy8oMi1hLW8pLG49dD09YT8oZS1yKS9zKyhyPmU/NjowKTplPT1hPyhyLXQpL3MrMjoodC1lKS9zKzQsbio9NjApOihuPU5hTixpPWw+MCYmMT5sPzA6biksbmV3IHV0KG4saSxsKX1mdW5jdGlvbiBBdCh0LGUscil7dD1UdCh0KSxlPVR0KGUpLHI9VHQocik7dmFyIG49dnQoKC40MTI0NTY0KnQrLjM1NzU3NjEqZSsuMTgwNDM3NSpyKS9ycyksaT12dCgoLjIxMjY3MjkqdCsuNzE1MTUyMiplKy4wNzIxNzUqcikvbnMpLG89dnQoKC4wMTkzMzM5KnQrLjExOTE5MiplKy45NTAzMDQxKnIpL2lzKTtyZXR1cm4gcHQoMTE2KmktMTYsNTAwKihuLWkpLDIwMCooaS1vKSl9ZnVuY3Rpb24gVHQodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gRXQodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4iJSI9PT10LmNoYXJBdCh0Lmxlbmd0aC0xKT9NYXRoLnJvdW5kKDIuNTUqZSk6ZX1mdW5jdGlvbiBTdCh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIEx0KHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmKG49cixyPW51bGwpLHp0KGUscix0LG4pfX1mdW5jdGlvbiB6dCh0LGUscixuKXtmdW5jdGlvbiBpKCl7dmFyIHQsZT1sLnN0YXR1cztpZighZSYmUHQobCl8fGU+PTIwMCYmMzAwPmV8fDMwND09PWUpe3RyeXt0PXIuY2FsbChvLGwpfWNhdGNoKG4pe3JldHVybiB2b2lkIGEuZXJyb3IuY2FsbChvLG4pfWEubG9hZC5jYWxsKG8sdCl9ZWxzZSBhLmVycm9yLmNhbGwobyxsKX12YXIgbz17fSxhPWNhLmRpc3BhdGNoKCJiZWZvcmVzZW5kIiwicHJvZ3Jlc3MiLCJsb2FkIiwiZXJyb3IiKSxzPXt9LGw9bmV3IFhNTEh0dHBSZXF1ZXN0LHU9bnVsbDtyZXR1cm4hdGhpcy5YRG9tYWluUmVxdWVzdHx8IndpdGhDcmVkZW50aWFscyJpbiBsfHwhL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KHQpfHwobD1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gbD9sLm9ubG9hZD1sLm9uZXJyb3I9aTpsLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2wucmVhZHlTdGF0ZT4zJiZpKCl9LGwub25wcm9ncmVzcz1mdW5jdGlvbih0KXt2YXIgZT1jYS5ldmVudDtjYS5ldmVudD10O3RyeXthLnByb2dyZXNzLmNhbGwobyxsKX1maW5hbGx5e2NhLmV2ZW50PWV9fSxvLmhlYWRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0PSh0KyIiKS50b0xvd2VyQ2FzZSgpLGFyZ3VtZW50cy5sZW5ndGg8Mj9zW3RdOihudWxsPT1lP2RlbGV0ZSBzW3RdOnNbdF09ZSsiIixvKX0sby5taW1lVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6dCsiIixvKTplfSxvLnJlc3BvbnNlVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LG8pOnV9LG8ucmVzcG9uc2U9ZnVuY3Rpb24odCl7cmV0dXJuIHI9dCxvfSxbImdldCIsInBvc3QiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe29bdF09ZnVuY3Rpb24oKXtyZXR1cm4gby5zZW5kLmFwcGx5KG8sW3RdLmNvbmNhdChmYShhcmd1bWVudHMpKSl9fSksby5zZW5kPWZ1bmN0aW9uKHIsbixpKXtpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihpPW4sbj1udWxsKSxsLm9wZW4ocix0LCEwKSxudWxsPT1lfHwiYWNjZXB0ImluIHN8fChzLmFjY2VwdD1lKyIsKi8qIiksbC5zZXRSZXF1ZXN0SGVhZGVyKWZvcih2YXIgYyBpbiBzKWwuc2V0UmVxdWVzdEhlYWRlcihjLHNbY10pO3JldHVybiBudWxsIT1lJiZsLm92ZXJyaWRlTWltZVR5cGUmJmwub3ZlcnJpZGVNaW1lVHlwZShlKSxudWxsIT11JiYobC5yZXNwb25zZVR5cGU9dSksbnVsbCE9aSYmby5vbigiZXJyb3IiLGkpLm9uKCJsb2FkIixmdW5jdGlvbih0KXtpKG51bGwsdCl9KSxhLmJlZm9yZXNlbmQuY2FsbChvLGwpLGwuc2VuZChudWxsPT1uP251bGw6biksb30sby5hYm9ydD1mdW5jdGlvbigpe3JldHVybiBsLmFib3J0KCksb30sY2EucmViaW5kKG8sYSwib24iKSxudWxsPT1uP286by5nZXQoSXQobikpfWZ1bmN0aW9uIEl0KHQpe3JldHVybiAxPT09dC5sZW5ndGg/ZnVuY3Rpb24oZSxyKXt0KG51bGw9PWU/cjpudWxsKX06dH1mdW5jdGlvbiBQdCh0KXt2YXIgZT10LnJlc3BvbnNlVHlwZTtyZXR1cm4gZSYmInRleHQiIT09ZT90LnJlc3BvbnNlOnQucmVzcG9uc2VUZXh0fWZ1bmN0aW9uIEN0KHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoOzI+biYmKGU9MCksMz5uJiYocj1EYXRlLm5vdygpKTt2YXIgaT1yK2Usbz17Yzp0LHQ6aSxuOm51bGx9O3JldHVybiB1cz91cy5uPW86bHM9byx1cz1vLGNzfHwoaHM9Y2xlYXJUaW1lb3V0KGhzKSxjcz0xLGZzKFJ0KSksb31mdW5jdGlvbiBSdCgpe3ZhciB0PWp0KCksZT1EdCgpLXQ7ZT4yND8oaXNGaW5pdGUoZSkmJihjbGVhclRpbWVvdXQoaHMpLGhzPXNldFRpbWVvdXQoUnQsZSkpLGNzPTApOihjcz0xLGZzKFJ0KSl9ZnVuY3Rpb24ganQoKXtmb3IodmFyIHQ9RGF0ZS5ub3coKSxlPWxzO2U7KXQ+PWUudCYmZS5jKHQtZS50KSYmKGUuYz1udWxsKSxlPWUubjtyZXR1cm4gdH1mdW5jdGlvbiBEdCgpe2Zvcih2YXIgdCxlPWxzLHI9MS8wO2U7KWUuYz8oZS50PHImJihyPWUudCksZT0odD1lKS5uKTplPXQ/dC5uPWUubjpscz1lLm47cmV0dXJuIHVzPXQscn1mdW5jdGlvbiBPdCh0LGUpe3JldHVybiBlLSh0P01hdGguY2VpbChNYXRoLmxvZyh0KS9NYXRoLkxOMTApOjEpfWZ1bmN0aW9uIEZ0KHQsZSl7dmFyIHI9TWF0aC5wb3coMTAsMyp3YSg4LWUpKTtyZXR1cm57c2NhbGU6ZT44P2Z1bmN0aW9uKHQpe3JldHVybiB0L3J9OmZ1bmN0aW9uKHQpe3JldHVybiB0KnJ9LHN5bWJvbDp0fX1mdW5jdGlvbiBOdCh0KXt2YXIgZT10LmRlY2ltYWwscj10LnRob3VzYW5kcyxuPXQuZ3JvdXBpbmcsaT10LmN1cnJlbmN5LG89biYmcj9mdW5jdGlvbih0LGUpe2Zvcih2YXIgaT10Lmxlbmd0aCxvPVtdLGE9MCxzPW5bMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+ZSYmKHM9TWF0aC5tYXgoMSxlLWwpKSxvLnB1c2godC5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPmUpKTspcz1uW2E9KGErMSklbi5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHIpfTp4O3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1kcy5leGVjKHQpLG49clsxXXx8IiAiLGE9clsyXXx8Ij4iLHM9clszXXx8Ii0iLGw9cls0XXx8IiIsdT1yWzVdLGM9K3JbNl0saD1yWzddLGY9cls4XSxwPXJbOV0sZD0xLG09IiIsZz0iIix2PSExLHk9ITA7c3dpdGNoKGYmJihmPStmLnN1YnN0cmluZygxKSksKHV8fCIwIj09PW4mJiI9Ij09PWEpJiYodT1uPSIwIixhPSI9IikscCl7Y2FzZSJuIjpoPSEwLHA9ImciO2JyZWFrO2Nhc2UiJSI6ZD0xMDAsZz0iJSIscD0iZiI7YnJlYWs7Y2FzZSJwIjpkPTEwMCxnPSIlIixwPSJyIjticmVhaztjYXNlImIiOmNhc2UibyI6Y2FzZSJ4IjpjYXNlIlgiOiIjIj09PWwmJihtPSIwIitwLnRvTG93ZXJDYXNlKCkpO2Nhc2UiYyI6eT0hMTtjYXNlImQiOnY9ITAsZj0wO2JyZWFrO2Nhc2UicyI6ZD0tMSxwPSJyIn0iJCI9PT1sJiYobT1pWzBdLGc9aVsxXSksInIiIT1wfHxmfHwocD0iZyIpLG51bGwhPWYmJigiZyI9PXA/Zj1NYXRoLm1heCgxLE1hdGgubWluKDIxLGYpKToiZSIhPXAmJiJmIiE9cHx8KGY9TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxmKSkpKSxwPW1zLmdldChwKXx8QnQ7dmFyIGI9dSYmaDtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9ZztpZih2JiZ0JTEpcmV0dXJuIiI7dmFyIGk9MD50fHwwPT09dCYmMD4xL3Q/KHQ9LXQsIi0iKToiLSI9PT1zPyIiOnM7aWYoMD5kKXt2YXIgbD1jYS5mb3JtYXRQcmVmaXgodCxmKTt0PWwuc2NhbGUodCkscj1sLnN5bWJvbCtnfWVsc2UgdCo9ZDt0PXAodCxmKTt2YXIgeCxfLHc9dC5sYXN0SW5kZXhPZigiLiIpO2lmKDA+dyl7dmFyIE09eT90Lmxhc3RJbmRleE9mKCJlIik6LTE7MD5NPyh4PXQsXz0iIik6KHg9dC5zdWJzdHJpbmcoMCxNKSxfPXQuc3Vic3RyaW5nKE0pKX1lbHNlIHg9dC5zdWJzdHJpbmcoMCx3KSxfPWUrdC5zdWJzdHJpbmcodysxKTshdSYmaCYmKHg9byh4LDEvMCkpO3ZhciBrPW0ubGVuZ3RoK3gubGVuZ3RoK18ubGVuZ3RoKyhiPzA6aS5sZW5ndGgpLEE9Yz5rP25ldyBBcnJheShrPWMtaysxKS5qb2luKG4pOiIiO3JldHVybiBiJiYoeD1vKEEreCxBLmxlbmd0aD9jLV8ubGVuZ3RoOjEvMCkpLGkrPW0sdD14K18sKCI8Ij09PWE/aSt0K0E6Ij4iPT09YT9BK2krdDoiXiI9PT1hP0Euc3Vic3RyaW5nKDAsaz4+PTEpK2krdCtBLnN1YnN0cmluZyhrKTppKyhiP3Q6QSt0KSkrcn19fWZ1bmN0aW9uIEJ0KHQpe3JldHVybiB0KyIifWZ1bmN0aW9uIFV0KCl7dGhpcy5fPW5ldyBEYXRlKGFyZ3VtZW50cy5sZW5ndGg+MT9EYXRlLlVUQy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YXJndW1lbnRzWzBdKX1mdW5jdGlvbiBWdCh0LGUscil7ZnVuY3Rpb24gbihlKXt2YXIgcj10KGUpLG49byhyLDEpO3JldHVybiBuLWU+ZS1yP3I6bn1mdW5jdGlvbiBpKHIpe3JldHVybiBlKHI9dChuZXcgdnMoci0xKSksMSkscn1mdW5jdGlvbiBvKHQscil7cmV0dXJuIGUodD1uZXcgdnMoK3QpLHIpLHR9ZnVuY3Rpb24gYSh0LG4sbyl7dmFyIGE9aSh0KSxzPVtdO2lmKG8+MSlmb3IoO24+YTspcihhKSVvfHxzLnB1c2gobmV3IERhdGUoK2EpKSxlKGEsMSk7ZWxzZSBmb3IoO24+YTspcy5wdXNoKG5ldyBEYXRlKCthKSksZShhLDEpO3JldHVybiBzfWZ1bmN0aW9uIHModCxlLHIpe3RyeXt2cz1VdDt2YXIgbj1uZXcgVXQ7cmV0dXJuIG4uXz10LGEobixlLHIpfWZpbmFsbHl7dnM9RGF0ZX19dC5mbG9vcj10LHQucm91bmQ9bix0LmNlaWw9aSx0Lm9mZnNldD1vLHQucmFuZ2U9YTt2YXIgbD10LnV0Yz1xdCh0KTtyZXR1cm4gbC5mbG9vcj1sLGwucm91bmQ9cXQobiksbC5jZWlsPXF0KGkpLGwub2Zmc2V0PXF0KG8pLGwucmFuZ2U9cyx0fWZ1bmN0aW9uIHF0KHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3RyeXt2cz1VdDt2YXIgbj1uZXcgVXQ7cmV0dXJuIG4uXz1lLHQobixyKS5ffWZpbmFsbHl7dnM9RGF0ZX19fWZ1bmN0aW9uIEd0KHQpe2Z1bmN0aW9uIGUodCl7ZnVuY3Rpb24gZShlKXtmb3IodmFyIHIsaSxvLGE9W10scz0tMSxsPTA7KytzPG47KTM3PT09dC5jaGFyQ29kZUF0KHMpJiYoYS5wdXNoKHQuc2xpY2UobCxzKSksbnVsbCE9KGk9YnNbcj10LmNoYXJBdCgrK3MpXSkmJihyPXQuY2hhckF0KCsrcykpLChvPVNbcl0pJiYocj1vKGUsbnVsbD09aT8iZSI9PT1yPyIgIjoiMCI6aSkpLGEucHVzaChyKSxsPXMrMSk7cmV0dXJuIGEucHVzaCh0LnNsaWNlKGwscykpLGEuam9pbigiIil9dmFyIG49dC5sZW5ndGg7cmV0dXJuIGUucGFyc2U9ZnVuY3Rpb24oZSl7dmFyIG49e3k6MTkwMCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MCxaOm51bGx9LGk9cihuLHQsZSwwKTtpZihpIT1lLmxlbmd0aClyZXR1cm4gbnVsbDsicCJpbiBuJiYobi5IPW4uSCUxMisxMipuLnApO3ZhciBvPW51bGwhPW4uWiYmdnMhPT1VdCxhPW5ldyhvP1V0OnZzKTtyZXR1cm4iaiJpbiBuP2Euc2V0RnVsbFllYXIobi55LDAsbi5qKToiVyJpbiBufHwiVSJpbiBuPygidyJpbiBufHwobi53PSJXImluIG4/MTowKSwKYS5zZXRGdWxsWWVhcihuLnksMCwxKSxhLnNldEZ1bGxZZWFyKG4ueSwwLCJXImluIG4/KG4udys2KSU3Kzcqbi5XLShhLmdldERheSgpKzUpJTc6bi53Kzcqbi5VLShhLmdldERheSgpKzYpJTcpKTphLnNldEZ1bGxZZWFyKG4ueSxuLm0sbi5kKSxhLnNldEhvdXJzKG4uSCsobi5aLzEwMHwwKSxuLk0rbi5aJTEwMCxuLlMsbi5MKSxvP2EuXzphfSxlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9ZnVuY3Rpb24gcih0LGUscixuKXtmb3IodmFyIGksbyxhLHM9MCxsPWUubGVuZ3RoLHU9ci5sZW5ndGg7bD5zOyl7aWYobj49dSlyZXR1cm4tMTtpZihpPWUuY2hhckNvZGVBdChzKyspLDM3PT09aSl7aWYoYT1lLmNoYXJBdChzKyspLG89TFthIGluIGJzP2UuY2hhckF0KHMrKyk6YV0sIW98fChuPW8odCxyLG4pKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9ci5jaGFyQ29kZUF0KG4rKykpcmV0dXJuLTF9cmV0dXJuIG59ZnVuY3Rpb24gbih0LGUscil7dy5sYXN0SW5kZXg9MDt2YXIgbj13LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQudz1NLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGkodCxlLHIpe3gubGFzdEluZGV4PTA7dmFyIG49eC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lnc9Xy5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvKHQsZSxyKXtULmxhc3RJbmRleD0wO3ZhciBuPVQuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5tPUUuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYSh0LGUscil7ay5sYXN0SW5kZXg9MDt2YXIgbj1rLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQubT1BLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHModCxlLG4pe3JldHVybiByKHQsUy5jLnRvU3RyaW5nKCksZSxuKX1mdW5jdGlvbiBsKHQsZSxuKXtyZXR1cm4gcih0LFMueC50b1N0cmluZygpLGUsbil9ZnVuY3Rpb24gdSh0LGUsbil7cmV0dXJuIHIodCxTLlgudG9TdHJpbmcoKSxlLG4pfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPWIuZ2V0KGUuc2xpY2UocixyKz0yKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gbnVsbD09bj8tMToodC5wPW4scil9dmFyIGg9dC5kYXRlVGltZSxmPXQuZGF0ZSxwPXQudGltZSxkPXQucGVyaW9kcyxtPXQuZGF5cyxnPXQuc2hvcnREYXlzLHY9dC5tb250aHMseT10LnNob3J0TW9udGhzO2UudXRjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCl7dHJ5e3ZzPVV0O3ZhciBlPW5ldyB2cztyZXR1cm4gZS5fPXQsbihlKX1maW5hbGx5e3ZzPURhdGV9fXZhciBuPWUodCk7cmV0dXJuIHIucGFyc2U9ZnVuY3Rpb24odCl7dHJ5e3ZzPVV0O3ZhciBlPW4ucGFyc2UodCk7cmV0dXJuIGUmJmUuX31maW5hbGx5e3ZzPURhdGV9fSxyLnRvU3RyaW5nPW4udG9TdHJpbmcscn0sZS5tdWx0aT1lLnV0Yy5tdWx0aT1jZTt2YXIgYj1jYS5tYXAoKSx4PVh0KG0pLF89WXQobSksdz1YdChnKSxNPVl0KGcpLGs9WHQodiksQT1ZdCh2KSxUPVh0KHkpLEU9WXQoeSk7ZC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7Yi5zZXQodC50b0xvd2VyQ2FzZSgpLGUpfSk7dmFyIFM9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIGdbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIG1bdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIHlbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gdlt0LmdldE1vbnRoKCldfSxjOmUoaCksZDpmdW5jdGlvbih0LGUpe3JldHVybiBIdCh0LmdldERhdGUoKSxlLDIpfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEh0KHQuZ2V0RGF0ZSgpLGUsMil9LEg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSHQodC5nZXRIb3VycygpLGUsMil9LEk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSHQodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfSxqOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEh0KDErZ3MuZGF5T2ZZZWFyKHQpLGUsMyl9LEw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSHQodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfSxtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEh0KHQuZ2V0TW9udGgoKSsxLGUsMil9LE06ZnVuY3Rpb24odCxlKXtyZXR1cm4gSHQodC5nZXRNaW51dGVzKCksZSwyKX0scDpmdW5jdGlvbih0KXtyZXR1cm4gZFsrKHQuZ2V0SG91cnMoKT49MTIpXX0sUzpmdW5jdGlvbih0LGUpe3JldHVybiBIdCh0LmdldFNlY29uZHMoKSxlLDIpfSxVOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEh0KGdzLnN1bmRheU9mWWVhcih0KSxlLDIpfSx3OmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERheSgpfSxXOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEh0KGdzLm1vbmRheU9mWWVhcih0KSxlLDIpfSx4OmUoZiksWDplKHApLHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSHQodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfSxZOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEh0KHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX0sWjpsZSwiJSI6ZnVuY3Rpb24oKXtyZXR1cm4iJSJ9fSxMPXthOm4sQTppLGI6byxCOmEsYzpzLGQ6cmUsZTpyZSxIOmllLEk6aWUsajpuZSxMOnNlLG06ZWUsTTpvZSxwOmMsUzphZSxVOlp0LHc6V3QsVzpRdCx4OmwsWDp1LHk6SnQsWTpLdCxaOiR0LCIlIjp1ZX07cmV0dXJuIGV9ZnVuY3Rpb24gSHQodCxlLHIpe3ZhciBuPTA+dD8iLSI6IiIsaT0obj8tdDp0KSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhyPm8/bmV3IEFycmF5KHItbysxKS5qb2luKGUpK2k6aSl9ZnVuY3Rpb24gWHQodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKGNhLnJlcXVvdGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBZdCh0KXtmb3IodmFyIGU9bmV3IGgscj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnNldCh0W3JdLnRvTG93ZXJDYXNlKCkscik7cmV0dXJuIGV9ZnVuY3Rpb24gV3QodCxlLHIpe3hzLmxhc3RJbmRleD0wO3ZhciBuPXhzLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0Lnc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWnQodCxlLHIpe3hzLmxhc3RJbmRleD0wO3ZhciBuPXhzLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuVT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBRdCh0LGUscil7eHMubGFzdEluZGV4PTA7dmFyIG49eHMuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5XPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEt0KHQsZSxyKXt4cy5sYXN0SW5kZXg9MDt2YXIgbj14cy5leGVjKGUuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8odC55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEp0KHQsZSxyKXt4cy5sYXN0SW5kZXg9MDt2YXIgbj14cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC55PXRlKCtuWzBdKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkdCh0LGUscil7cmV0dXJuL15bKy1dXGR7NH0kLy50ZXN0KGU9ZS5zbGljZShyLHIrNSkpPyh0Llo9LWUscis1KTotMX1mdW5jdGlvbiB0ZSh0KXtyZXR1cm4gdCsodD42OD8xOTAwOjJlMyl9ZnVuY3Rpb24gZWUodCxlLHIpe3hzLmxhc3RJbmRleD0wO3ZhciBuPXhzLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJlKHQsZSxyKXt4cy5sYXN0SW5kZXg9MDt2YXIgbj14cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5lKHQsZSxyKXt4cy5sYXN0SW5kZXg9MDt2YXIgbj14cy5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5qPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGllKHQsZSxyKXt4cy5sYXN0SW5kZXg9MDt2YXIgbj14cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG9lKHQsZSxyKXt4cy5sYXN0SW5kZXg9MDt2YXIgbj14cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGFlKHQsZSxyKXt4cy5sYXN0SW5kZXg9MDt2YXIgbj14cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHNlKHQsZSxyKXt4cy5sYXN0SW5kZXg9MDt2YXIgbj14cy5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxlKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSxyPWU+MD8iLSI6IisiLG49d2EoZSkvNjB8MCxpPXdhKGUpJTYwO3JldHVybiByK0h0KG4sIjAiLDIpK0h0KGksIjAiLDIpfWZ1bmN0aW9uIHVlKHQsZSxyKXtfcy5sYXN0SW5kZXg9MDt2YXIgbj1fcy5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIGNlKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPS0xOysrcjxlOyl0W3JdWzBdPXRoaXModFtyXVswXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wLG49dFtyXTshblsxXShlKTspbj10Wysrcl07cmV0dXJuIG5bMF0oZSl9fWZ1bmN0aW9uIGhlKCl7fWZ1bmN0aW9uIGZlKHQsZSxyKXt2YXIgbj1yLnM9dCtlLGk9bi10LG89bi1pO3IudD10LW8rKGUtaSl9ZnVuY3Rpb24gcGUodCxlKXt0JiZBcy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiZBc1t0LnR5cGVdKHQsZSl9ZnVuY3Rpb24gZGUodCxlLHIpe3ZhciBuLGk9LTEsbz10Lmxlbmd0aC1yO2ZvcihlLmxpbmVTdGFydCgpOysraTxvOyluPXRbaV0sZS5wb2ludChuWzBdLG5bMV0sblsyXSk7ZS5saW5lRW5kKCl9ZnVuY3Rpb24gbWUodCxlKXt2YXIgcj0tMSxuPXQubGVuZ3RoO2ZvcihlLnBvbHlnb25TdGFydCgpOysrcjxuOylkZSh0W3JdLGUsMSk7ZS5wb2x5Z29uRW5kKCl9ZnVuY3Rpb24gZ2UoKXtmdW5jdGlvbiB0KHQsZSl7dCo9SGEsZT1lKkhhLzIrVWEvNDt2YXIgcj10LW4sYT1yPj0wPzE6LTEscz1hKnIsbD1NYXRoLmNvcyhlKSx1PU1hdGguc2luKGUpLGM9byp1LGg9aSpsK2MqTWF0aC5jb3MocyksZj1jKmEqTWF0aC5zaW4ocyk7RXMuYWRkKE1hdGguYXRhbjIoZixoKSksbj10LGk9bCxvPXV9dmFyIGUscixuLGksbztTcy5wb2ludD1mdW5jdGlvbihhLHMpe1NzLnBvaW50PXQsbj0oZT1hKSpIYSxpPU1hdGguY29zKHM9KHI9cykqSGEvMitVYS80KSxvPU1hdGguc2luKHMpfSxTcy5saW5lRW5kPWZ1bmN0aW9uKCl7dChlLHIpfX1mdW5jdGlvbiB2ZSh0KXt2YXIgZT10WzBdLHI9dFsxXSxuPU1hdGguY29zKHIpO3JldHVybltuKk1hdGguY29zKGUpLG4qTWF0aC5zaW4oZSksTWF0aC5zaW4ocildfWZ1bmN0aW9uIHllKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfWZ1bmN0aW9uIGJlKHQsZSl7cmV0dXJuW3RbMV0qZVsyXS10WzJdKmVbMV0sdFsyXSplWzBdLXRbMF0qZVsyXSx0WzBdKmVbMV0tdFsxXSplWzBdXX1mdW5jdGlvbiB4ZSh0LGUpe3RbMF0rPWVbMF0sdFsxXSs9ZVsxXSx0WzJdKz1lWzJdfWZ1bmN0aW9uIF9lKHQsZSl7cmV0dXJuW3RbMF0qZSx0WzFdKmUsdFsyXSplXX1mdW5jdGlvbiB3ZSh0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0pO3RbMF0vPWUsdFsxXS89ZSx0WzJdLz1lfWZ1bmN0aW9uIE1lKHQpe3JldHVybltNYXRoLmF0YW4yKHRbMV0sdFswXSksbnQodFsyXSldfWZ1bmN0aW9uIGtlKHQsZSl7cmV0dXJuIHdhKHRbMF0tZVswXSk8TmEmJndhKHRbMV0tZVsxXSk8TmF9ZnVuY3Rpb24gQWUodCxlKXt0Kj1IYTt2YXIgcj1NYXRoLmNvcyhlKj1IYSk7VGUocipNYXRoLmNvcyh0KSxyKk1hdGguc2luKHQpLE1hdGguc2luKGUpKX1mdW5jdGlvbiBUZSh0LGUscil7KytMcyxJcys9KHQtSXMpL0xzLFBzKz0oZS1QcykvTHMsQ3MrPShyLUNzKS9Mc31mdW5jdGlvbiBFZSgpe2Z1bmN0aW9uIHQodCxpKXt0Kj1IYTt2YXIgbz1NYXRoLmNvcyhpKj1IYSksYT1vKk1hdGguY29zKHQpLHM9bypNYXRoLnNpbih0KSxsPU1hdGguc2luKGkpLHU9TWF0aC5hdGFuMihNYXRoLnNxcnQoKHU9cipsLW4qcykqdSsodT1uKmEtZSpsKSp1Kyh1PWUqcy1yKmEpKnUpLGUqYStyKnMrbipsKTt6cys9dSxScys9dSooZSsoZT1hKSksanMrPXUqKHIrKHI9cykpLERzKz11KihuKyhuPWwpKSxUZShlLHIsbil9dmFyIGUscixuO0JzLnBvaW50PWZ1bmN0aW9uKGksbyl7aSo9SGE7dmFyIGE9TWF0aC5jb3Mobyo9SGEpO2U9YSpNYXRoLmNvcyhpKSxyPWEqTWF0aC5zaW4oaSksbj1NYXRoLnNpbihvKSxCcy5wb2ludD10LFRlKGUscixuKX19ZnVuY3Rpb24gU2UoKXtCcy5wb2ludD1BZX1mdW5jdGlvbiBMZSgpe2Z1bmN0aW9uIHQodCxlKXt0Kj1IYTt2YXIgcj1NYXRoLmNvcyhlKj1IYSksYT1yKk1hdGguY29zKHQpLHM9cipNYXRoLnNpbih0KSxsPU1hdGguc2luKGUpLHU9aSpsLW8qcyxjPW8qYS1uKmwsaD1uKnMtaSphLGY9TWF0aC5zcXJ0KHUqdStjKmMraCpoKSxwPW4qYStpKnMrbypsLGQ9ZiYmLXJ0KHApL2YsbT1NYXRoLmF0YW4yKGYscCk7T3MrPWQqdSxGcys9ZCpjLE5zKz1kKmgsenMrPW0sUnMrPW0qKG4rKG49YSkpLGpzKz1tKihpKyhpPXMpKSxEcys9bSoobysobz1sKSksVGUobixpLG8pfXZhciBlLHIsbixpLG87QnMucG9pbnQ9ZnVuY3Rpb24oYSxzKXtlPWEscj1zLEJzLnBvaW50PXQsYSo9SGE7dmFyIGw9TWF0aC5jb3Mocyo9SGEpO249bCpNYXRoLmNvcyhhKSxpPWwqTWF0aC5zaW4oYSksbz1NYXRoLnNpbihzKSxUZShuLGksbyl9LEJzLmxpbmVFbmQ9ZnVuY3Rpb24oKXt0KGUsciksQnMubGluZUVuZD1TZSxCcy5wb2ludD1BZX19ZnVuY3Rpb24gemUodCxlKXtmdW5jdGlvbiByKHIsbil7cmV0dXJuIHI9dChyLG4pLGUoclswXSxyWzFdKX1yZXR1cm4gdC5pbnZlcnQmJmUuaW52ZXJ0JiYoci5pbnZlcnQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj1lLmludmVydChyLG4pLHImJnQuaW52ZXJ0KHJbMF0sclsxXSl9KSxyfWZ1bmN0aW9uIEllKCl7cmV0dXJuITB9ZnVuY3Rpb24gUGUodCxlLHIsbixpKXt2YXIgbz1bXSxhPVtdO2lmKHQuZm9yRWFjaChmdW5jdGlvbih0KXtpZighKChlPXQubGVuZ3RoLTEpPD0wKSl7dmFyIGUscj10WzBdLG49dFtlXTtpZihrZShyLG4pKXtpLmxpbmVTdGFydCgpO2Zvcih2YXIgcz0wO2U+czsrK3MpaS5wb2ludCgocj10W3NdKVswXSxyWzFdKTtyZXR1cm4gdm9pZCBpLmxpbmVFbmQoKX12YXIgbD1uZXcgUmUocix0LG51bGwsITApLHU9bmV3IFJlKHIsbnVsbCxsLCExKTtsLm89dSxvLnB1c2gobCksYS5wdXNoKHUpLGw9bmV3IFJlKG4sdCxudWxsLCExKSx1PW5ldyBSZShuLG51bGwsbCwhMCksbC5vPXUsby5wdXNoKGwpLGEucHVzaCh1KX19KSxhLnNvcnQoZSksQ2UobyksQ2UoYSksby5sZW5ndGgpe2Zvcih2YXIgcz0wLGw9cix1PWEubGVuZ3RoO3U+czsrK3MpYVtzXS5lPWw9IWw7Zm9yKHZhciBjLGgsZj1vWzBdOzspe2Zvcih2YXIgcD1mLGQ9ITA7cC52OylpZigocD1wLm4pPT09ZilyZXR1cm47Yz1wLnosaS5saW5lU3RhcnQoKTtkb3tpZihwLnY9cC5vLnY9ITAscC5lKXtpZihkKWZvcih2YXIgcz0wLHU9Yy5sZW5ndGg7dT5zOysrcylpLnBvaW50KChoPWNbc10pWzBdLGhbMV0pO2Vsc2UgbihwLngscC5uLngsMSxpKTtwPXAubn1lbHNle2lmKGQpe2M9cC5wLno7Zm9yKHZhciBzPWMubGVuZ3RoLTE7cz49MDstLXMpaS5wb2ludCgoaD1jW3NdKVswXSxoWzFdKX1lbHNlIG4ocC54LHAucC54LC0xLGkpO3A9cC5wfXA9cC5vLGM9cC56LGQ9IWR9d2hpbGUoIXAudik7aS5saW5lRW5kKCl9fX1mdW5jdGlvbiBDZSh0KXtpZihlPXQubGVuZ3RoKXtmb3IodmFyIGUscixuPTAsaT10WzBdOysrbjxlOylpLm49cj10W25dLHIucD1pLGk9cjtpLm49cj10WzBdLHIucD1pfX1mdW5jdGlvbiBSZSh0LGUscixuKXt0aGlzLng9dCx0aGlzLno9ZSx0aGlzLm89cix0aGlzLmU9bix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIGplKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSxyKXt2YXIgbj1pKGUscik7dChlPW5bMF0scj1uWzFdKSYmby5wb2ludChlLHIpfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1pKHQsZSk7Zy5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIGwoKXt5LnBvaW50PXMsZy5saW5lU3RhcnQoKX1mdW5jdGlvbiB1KCl7eS5wb2ludD1hLGcubGluZUVuZCgpfWZ1bmN0aW9uIGModCxlKXttLnB1c2goW3QsZV0pO3ZhciByPWkodCxlKTt4LnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24gaCgpe3gubGluZVN0YXJ0KCksbT1bXX1mdW5jdGlvbiBmKCl7YyhtWzBdWzBdLG1bMF1bMV0pLHgubGluZUVuZCgpO3ZhciB0LGU9eC5jbGVhbigpLHI9Yi5idWZmZXIoKSxuPXIubGVuZ3RoO2lmKG0ucG9wKCksZC5wdXNoKG0pLG09bnVsbCxuKWlmKDEmZSl7dD1yWzBdO3ZhciBpLG49dC5sZW5ndGgtMSxhPS0xO2lmKG4+MCl7Zm9yKF98fChvLnBvbHlnb25TdGFydCgpLF89ITApLG8ubGluZVN0YXJ0KCk7KythPG47KW8ucG9pbnQoKGk9dFthXSlbMF0saVsxXSk7by5saW5lRW5kKCl9fWVsc2Ugbj4xJiYyJmUmJnIucHVzaChyLnBvcCgpLmNvbmNhdChyLnNoaWZ0KCkpKSxwLnB1c2goci5maWx0ZXIoRGUpKX12YXIgcCxkLG0sZz1lKG8pLHY9aS5pbnZlcnQoblswXSxuWzFdKSx5PXtwb2ludDphLGxpbmVTdGFydDpsLGxpbmVFbmQ6dSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt5LnBvaW50PWMseS5saW5lU3RhcnQ9aCx5LmxpbmVFbmQ9ZixwPVtdLGQ9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt5LnBvaW50PWEseS5saW5lU3RhcnQ9bCx5LmxpbmVFbmQ9dSxwPWNhLm1lcmdlKHApO3ZhciB0PVZlKHYsZCk7cC5sZW5ndGg/KF98fChvLnBvbHlnb25TdGFydCgpLF89ITApLFBlKHAsRmUsdCxyLG8pKTp0JiYoX3x8KG8ucG9seWdvblN0YXJ0KCksXz0hMCksby5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpKSxfJiYoby5wb2x5Z29uRW5kKCksXz0hMSkscD1kPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe28ucG9seWdvblN0YXJ0KCksby5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpLG8ucG9seWdvbkVuZCgpfX0sYj1PZSgpLHg9ZShiKSxfPSExO3JldHVybiB5fX1mdW5jdGlvbiBEZSh0KXtyZXR1cm4gdC5sZW5ndGg+MX1mdW5jdGlvbiBPZSgpe3ZhciB0LGU9W107cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0scG9pbnQ6ZnVuY3Rpb24oZSxyKXt0LnB1c2goW2Uscl0pfSxsaW5lRW5kOk0sYnVmZmVyOmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn0scmVqb2luOmZ1bmN0aW9uKCl7ZS5sZW5ndGg+MSYmZS5wdXNoKGUucG9wKCkuY29uY2F0KGUuc2hpZnQoKSkpfX19ZnVuY3Rpb24gRmUodCxlKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tR2EtTmE6R2EtdFsxXSktKChlPWUueClbMF08MD9lWzFdLUdhLU5hOkdhLWVbMV0pfWZ1bmN0aW9uIE5lKHQpe3ZhciBlLHI9TmFOLG49TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24obyxhKXt2YXIgcz1vPjA/VWE6LVVhLGw9d2Eoby1yKTt3YShsLVVhKTxOYT8odC5wb2ludChyLG49KG4rYSkvMj4wP0dhOi1HYSksdC5wb2ludChpLG4pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLG4pLHQucG9pbnQobyxuKSxlPTApOmkhPT1zJiZsPj1VYSYmKHdhKHItaSk8TmEmJihyLT1pKk5hKSx3YShvLXMpPE5hJiYoby09cypOYSksbj1CZShyLG4sbyxhKSx0LnBvaW50KGksbiksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsbiksZT0wKSx0LnBvaW50KHI9byxuPWEpLGk9c30sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLHI9bj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItZX19fWZ1bmN0aW9uIEJlKHQsZSxyLG4pe3ZhciBpLG8sYT1NYXRoLnNpbih0LXIpO3JldHVybiB3YShhKT5OYT9NYXRoLmF0YW4oKE1hdGguc2luKGUpKihvPU1hdGguY29zKG4pKSpNYXRoLnNpbihyKS1NYXRoLnNpbihuKSooaT1NYXRoLmNvcyhlKSkqTWF0aC5zaW4odCkpLyhpKm8qYSkpOihlK24pLzJ9ZnVuY3Rpb24gVWUodCxlLHIsbil7dmFyIGk7aWYobnVsbD09dClpPXIqR2Esbi5wb2ludCgtVWEsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQoVWEsaSksbi5wb2ludChVYSwwKSxuLnBvaW50KFVhLC1pKSxuLnBvaW50KDAsLWkpLG4ucG9pbnQoLVVhLC1pKSxuLnBvaW50KC1VYSwwKSxuLnBvaW50KC1VYSxpKTtlbHNlIGlmKHdhKHRbMF0tZVswXSk+TmEpe3ZhciBvPXRbMF08ZVswXT9VYTotVWE7aT1yKm8vMixuLnBvaW50KC1vLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KG8saSl9ZWxzZSBuLnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gVmUodCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPVtNYXRoLnNpbihyKSwtTWF0aC5jb3MociksMF0sbz0wLGE9MDtFcy5yZXNldCgpO2Zvcih2YXIgcz0wLGw9ZS5sZW5ndGg7bD5zOysrcyl7dmFyIHU9ZVtzXSxjPXUubGVuZ3RoO2lmKGMpZm9yKHZhciBoPXVbMF0sZj1oWzBdLHA9aFsxXS8yK1VhLzQsZD1NYXRoLnNpbihwKSxtPU1hdGguY29zKHApLGc9MTs7KXtnPT09YyYmKGc9MCksdD11W2ddO3ZhciB2PXRbMF0seT10WzFdLzIrVWEvNCxiPU1hdGguc2luKHkpLHg9TWF0aC5jb3MoeSksXz12LWYsdz1fPj0wPzE6LTEsTT13Kl8saz1NPlVhLEE9ZCpiO2lmKEVzLmFkZChNYXRoLmF0YW4yKEEqdypNYXRoLnNpbihNKSxtKngrQSpNYXRoLmNvcyhNKSkpLG8rPWs/Xyt3KlZhOl8sa15mPj1yXnY+PXIpe3ZhciBUPWJlKHZlKGgpLHZlKHQpKTt3ZShUKTt2YXIgRT1iZShpLFQpO3dlKEUpO3ZhciBTPShrXl8+PTA/LTE6MSkqbnQoRVsyXSk7KG4+U3x8bj09PVMmJihUWzBdfHxUWzFdKSkmJihhKz1rXl8+PTA/MTotMSl9aWYoIWcrKylicmVhaztmPXYsZD1iLG09eCxoPXR9fXJldHVybigtTmE+b3x8TmE+byYmMD5FcyleMSZhfWZ1bmN0aW9uIHFlKHQpe2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gTWF0aC5jb3ModCkqTWF0aC5jb3MoZSk+b31mdW5jdGlvbiByKHQpe3ZhciByLG8sbCx1LGM7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3U9bD0hMSxjPTF9LHBvaW50OmZ1bmN0aW9uKGgsZil7dmFyIHAsZD1baCxmXSxtPWUoaCxmKSxnPWE/bT8wOmkoaCxmKTptP2koaCsoMD5oP1VhOi1VYSksZik6MDtpZighciYmKHU9bD1tKSYmdC5saW5lU3RhcnQoKSxtIT09bCYmKHA9bihyLGQpLChrZShyLHApfHxrZShkLHApKSYmKGRbMF0rPU5hLGRbMV0rPU5hLG09ZShkWzBdLGRbMV0pKSksbSE9PWwpYz0wLG0/KHQubGluZVN0YXJ0KCkscD1uKGQsciksdC5wb2ludChwWzBdLHBbMV0pKToocD1uKHIsZCksdC5wb2ludChwWzBdLHBbMV0pLHQubGluZUVuZCgpKSxyPXA7ZWxzZSBpZihzJiZyJiZhXm0pe3ZhciB2O2cmb3x8ISh2PW4oZCxyLCEwKSl8fChjPTAsYT8odC5saW5lU3RhcnQoKSx0LnBvaW50KHZbMF1bMF0sdlswXVsxXSksdC5wb2ludCh2WzFdWzBdLHZbMV1bMV0pLHQubGluZUVuZCgpKToodC5wb2ludCh2WzFdWzBdLHZbMV1bMV0pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludCh2WzBdWzBdLHZbMF1bMV0pKSl9IW18fHImJmtlKHIsZCl8fHQucG9pbnQoZFswXSxkWzFdKSxyPWQsbD1tLG89Z30sbGluZUVuZDpmdW5jdGlvbigpe2wmJnQubGluZUVuZCgpLHI9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gY3wodSYmbCk8PDF9fX1mdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj12ZSh0KSxpPXZlKGUpLGE9WzEsMCwwXSxzPWJlKG4saSksbD15ZShzLHMpLHU9c1swXSxjPWwtdSp1O2lmKCFjKXJldHVybiFyJiZ0O3ZhciBoPW8qbC9jLGY9LW8qdS9jLHA9YmUoYSxzKSxkPV9lKGEsaCksbT1fZShzLGYpO3hlKGQsbSk7dmFyIGc9cCx2PXllKGQsZykseT15ZShnLGcpLGI9dip2LXkqKHllKGQsZCktMSk7aWYoISgwPmIpKXt2YXIgeD1NYXRoLnNxcnQoYiksXz1fZShnLCgtdi14KS95KTtpZih4ZShfLGQpLF89TWUoXyksIXIpcmV0dXJuIF87dmFyIHcsTT10WzBdLGs9ZVswXSxBPXRbMV0sVD1lWzFdO00+ayYmKHc9TSxNPWssaz13KTt2YXIgRT1rLU0sUz13YShFLVVhKTxOYSxMPVN8fE5hPkU7aWYoIVMmJkE+VCYmKHc9QSxBPVQsVD13KSxMP1M/QStUPjBeX1sxXTwod2EoX1swXS1NKTxOYT9BOlQpOkE8PV9bMV0mJl9bMV08PVQ6RT5VYV4oTTw9X1swXSYmX1swXTw9aykpe3ZhciB6PV9lKGcsKC12K3gpL3kpO3JldHVybiB4ZSh6LGQpLFtfLE1lKHopXX19fWZ1bmN0aW9uIGkoZSxyKXt2YXIgbj1hP3Q6VWEtdCxpPTA7cmV0dXJuLW4+ZT9pfD0xOmU+biYmKGl8PTIpLC1uPnI/aXw9NDpyPm4mJihpfD04KSxpfXZhciBvPU1hdGguY29zKHQpLGE9bz4wLHM9d2Eobyk+TmEsbD1ncih0LDYqSGEpO3JldHVybiBqZShlLHIsbCxhP1swLC10XTpbLVVhLHQtVWFdKX1mdW5jdGlvbiBHZSh0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG8sYT1pLmEscz1pLmIsbD1hLngsdT1hLnksYz1zLngsaD1zLnksZj0wLHA9MSxkPWMtbCxtPWgtdTtpZihvPXQtbCxkfHwhKG8+MCkpe2lmKG8vPWQsMD5kKXtpZihmPm8pcmV0dXJuO3A+byYmKHA9byl9ZWxzZSBpZihkPjApe2lmKG8+cClyZXR1cm47bz5mJiYoZj1vKX1pZihvPXItbCxkfHwhKDA+bykpe2lmKG8vPWQsMD5kKXtpZihvPnApcmV0dXJuO28+ZiYmKGY9byl9ZWxzZSBpZihkPjApe2lmKGY+bylyZXR1cm47cD5vJiYocD1vKX1pZihvPWUtdSxtfHwhKG8+MCkpe2lmKG8vPW0sMD5tKXtpZihmPm8pcmV0dXJuO3A+byYmKHA9byl9ZWxzZSBpZihtPjApe2lmKG8+cClyZXR1cm47bz5mJiYoZj1vKX1pZihvPW4tdSxtfHwhKDA+bykpe2lmKG8vPW0sMD5tKXtpZihvPnApcmV0dXJuO28+ZiYmKGY9byl9ZWxzZSBpZihtPjApe2lmKGY+bylyZXR1cm47cD5vJiYocD1vKX1yZXR1cm4gZj4wJiYoaS5hPXt4OmwrZipkLHk6dStmKm19KSwxPnAmJihpLmI9e3g6bCtwKmQseTp1K3AqbX0pLGl9fX19fX1mdW5jdGlvbiBIZSh0LGUscixuKXtmdW5jdGlvbiBpKG4saSl7cmV0dXJuIHdhKG5bMF0tdCk8TmE/aT4wPzA6Mzp3YShuWzBdLXIpPE5hP2k+MD8yOjE6d2EoblsxXS1lKTxOYT9pPjA/MTowOmk+MD8zOjJ9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBhKHQueCxlLngpfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1pKHQsMSksbj1pKGUsMSk7cmV0dXJuIHIhPT1uP3ItbjowPT09cj9lWzFdLXRbMV06MT09PXI/dFswXS1lWzBdOjI9PT1yP3RbMV0tZVsxXTplWzBdLXRbMF19cmV0dXJuIGZ1bmN0aW9uKHMpe2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBlPTAscj1nLmxlbmd0aCxuPXRbMV0saT0wO3I+aTsrK2kpZm9yKHZhciBvLGE9MSxzPWdbaV0sbD1zLmxlbmd0aCx1PXNbMF07bD5hOysrYSlvPXNbYV0sdVsxXTw9bj9vWzFdPm4mJmV0KHUsbyx0KT4wJiYrK2U6b1sxXTw9biYmZXQodSxvLHQpPDAmJi0tZSx1PW87cmV0dXJuIDAhPT1lfWZ1bmN0aW9uIHUobyxzLGwsdSl7dmFyIGM9MCxoPTA7aWYobnVsbD09b3x8KGM9aShvLGwpKSE9PShoPWkocyxsKSl8fGEobyxzKTwwXmw+MCl7ZG8gdS5wb2ludCgwPT09Y3x8Mz09PWM/dDpyLGM+MT9uOmUpO3doaWxlKChjPShjK2wrNCklNCkhPT1oKX1lbHNlIHUucG9pbnQoc1swXSxzWzFdKX1mdW5jdGlvbiBjKGksbyl7cmV0dXJuIGk+PXQmJnI+PWkmJm8+PWUmJm4+PW99ZnVuY3Rpb24gaCh0LGUpe2ModCxlKSYmcy5wb2ludCh0LGUpfWZ1bmN0aW9uIGYoKXtMLnBvaW50PWQsZyYmZy5wdXNoKHY9W10pLGs9ITAsTT0hMSxfPXc9TmFOfWZ1bmN0aW9uIHAoKXttJiYoZCh5LGIpLHgmJk0mJkUucmVqb2luKCksbS5wdXNoKEUuYnVmZmVyKCkpKSxMLnBvaW50PWgsTSYmcy5saW5lRW5kKCl9ZnVuY3Rpb24gZCh0LGUpe3Q9TWF0aC5tYXgoLVZzLE1hdGgubWluKFZzLHQpKSxlPU1hdGgubWF4KC1WcyxNYXRoLm1pbihWcyxlKSk7dmFyIHI9Yyh0LGUpO2lmKGcmJnYucHVzaChbdCxlXSksayl5PXQsYj1lLHg9cixrPSExLHImJihzLmxpbmVTdGFydCgpLHMucG9pbnQodCxlKSk7ZWxzZSBpZihyJiZNKXMucG9pbnQodCxlKTtlbHNle3ZhciBuPXthOnt4Ol8seTp3fSxiOnt4OnQseTplfX07UyhuKT8oTXx8KHMubGluZVN0YXJ0KCkscy5wb2ludChuLmEueCxuLmEueSkpLHMucG9pbnQobi5iLngsbi5iLnkpLHJ8fHMubGluZUVuZCgpLEE9ITEpOnImJihzLmxpbmVTdGFydCgpLHMucG9pbnQodCxlKSxBPSExKX1fPXQsdz1lLE09cn12YXIgbSxnLHYseSxiLHgsXyx3LE0sayxBLFQ9cyxFPU9lKCksUz1HZSh0LGUscixuKSxMPXtwb2ludDpoLGxpbmVTdGFydDpmLGxpbmVFbmQ6cCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtzPUUsbT1bXSxnPVtdLEE9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtzPVQsbT1jYS5tZXJnZShtKTt2YXIgZT1sKFt0LG5dKSxyPUEmJmUsaT1tLmxlbmd0aDsocnx8aSkmJihzLnBvbHlnb25TdGFydCgpLHImJihzLmxpbmVTdGFydCgpLHUobnVsbCxudWxsLDEscykscy5saW5lRW5kKCkpLGkmJlBlKG0sbyxlLHUscykscy5wb2x5Z29uRW5kKCkpLG09Zz12PW51bGx9fTtyZXR1cm4gTH19ZnVuY3Rpb24gWGUodCl7dmFyIGU9MCxyPVVhLzMsbj1scih0KSxpPW4oZSxyKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihlPXRbMF0qVWEvMTgwLHI9dFsxXSpVYS8xODApOltlL1VhKjE4MCxyL1VhKjE4MF19LGl9ZnVuY3Rpb24gWWUodCxlKXtmdW5jdGlvbiByKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KG8tMippKk1hdGguc2luKGUpKS9pO3JldHVybltyKk1hdGguc2luKHQqPWkpLGEtcipNYXRoLmNvcyh0KV19dmFyIG49TWF0aC5zaW4odCksaT0obitNYXRoLnNpbihlKSkvMixvPTErbiooMippLW4pLGE9TWF0aC5zcXJ0KG8pL2k7cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9YS1lO3JldHVybltNYXRoLmF0YW4yKHQscikvaSxudCgoby0odCp0K3IqcikqaSppKS8oMippKSldfSxyfWZ1bmN0aW9uIFdlKCl7ZnVuY3Rpb24gdCh0LGUpe0dzKz1pKnQtbiplLG49dCxpPWV9dmFyIGUscixuLGk7WnMucG9pbnQ9ZnVuY3Rpb24obyxhKXtacy5wb2ludD10LGU9bj1vLHI9aT1hfSxacy5saW5lRW5kPWZ1bmN0aW9uKCl7dChlLHIpfX1mdW5jdGlvbiBaZSh0LGUpe0hzPnQmJihIcz10KSx0PllzJiYoWXM9dCksWHM+ZSYmKFhzPWUpLGU+V3MmJihXcz1lKX1mdW5jdGlvbiBRZSgpe2Z1bmN0aW9uIHQodCxlKXthLnB1c2goIk0iLHQsIiwiLGUsbyl9ZnVuY3Rpb24gZSh0LGUpe2EucHVzaCgiTSIsdCwiLCIsZSkscy5wb2ludD1yfWZ1bmN0aW9uIHIodCxlKXthLnB1c2goIkwiLHQsIiwiLGUpfWZ1bmN0aW9uIG4oKXtzLnBvaW50PXR9ZnVuY3Rpb24gaSgpe2EucHVzaCgiWiIpfXZhciBvPUtlKDQuNSksYT1bXSxzPXtwb2ludDp0LGxpbmVTdGFydDpmdW5jdGlvbigpe3MucG9pbnQ9ZX0sbGluZUVuZDpuLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3MubGluZUVuZD1pfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7cy5saW5lRW5kPW4scy5wb2ludD10fSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gbz1LZSh0KSxzfSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZihhLmxlbmd0aCl7dmFyIHQ9YS5qb2luKCIiKTtyZXR1cm4gYT1bXSx0fX19O3JldHVybiBzfWZ1bmN0aW9uIEtlKHQpe3JldHVybiJtMCwiK3QrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrLTIqdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIisyKnQrInoifWZ1bmN0aW9uIEplKHQsZSl7SXMrPXQsUHMrPWUsKytDc31mdW5jdGlvbiAkZSgpe2Z1bmN0aW9uIHQodCxuKXt2YXIgaT10LWUsbz1uLXIsYT1NYXRoLnNxcnQoaSppK28qbyk7UnMrPWEqKGUrdCkvMixqcys9YSoocituKS8yLERzKz1hLEplKGU9dCxyPW4pfXZhciBlLHI7S3MucG9pbnQ9ZnVuY3Rpb24obixpKXtLcy5wb2ludD10LEplKGU9bixyPWkpfX1mdW5jdGlvbiB0cigpe0tzLnBvaW50PUplfWZ1bmN0aW9uIGVyKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciByPXQtbixvPWUtaSxhPU1hdGguc3FydChyKnIrbypvKTtScys9YSoobit0KS8yLGpzKz1hKihpK2UpLzIsRHMrPWEsYT1pKnQtbiplLE9zKz1hKihuK3QpLEZzKz1hKihpK2UpLE5zKz0zKmEsSmUobj10LGk9ZSl9dmFyIGUscixuLGk7S3MucG9pbnQ9ZnVuY3Rpb24obyxhKXtLcy5wb2ludD10LEplKGU9bj1vLHI9aT1hKX0sS3MubGluZUVuZD1mdW5jdGlvbigpe3QoZSxyKX19ZnVuY3Rpb24gcnIodCl7ZnVuY3Rpb24gZShlLHIpe3QubW92ZVRvKGUrYSxyKSx0LmFyYyhlLHIsYSwwLFZhKX1mdW5jdGlvbiByKGUscil7dC5tb3ZlVG8oZSxyKSxzLnBvaW50PW59ZnVuY3Rpb24gbihlLHIpe3QubGluZVRvKGUscil9ZnVuY3Rpb24gaSgpe3MucG9pbnQ9ZX1mdW5jdGlvbiBvKCl7dC5jbG9zZVBhdGgoKX12YXIgYT00LjUscz17cG9pbnQ6ZSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtzLnBvaW50PXJ9LGxpbmVFbmQ6aSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtzLmxpbmVFbmQ9b30scG9seWdvbkVuZDpmdW5jdGlvbigpe3MubGluZUVuZD1pLHMucG9pbnQ9ZX0scG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIGE9dCxzfSxyZXN1bHQ6TX07cmV0dXJuIHN9ZnVuY3Rpb24gbnIodCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4ocz9uOnIpKHQpfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGFyKGUsZnVuY3Rpb24ocixuKXtyPXQocixuKSxlLnBvaW50KHJbMF0sclsxXSl9KX1mdW5jdGlvbiBuKGUpe2Z1bmN0aW9uIHIocixuKXtyPXQocixuKSxlLnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24gbigpe2I9TmFOLGsucG9pbnQ9byxlLmxpbmVTdGFydCgpfWZ1bmN0aW9uIG8ocixuKXt2YXIgbz12ZShbcixuXSksYT10KHIsbik7aShiLHgseSxfLHcsTSxiPWFbMF0seD1hWzFdLHk9cixfPW9bMF0sdz1vWzFdLE09b1syXSxzLGUpLGUucG9pbnQoYix4KX1mdW5jdGlvbiBhKCl7ay5wb2ludD1yLGUubGluZUVuZCgpfWZ1bmN0aW9uIGwoKXtuKCksay5wb2ludD11LGsubGluZUVuZD1jfWZ1bmN0aW9uIHUodCxlKXtvKGg9dCxmPWUpLHA9YixkPXgsbT1fLGc9dyx2PU0say5wb2ludD1vfWZ1bmN0aW9uIGMoKXtpKGIseCx5LF8sdyxNLHAsZCxoLG0sZyx2LHMsZSksay5saW5lRW5kPWEsYSgpfXZhciBoLGYscCxkLG0sZyx2LHksYix4LF8sdyxNLGs9e3BvaW50OnIsbGluZVN0YXJ0Om4sbGluZUVuZDphLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksay5saW5lU3RhcnQ9bH0scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLGsubGluZVN0YXJ0PW59fTtyZXR1cm4ga31mdW5jdGlvbiBpKGUscixuLHMsbCx1LGMsaCxmLHAsZCxtLGcsdil7dmFyIHk9Yy1lLGI9aC1yLHg9eSp5K2IqYjtpZih4PjQqbyYmZy0tKXt2YXIgXz1zK3Asdz1sK2QsTT11K20saz1NYXRoLnNxcnQoXypfK3cqdytNKk0pLEE9TWF0aC5hc2luKE0vPWspLFQ9d2Eod2EoTSktMSk8TmF8fHdhKG4tZik8TmE/KG4rZikvMjpNYXRoLmF0YW4yKHcsXyksRT10KFQsQSksUz1FWzBdLEw9RVsxXSx6PVMtZSxJPUwtcixQPWIqei15Kkk7KFAqUC94Pm98fHdhKCh5KnorYipJKS94LS41KT4uM3x8YT5zKnArbCpkK3UqbSkmJihpKGUscixuLHMsbCx1LFMsTCxULF8vPWssdy89ayxNLGcsdiksdi5wb2ludChTLEwpLGkoUyxMLFQsXyx3LE0sYyxoLGYscCxkLG0sZyx2KSl9fXZhciBvPS41LGE9TWF0aC5jb3MoMzAqSGEpLHM9MTY7cmV0dXJuIGUucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPShvPXQqdCk+MCYmMTYsZSk6TWF0aC5zcXJ0KG8pfSxlfWZ1bmN0aW9uIGlyKHQpe3ZhciBlPW5yKGZ1bmN0aW9uKGUscil7cmV0dXJuIHQoW2UqWGEscipYYV0pfSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB1cihlKHQpKX19ZnVuY3Rpb24gb3IodCl7dGhpcy5zdHJlYW09dH1mdW5jdGlvbiBhcih0LGUpe3JldHVybntwb2ludDplLHNwaGVyZTpmdW5jdGlvbigpe3Quc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0LmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dC5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpfX19ZnVuY3Rpb24gc3IodCl7cmV0dXJuIGxyKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSgpfWZ1bmN0aW9uIGxyKHQpe2Z1bmN0aW9uIGUodCl7cmV0dXJuIHQ9cyh0WzBdKkhhLHRbMV0qSGEpLFt0WzBdKmYrbCx1LXRbMV0qZl19ZnVuY3Rpb24gcih0KXtyZXR1cm4gdD1zLmludmVydCgodFswXS1sKS9mLCh1LXRbMV0pL2YpLHQmJlt0WzBdKlhhLHRbMV0qWGFdfWZ1bmN0aW9uIG4oKXtzPXplKGE9ZnIodix5LGIpLG8pO3ZhciB0PW8obSxnKTtyZXR1cm4gbD1wLXRbMF0qZix1PWQrdFsxXSpmLGkoKX1mdW5jdGlvbiBpKCl7cmV0dXJuIGMmJihjLnZhbGlkPSExLGM9bnVsbCksZX12YXIgbyxhLHMsbCx1LGMsaD1ucihmdW5jdGlvbih0LGUpe3JldHVybiB0PW8odCxlKSxbdFswXSpmK2wsdS10WzFdKmZdfSksZj0xNTAscD00ODAsZD0yNTAsbT0wLGc9MCx2PTAseT0wLGI9MCxfPVVzLHc9eCxNPW51bGwsaz1udWxsO3JldHVybiBlLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gYyYmKGMudmFsaWQ9ITEpLGM9dXIoXyhhLGgodyh0KSkpKSxjLnZhbGlkPSEwLGN9LGUuY2xpcEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPW51bGw9PXQ/KE09dCxVcyk6cWUoKE09K3QpKkhhKSxpKCkpOk19LGUuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz10LHc9dD9IZSh0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdKTp4LGkoKSk6a30sZS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0rdCxuKCkpOmZ9LGUudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0WzBdLGQ9K3RbMV0sbigpKTpbcCxkXX0sZS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dFswXSUzNjAqSGEsZz10WzFdJTM2MCpIYSxuKCkpOlttKlhhLGcqWGFdfSxlLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10WzBdJTM2MCpIYSx5PXRbMV0lMzYwKkhhLGI9dC5sZW5ndGg+Mj90WzJdJTM2MCpIYTowLG4oKSk6W3YqWGEseSpYYSxiKlhhXX0sY2EucmViaW5kKGUsaCwicHJlY2lzaW9uIiksZnVuY3Rpb24oKXtyZXR1cm4gbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLmludmVydD1vLmludmVydCYmcixuKCl9fWZ1bmN0aW9uIHVyKHQpe3JldHVybiBhcih0LGZ1bmN0aW9uKGUscil7dC5wb2ludChlKkhhLHIqSGEpfSl9ZnVuY3Rpb24gY3IodCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBocih0LGUpe3JldHVyblt0PlVhP3QtVmE6LVVhPnQ/dCtWYTp0LGVdfWZ1bmN0aW9uIGZyKHQsZSxyKXtyZXR1cm4gdD9lfHxyP3plKGRyKHQpLG1yKGUscikpOmRyKHQpOmV8fHI/bXIoZSxyKTpocn1mdW5jdGlvbiBwcih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSs9dCxbZT5VYT9lLVZhOi1VYT5lP2UrVmE6ZSxyXX19ZnVuY3Rpb24gZHIodCl7dmFyIGU9cHIodCk7cmV0dXJuIGUuaW52ZXJ0PXByKC10KSxlfWZ1bmN0aW9uIG1yKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciByPU1hdGguY29zKGUpLHM9TWF0aC5jb3ModCkqcixsPU1hdGguc2luKHQpKnIsdT1NYXRoLnNpbihlKSxjPXUqbitzKmk7cmV0dXJuW01hdGguYXRhbjIobCpvLWMqYSxzKm4tdSppKSxudChjKm8rbCphKV19dmFyIG49TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KSxvPU1hdGguY29zKGUpLGE9TWF0aC5zaW4oZSk7cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5jb3MoZSkscz1NYXRoLmNvcyh0KSpyLGw9TWF0aC5zaW4odCkqcix1PU1hdGguc2luKGUpLGM9dSpvLWwqYTtyZXR1cm5bTWF0aC5hdGFuMihsKm8rdSphLHMqbitjKmkpLG50KGMqbi1zKmkpXX0scn1mdW5jdGlvbiBncih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIGZ1bmN0aW9uKGksbyxhLHMpe3ZhciBsPWEqZTtudWxsIT1pPyhpPXZyKHIsaSksbz12cihyLG8pLChhPjA/bz5pOmk+bykmJihpKz1hKlZhKSk6KGk9dCthKlZhLG89dC0uNSpsKTtmb3IodmFyIHUsYz1pO2E+MD9jPm86bz5jO2MtPWwpcy5wb2ludCgodT1NZShbciwtbipNYXRoLmNvcyhjKSwtbipNYXRoLnNpbihjKV0pKVswXSx1WzFdKX19ZnVuY3Rpb24gdnIodCxlKXt2YXIgcj12ZShlKTtyWzBdLT10LHdlKHIpO3ZhciBuPXJ0KC1yWzFdKTtyZXR1cm4oKC1yWzJdPDA/LW46bikrMipNYXRoLlBJLU5hKSUoMipNYXRoLlBJKX1mdW5jdGlvbiB5cih0LGUscil7dmFyIG49Y2EucmFuZ2UodCxlLU5hLHIpLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSl9fWZ1bmN0aW9uIGJyKHQsZSxyKXt2YXIgbj1jYS5yYW5nZSh0LGUtTmEscikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuW2UsdF19KX19ZnVuY3Rpb24geHIodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIF9yKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiB3cih0LGUscixuKXt2YXIgaT1NYXRoLmNvcyhlKSxvPU1hdGguc2luKGUpLGE9TWF0aC5jb3Mobikscz1NYXRoLnNpbihuKSxsPWkqTWF0aC5jb3ModCksdT1pKk1hdGguc2luKHQpLGM9YSpNYXRoLmNvcyhyKSxoPWEqTWF0aC5zaW4ociksZj0yKk1hdGguYXNpbihNYXRoLnNxcnQoc3Qobi1lKStpKmEqc3Qoci10KSkpLHA9MS9NYXRoLnNpbihmKSxkPWY/ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zaW4odCo9ZikqcCxyPU1hdGguc2luKGYtdCkqcCxuPXIqbCtlKmMsaT1yKnUrZSpoLGE9cipvK2UqcztyZXR1cm5bTWF0aC5hdGFuMihpLG4pKlhhLE1hdGguYXRhbjIoYSxNYXRoLnNxcnQobipuK2kqaSkpKlhhXX06ZnVuY3Rpb24oKXtyZXR1cm5bdCpYYSxlKlhhXX07cmV0dXJuIGQuZGlzdGFuY2U9ZixkfWZ1bmN0aW9uIE1yKCl7ZnVuY3Rpb24gdCh0LGkpe3ZhciBvPU1hdGguc2luKGkqPUhhKSxhPU1hdGguY29zKGkpLHM9d2EoKHQqPUhhKS1lKSxsPU1hdGguY29zKHMpO0pzKz1NYXRoLmF0YW4yKE1hdGguc3FydCgocz1hKk1hdGguc2luKHMpKSpzKyhzPW4qby1yKmEqbCkqcykscipvK24qYSpsKSxlPXQscj1vLG49YX12YXIgZSxyLG47JHMucG9pbnQ9ZnVuY3Rpb24oaSxvKXtlPWkqSGEscj1NYXRoLnNpbihvKj1IYSksbj1NYXRoLmNvcyhvKSwkcy5wb2ludD10fSwkcy5saW5lRW5kPWZ1bmN0aW9uKCl7JHMucG9pbnQ9JHMubGluZUVuZD1NfX1mdW5jdGlvbiBrcih0LGUpe2Z1bmN0aW9uIHIoZSxyKXt2YXIgbj1NYXRoLmNvcyhlKSxpPU1hdGguY29zKHIpLG89dChuKmkpO3JldHVybltvKmkqTWF0aC5zaW4oZSksbypNYXRoLnNpbihyKV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQscil7dmFyIG49TWF0aC5zcXJ0KHQqdCtyKnIpLGk9ZShuKSxvPU1hdGguc2luKGkpLGE9TWF0aC5jb3MoaSk7cmV0dXJuW01hdGguYXRhbjIodCpvLG4qYSksTWF0aC5hc2luKG4mJnIqby9uKV19LHJ9ZnVuY3Rpb24gQXIodCxlKXtmdW5jdGlvbiByKHQsZSl7YT4wPy1HYStOYT5lJiYoZT0tR2ErTmEpOmU+R2EtTmEmJihlPUdhLU5hKTt2YXIgcj1hL01hdGgucG93KGkoZSksbyk7cmV0dXJuW3IqTWF0aC5zaW4obyp0KSxhLXIqTWF0aC5jb3Mobyp0KV19dmFyIG49TWF0aC5jb3ModCksaT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC50YW4oVWEvNCt0LzIpfSxvPXQ9PT1lP01hdGguc2luKHQpOk1hdGgubG9nKG4vTWF0aC5jb3MoZSkpL01hdGgubG9nKGkoZSkvaSh0KSksYT1uKk1hdGgucG93KGkodCksbykvbztyZXR1cm4gbz8oci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1hLWUsbj10dChvKSpNYXRoLnNxcnQodCp0K3Iqcik7cmV0dXJuW01hdGguYXRhbjIodCxyKS9vLDIqTWF0aC5hdGFuKE1hdGgucG93KGEvbiwxL28pKS1HYV19LHIpOkVyfWZ1bmN0aW9uIFRyKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciByPW8tZTtyZXR1cm5bcipNYXRoLnNpbihpKnQpLG8tcipNYXRoLmNvcyhpKnQpXX12YXIgbj1NYXRoLmNvcyh0KSxpPXQ9PT1lP01hdGguc2luKHQpOihuLU1hdGguY29zKGUpKS8oZS10KSxvPW4vaSt0O3JldHVybiB3YShpKTxOYT9jcjooci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1vLWU7cmV0dXJuW01hdGguYXRhbjIodCxyKS9pLG8tdHQoaSkqTWF0aC5zcXJ0KHQqdCtyKnIpXX0scil9ZnVuY3Rpb24gRXIodCxlKXtyZXR1cm5bdCxNYXRoLmxvZyhNYXRoLnRhbihVYS80K2UvMikpXX1mdW5jdGlvbiBTcih0KXt2YXIgZSxyPXNyKHQpLG49ci5zY2FsZSxpPXIudHJhbnNsYXRlLG89ci5jbGlwRXh0ZW50O3JldHVybiByLnNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2U/ci5jbGlwRXh0ZW50KG51bGwpOnI6dH0sci50cmFuc2xhdGU9ZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHIsYXJndW1lbnRzKTtyZXR1cm4gdD09PXI/ZT9yLmNsaXBFeHRlbnQobnVsbCk6cjp0fSxyLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIGE9by5hcHBseShyLGFyZ3VtZW50cyk7aWYoYT09PXIpe2lmKGU9bnVsbD09dCl7dmFyIHM9VWEqbigpLGw9aSgpO28oW1tsWzBdLXMsbFsxXS1zXSxbbFswXStzLGxbMV0rc11dKX19ZWxzZSBlJiYoYT1udWxsKTtyZXR1cm4gYX0sci5jbGlwRXh0ZW50KG51bGwpfWZ1bmN0aW9uIExyKHQsZSl7cmV0dXJuW01hdGgubG9nKE1hdGgudGFuKFVhLzQrZS8yKSksLXRdfWZ1bmN0aW9uIHpyKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIElyKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIFByKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVswLDFdLG49MixpPTI7ZT5pO2krKyl7Zm9yKDtuPjEmJmV0KHRbcltuLTJdXSx0W3Jbbi0xXV0sdFtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIENyKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIFJyKHQsZSxyKXtyZXR1cm4oclswXS1lWzBdKSoodFsxXS1lWzFdKTwoclsxXS1lWzFdKSoodFswXS1lWzBdKX1mdW5jdGlvbiBqcih0LGUscixuKXt2YXIgaT10WzBdLG89clswXSxhPWVbMF0taSxzPW5bMF0tbyxsPXRbMV0sdT1yWzFdLGM9ZVsxXS1sLGg9blsxXS11LGY9KHMqKGwtdSktaCooaS1vKSkvKGgqYS1zKmMpO3JldHVybltpK2YqYSxsK2YqY119ZnVuY3Rpb24gRHIodCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIShlWzBdLXJbMF18fGVbMV0tclsxXSl9ZnVuY3Rpb24gT3IoKXtvbih0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gRnIodCl7dmFyIGU9aGwucG9wKCl8fG5ldyBPcjtyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiBOcih0KXtacih0KSxsbC5yZW1vdmUodCksaGwucHVzaCh0KSxvbih0KX1mdW5jdGlvbiBCcih0KXt2YXIgZT10LmNpcmNsZSxyPWUueCxuPWUuY3ksaT17eDpyLHk6bn0sbz10LlAsYT10Lk4scz1bdF07TnIodCk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJndhKHItbC5jaXJjbGUueCk8TmEmJndhKG4tbC5jaXJjbGUuY3kpPE5hOylvPWwuUCxzLnVuc2hpZnQobCksTnIobCksbD1vO3MudW5zaGlmdChsKSxacihsKTtmb3IodmFyIHU9YTt1LmNpcmNsZSYmd2Eoci11LmNpcmNsZS54KTxOYSYmd2Eobi11LmNpcmNsZS5jeSk8TmE7KWE9dS5OLHMucHVzaCh1KSxOcih1KSx1PWE7cy5wdXNoKHUpLFpyKHUpO3ZhciBjLGg9cy5sZW5ndGg7Zm9yKGM9MTtoPmM7KytjKXU9c1tjXSxsPXNbYy0xXSxlbih1LmVkZ2UsbC5zaXRlLHUuc2l0ZSxpKTtsPXNbMF0sdT1zW2gtMV0sdS5lZGdlPSRyKGwuc2l0ZSx1LnNpdGUsbnVsbCxpKSxXcihsKSxXcih1KX1mdW5jdGlvbiBVcih0KXtmb3IodmFyIGUscixuLGksbz10LngsYT10Lnkscz1sbC5fO3M7KWlmKG49VnIocyxhKS1vLG4+TmEpcz1zLkw7ZWxzZXtpZihpPW8tcXIocyxhKSwhKGk+TmEpKXtuPi1OYT8oZT1zLlAscj1zKTppPi1OYT8oZT1zLHI9cy5OKTplPXI9czticmVha31pZighcy5SKXtlPXM7YnJlYWt9cz1zLlJ9dmFyIGw9RnIodCk7aWYobGwuaW5zZXJ0KGUsbCksZXx8cil7aWYoZT09PXIpcmV0dXJuIFpyKGUpLHI9RnIoZS5zaXRlKSxsbC5pbnNlcnQobCxyKSxsLmVkZ2U9ci5lZGdlPSRyKGUuc2l0ZSxsLnNpdGUpLFdyKGUpLHZvaWQgV3Iocik7aWYoIXIpcmV0dXJuIHZvaWQobC5lZGdlPSRyKGUuc2l0ZSxsLnNpdGUpKTtacihlKSxacihyKTt2YXIgdT1lLnNpdGUsYz11LngsaD11LnksZj10LngtYyxwPXQueS1oLGQ9ci5zaXRlLG09ZC54LWMsZz1kLnktaCx2PTIqKGYqZy1wKm0pLHk9ZipmK3AqcCxiPW0qbStnKmcseD17eDooZyp5LXAqYikvditjLHk6KGYqYi1tKnkpL3YraH07ZW4oci5lZGdlLHUsZCx4KSxsLmVkZ2U9JHIodSx0LG51bGwseCksci5lZGdlPSRyKHQsZCxudWxsLHgpLFdyKGUpLFdyKHIpfX1mdW5jdGlvbiBWcih0LGUpe3ZhciByPXQuc2l0ZSxuPXIueCxpPXIueSxvPWktZTtpZighbylyZXR1cm4gbjt2YXIgYT10LlA7aWYoIWEpcmV0dXJuLSgxLzApO3I9YS5zaXRlO3ZhciBzPXIueCxsPXIueSx1PWwtZTtpZighdSlyZXR1cm4gczt2YXIgYz1zLW4saD0xL28tMS91LGY9Yy91O3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCooYypjLygtMip1KS1sK3UvMitpLW8vMikpKS9oK246KG4rcykvMn1mdW5jdGlvbiBxcih0LGUpe3ZhciByPXQuTjtpZihyKXJldHVybiBWcihyLGUpO3ZhciBuPXQuc2l0ZTtyZXR1cm4gbi55PT09ZT9uLng6MS8wfWZ1bmN0aW9uIEdyKHQpe3RoaXMuc2l0ZT10LHRoaXMuZWRnZXM9W119ZnVuY3Rpb24gSHIodCl7Zm9yKHZhciBlLHIsbixpLG8sYSxzLGwsdSxjLGg9dFswXVswXSxmPXRbMV1bMF0scD10WzBdWzFdLGQ9dFsxXVsxXSxtPXNsLGc9bS5sZW5ndGg7Zy0tOylpZihvPW1bZ10sbyYmby5wcmVwYXJlKCkpZm9yKHM9by5lZGdlcyxsPXMubGVuZ3RoLGE9MDtsPmE7KWM9c1thXS5lbmQoKSxuPWMueCxpPWMueSx1PXNbKythJWxdLnN0YXJ0KCksZT11Lngscj11LnksKHdhKG4tZSk+TmF8fHdhKGktcik+TmEpJiYocy5zcGxpY2UoYSwwLG5ldyBybih0bihvLnNpdGUsYyx3YShuLWgpPE5hJiZkLWk+TmE/e3g6aCx5OndhKGUtaCk8TmE/cjpkfTp3YShpLWQpPE5hJiZmLW4+TmE/e3g6d2Eoci1kKTxOYT9lOmYseTpkfTp3YShuLWYpPE5hJiZpLXA+TmE/e3g6Zix5OndhKGUtZik8TmE/cjpwfTp3YShpLXApPE5hJiZuLWg+TmE/e3g6d2Eoci1wKTxOYT9lOmgseTpwfTpudWxsKSxvLnNpdGUsbnVsbCkpLCsrbCl9ZnVuY3Rpb24gWHIodCxlKXtyZXR1cm4gZS5hbmdsZS10LmFuZ2xlfWZ1bmN0aW9uIFlyKCl7b24odGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIFdyKHQpe3ZhciBlPXQuUCxyPXQuTjtpZihlJiZyKXt2YXIgbj1lLnNpdGUsaT10LnNpdGUsbz1yLnNpdGU7aWYobiE9PW8pe3ZhciBhPWkueCxzPWkueSxsPW4ueC1hLHU9bi55LXMsYz1vLngtYSxoPW8ueS1zLGY9MioobCpoLXUqYyk7aWYoIShmPj0tQmEpKXt2YXIgcD1sKmwrdSp1LGQ9YypjK2gqaCxtPShoKnAtdSpkKS9mLGc9KGwqZC1jKnApL2YsaD1nK3Msdj1mbC5wb3AoKXx8bmV3IFlyO3YuYXJjPXQsdi5zaXRlPWksdi54PW0rYSx2Lnk9aCtNYXRoLnNxcnQobSptK2cqZyksdi5jeT1oLHQuY2lyY2xlPXY7Zm9yKHZhciB5PW51bGwsYj1jbC5fO2I7KWlmKHYueTxiLnl8fHYueT09PWIueSYmdi54PD1iLngpe2lmKCFiLkwpe3k9Yi5QO2JyZWFrfWI9Yi5MfWVsc2V7aWYoIWIuUil7eT1iO2JyZWFrfWI9Yi5SfWNsLmluc2VydCh5LHYpLHl8fCh1bD12KX19fX1mdW5jdGlvbiBacih0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwodWw9ZS5OKSxjbC5yZW1vdmUoZSksZmwucHVzaChlKSxvbihlKSx0LmNpcmNsZT1udWxsKX1mdW5jdGlvbiBRcih0KXtmb3IodmFyIGUscj1hbCxuPUdlKHRbMF1bMF0sdFswXVsxXSx0WzFdWzBdLHRbMV1bMV0pLGk9ci5sZW5ndGg7aS0tOyllPXJbaV0sKCFLcihlLHQpfHwhbihlKXx8d2EoZS5hLngtZS5iLngpPE5hJiZ3YShlLmEueS1lLmIueSk8TmEpJiYoZS5hPWUuYj1udWxsLHIuc3BsaWNlKGksMSkpfWZ1bmN0aW9uIEtyKHQsZSl7dmFyIHI9dC5iO2lmKHIpcmV0dXJuITA7dmFyIG4saSxvPXQuYSxhPWVbMF1bMF0scz1lWzFdWzBdLGw9ZVswXVsxXSx1PWVbMV1bMV0sYz10LmwsaD10LnIsZj1jLngscD1jLnksZD1oLngsbT1oLnksZz0oZitkKS8yLHY9KHArbSkvMjtpZihtPT09cCl7aWYoYT5nfHxnPj1zKXJldHVybjtpZihmPmQpe2lmKG8pe2lmKG8ueT49dSlyZXR1cm59ZWxzZSBvPXt4OmcseTpsfTtyPXt4OmcseTp1fX1lbHNle2lmKG8pe2lmKG8ueTxsKXJldHVybn1lbHNlIG89e3g6Zyx5OnV9O3I9e3g6Zyx5Omx9fX1lbHNlIGlmKG49KGYtZCkvKG0tcCksaT12LW4qZywtMT5ufHxuPjEpaWYoZj5kKXtpZihvKXtpZihvLnk+PXUpcmV0dXJufWVsc2Ugbz17eDoobC1pKS9uLHk6bH07cj17eDoodS1pKS9uLHk6dX19ZWxzZXtpZihvKXtpZihvLnk8bClyZXR1cm59ZWxzZSBvPXt4Oih1LWkpL24seTp1fTtyPXt4OihsLWkpL24seTpsfX1lbHNlIGlmKG0+cCl7aWYobyl7aWYoby54Pj1zKXJldHVybn1lbHNlIG89e3g6YSx5Om4qYStpfTtyPXt4OnMseTpuKnMraX19ZWxzZXtpZihvKXtpZihvLng8YSlyZXR1cm59ZWxzZSBvPXt4OnMseTpuKnMraX07cj17eDphLHk6biphK2l9fXJldHVybiB0LmE9byx0LmI9ciwhMH1mdW5jdGlvbiBKcih0LGUpe3RoaXMubD10LHRoaXMucj1lLHRoaXMuYT10aGlzLmI9bnVsbH1mdW5jdGlvbiAkcih0LGUscixuKXt2YXIgaT1uZXcgSnIodCxlKTtyZXR1cm4gYWwucHVzaChpKSxyJiZlbihpLHQsZSxyKSxuJiZlbihpLGUsdCxuKSxzbFt0LmldLmVkZ2VzLnB1c2gobmV3IHJuKGksdCxlKSksc2xbZS5pXS5lZGdlcy5wdXNoKG5ldyBybihpLGUsdCkpLGl9ZnVuY3Rpb24gdG4odCxlLHIpe3ZhciBuPW5ldyBKcih0LG51bGwpO3JldHVybiBuLmE9ZSxuLmI9cixhbC5wdXNoKG4pLG59ZnVuY3Rpb24gZW4odCxlLHIsbil7dC5hfHx0LmI/dC5sPT09cj90LmI9bjp0LmE9bjoodC5hPW4sdC5sPWUsdC5yPXIpfWZ1bmN0aW9uIHJuKHQsZSxyKXt2YXIgbj10LmEsaT10LmI7dGhpcy5lZGdlPXQsdGhpcy5zaXRlPWUsdGhpcy5hbmdsZT1yP01hdGguYXRhbjIoci55LWUueSxyLngtZS54KTp0Lmw9PT1lP01hdGguYXRhbjIoaS54LW4ueCxuLnktaS55KTpNYXRoLmF0YW4yKG4ueC1pLngsaS55LW4ueSl9ZnVuY3Rpb24gbm4oKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBvbih0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIGFuKHQsZSl7dmFyIHI9ZSxuPWUuUixpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46dC5fPW4sbi5VPWksci5VPW4sci5SPW4uTCxyLlImJihyLlIuVT1yKSxuLkw9cn1mdW5jdGlvbiBzbih0LGUpe3ZhciByPWUsbj1lLkwsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOnQuXz1uLG4uVT1pLHIuVT1uLHIuTD1uLlIsci5MJiYoci5MLlU9ciksbi5SPXJ9ZnVuY3Rpb24gbG4odCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fWZ1bmN0aW9uIHVuKHQsZSl7dmFyIHIsbixpLG89dC5zb3J0KGNuKS5wb3AoKTtmb3IoYWw9W10sc2w9bmV3IEFycmF5KHQubGVuZ3RoKSxsbD1uZXcgbm4sY2w9bmV3IG5uOzspaWYoaT11bCxvJiYoIWl8fG8ueTxpLnl8fG8ueT09PWkueSYmby54PGkueCkpby54PT09ciYmby55PT09bnx8KHNsW28uaV09bmV3IEdyKG8pLFVyKG8pLHI9by54LG49by55KSxvPXQucG9wKCk7ZWxzZXtpZighaSlicmVhaztCcihpLmFyYyl9ZSYmKFFyKGUpLEhyKGUpKTt2YXIgYT17Y2VsbHM6c2wsZWRnZXM6YWx9O3JldHVybiBsbD1jbD1hbD1zbD1udWxsLGF9ZnVuY3Rpb24gY24odCxlKXtyZXR1cm4gZS55LXQueXx8ZS54LXQueH1mdW5jdGlvbiBobih0LGUscil7cmV0dXJuKHQueC1yLngpKihlLnktdC55KS0odC54LWUueCkqKHIueS10LnkpfWZ1bmN0aW9uIGZuKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gcG4odCl7cmV0dXJuIHQueX1mdW5jdGlvbiBkbigpe3JldHVybntsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbH19ZnVuY3Rpb24gbW4odCxlLHIsbixpLG8pe2lmKCF0KGUscixuLGksbykpe3ZhciBhPS41KihyK2kpLHM9LjUqKG4rbyksbD1lLm5vZGVzO2xbMF0mJm1uKHQsbFswXSxyLG4sYSxzKSxsWzFdJiZtbih0LGxbMV0sYSxuLGkscyksbFsyXSYmbW4odCxsWzJdLHIscyxhLG8pLGxbM10mJm1uKHQsbFszXSxhLHMsaSxvKX19ZnVuY3Rpb24gZ24odCxlLHIsbixpLG8sYSl7dmFyIHMsbD0xLzA7cmV0dXJuIGZ1bmN0aW9uIHUodCxjLGgsZixwKXtpZighKGM+b3x8aD5hfHxuPmZ8fGk+cCkpe2lmKGQ9dC5wb2ludCl7dmFyIGQsbT1lLXQueCxnPXItdC55LHY9bSptK2cqZztpZihsPnYpe3ZhciB5PU1hdGguc3FydChsPXYpO249ZS15LGk9ci15LG89ZSt5LGE9cit5LHM9ZH19Zm9yKHZhciBiPXQubm9kZXMseD0uNSooYytmKSxfPS41KihoK3ApLHc9ZT49eCxNPXI+PV8saz1NPDwxfHcsQT1rKzQ7QT5rOysraylpZih0PWJbMyZrXSlzd2l0Y2goMyZrKXtjYXNlIDA6dSh0LGMsaCx4LF8pO2JyZWFrO2Nhc2UgMTp1KHQseCxoLGYsXyk7YnJlYWs7Y2FzZSAyOnUodCxjLF8seCxwKTticmVhaztjYXNlIDM6dSh0LHgsXyxmLHApfX19KHQsbixpLG8sYSksc31mdW5jdGlvbiB2bih0LGUpe3Q9Y2EucmdiKHQpLGU9Y2EucmdiKGUpO3ZhciByPXQucixuPXQuZyxpPXQuYixvPWUuci1yLGE9ZS5nLW4scz1lLmItaTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIiMiK3d0KE1hdGgucm91bmQocitvKnQpKSt3dChNYXRoLnJvdW5kKG4rYSp0KSkrd3QoTWF0aC5yb3VuZChpK3MqdCkpfX1mdW5jdGlvbiB5bih0LGUpe3ZhciByLG49e30saT17fTtmb3IociBpbiB0KXIgaW4gZT9uW3JdPV9uKHRbcl0sZVtyXSk6aVtyXT10W3JdO2ZvcihyIGluIGUpciBpbiB0fHwoaVtyXT1lW3JdKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHIgaW4gbilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fWZ1bmN0aW9uIGJuKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gdCooMS1yKStlKnJ9fWZ1bmN0aW9uIHhuKHQsZSl7dmFyIHIsbixpLG89ZGwubGFzdEluZGV4PW1sLmxhc3RJbmRleD0wLGE9LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj1kbC5leGVjKHQpKSYmKG49bWwuZXhlYyhlKSk7KShpPW4uaW5kZXgpPm8mJihpPWUuc2xpY2UobyxpKSxzW2FdP3NbYV0rPWk6c1srK2FdPWkpLChyPXJbMF0pPT09KG49blswXSk/c1thXT9zW2FdKz1uOnNbKythXT1uOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OmJuKHIsbil9KSksbz1tbC5sYXN0SW5kZXg7cmV0dXJuIG88ZS5sZW5ndGgmJihpPWUuc2xpY2Uobyksc1thXT9zW2FdKz1pOnNbKythXT1pKSxzLmxlbmd0aDwyP2xbMF0/KGU9bFswXS54LGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gZX06KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtlPm47KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gX24odCxlKXtmb3IodmFyIHIsbj1jYS5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLW4+PTAmJiEocj1jYS5pbnRlcnBvbGF0b3JzW25dKHQsZSkpOyk7cmV0dXJuIHJ9ZnVuY3Rpb24gd24odCxlKXt2YXIgcixuPVtdLGk9W10sbz10Lmxlbmd0aCxhPWUubGVuZ3RoLHM9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihyPTA7cz5yOysrciluLnB1c2goX24odFtyXSxlW3JdKSk7Zm9yKDtvPnI7KytyKWlbcl09dFtyXTtmb3IoO2E+cjsrK3IpaVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3Iocj0wO3M+cjsrK3IpaVtyXT1uW3JdKHQpO3JldHVybiBpfX1mdW5jdGlvbiBNbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA+PWU/MDplPj0xPzE6dChlKX19ZnVuY3Rpb24ga24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAxLXQoMS1lKX19ZnVuY3Rpb24gQW4odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi41KiguNT5lP3QoMiplKToyLXQoMi0yKmUpKX19ZnVuY3Rpb24gVG4odCl7cmV0dXJuIHQqdH1mdW5jdGlvbiBFbih0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24gU24odCl7aWYoMD49dClyZXR1cm4gMDtpZih0Pj0xKXJldHVybiAxO3ZhciBlPXQqdCxyPWUqdDtyZXR1cm4gNCooLjU+dD9yOjMqKHQtZSkrci0uNzUpfWZ1bmN0aW9uIExuKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3coZSx0KX19ZnVuY3Rpb24gem4odCl7cmV0dXJuIDEtTWF0aC5jb3ModCpHYSl9ZnVuY3Rpb24gSW4odCl7cmV0dXJuIE1hdGgucG93KDIsMTAqKHQtMSkpfWZ1bmN0aW9uIFBuKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9ZnVuY3Rpb24gQ24odCxlKXt2YXIgcjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT0uNDUpLGFyZ3VtZW50cy5sZW5ndGg/cj1lL1ZhKk1hdGguYXNpbigxL3QpOih0PTEscj1lLzQpLGZ1bmN0aW9uKG4pe3JldHVybiAxK3QqTWF0aC5wb3coMiwtMTAqbikqTWF0aC5zaW4oKG4tcikqVmEvZSl9fWZ1bmN0aW9uIFJuKHQpe3JldHVybiB0fHwodD0xLjcwMTU4KSxmdW5jdGlvbihlKXtyZXR1cm4gZSplKigodCsxKSplLXQpfX1mdW5jdGlvbiBqbih0KXtyZXR1cm4gMS8yLjc1PnQ/Ny41NjI1KnQqdDoyLzIuNzU+dD83LjU2MjUqKHQtPTEuNS8yLjc1KSp0Ky43NToyLjUvMi43NT50PzcuNTYyNSoodC09Mi4yNS8yLjc1KSp0Ky45Mzc1OjcuNTYyNSoodC09Mi42MjUvMi43NSkqdCsuOTg0Mzc1fWZ1bmN0aW9uIERuKHQsZSl7dD1jYS5oY2wodCksZT1jYS5oY2woZSk7dmFyIHI9dC5oLG49dC5jLGk9dC5sLG89ZS5oLXIsYT1lLmMtbixzPWUubC1pO3JldHVybiBpc05hTihhKSYmKGE9MCxuPWlzTmFOKG4pP2UuYzpuKSxpc05hTihvKT8obz0wLHI9aXNOYU4ocik/ZS5oOnIpOm8+MTgwP28tPTM2MDotMTgwPm8mJihvKz0zNjApLGZ1bmN0aW9uKHQpe3JldHVybiBmdChyK28qdCxuK2EqdCxpK3MqdCkrIiJ9fWZ1bmN0aW9uIE9uKHQsZSl7dD1jYS5oc2wodCksZT1jYS5oc2woZSk7dmFyIHI9dC5oLG49dC5zLGk9dC5sLG89ZS5oLXIsYT1lLnMtbixzPWUubC1pO3JldHVybiBpc05hTihhKSYmKGE9MCxuPWlzTmFOKG4pP2UuczpuKSxpc05hTihvKT8obz0wLHI9aXNOYU4ocik/ZS5oOnIpOm8+MTgwP28tPTM2MDotMTgwPm8mJihvKz0zNjApLGZ1bmN0aW9uKHQpe3JldHVybiBjdChyK28qdCxuK2EqdCxpK3MqdCkrIiJ9fWZ1bmN0aW9uIEZuKHQsZSl7dD1jYS5sYWIodCksZT1jYS5sYWIoZSk7dmFyIHI9dC5sLG49dC5hLGk9dC5iLG89ZS5sLXIsYT1lLmEtbixzPWUuYi1pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZHQocitvKnQsbithKnQsaStzKnQpKyIifX1mdW5jdGlvbiBObih0LGUpe3JldHVybiBlLT10LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHQrZSpyKX19ZnVuY3Rpb24gQm4odCl7dmFyIGU9W3QuYSx0LmJdLHI9W3QuYyx0LmRdLG49Vm4oZSksaT1VbihlLHIpLG89Vm4ocW4ocixlLC1pKSl8fDA7ZVswXSpyWzFdPHJbMF0qZVsxXSYmKGVbMF0qPS0xLGVbMV0qPS0xLG4qPS0xLGkqPS0xKSx0aGlzLnJvdGF0ZT0obj9NYXRoLmF0YW4yKGVbMV0sZVswXSk6TWF0aC5hdGFuMigtclswXSxyWzFdKSkqWGEsdGhpcy50cmFuc2xhdGU9W3QuZSx0LmZdLHRoaXMuc2NhbGU9W24sb10sdGhpcy5za2V3PW8/TWF0aC5hdGFuMihpLG8pKlhhOjB9ZnVuY3Rpb24gVW4odCxlKXsKcmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV19ZnVuY3Rpb24gVm4odCl7dmFyIGU9TWF0aC5zcXJ0KFVuKHQsdCkpO3JldHVybiBlJiYodFswXS89ZSx0WzFdLz1lKSxlfWZ1bmN0aW9uIHFuKHQsZSxyKXtyZXR1cm4gdFswXSs9ciplWzBdLHRbMV0rPXIqZVsxXSx0fWZ1bmN0aW9uIEduKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIsIjoiIn1mdW5jdGlvbiBIbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaCgidHJhbnNsYXRlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO24ucHVzaCh7aTppLTQseDpibih0WzBdLGVbMF0pfSx7aTppLTIseDpibih0WzFdLGVbMV0pfSl9ZWxzZShlWzBdfHxlWzFdKSYmci5wdXNoKCJ0cmFuc2xhdGUoIitlKyIpIil9ZnVuY3Rpb24gWG4odCxlLHIsbil7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG4ucHVzaCh7aTpyLnB1c2goR24ocikrInJvdGF0ZSgiLG51bGwsIikiKS0yLHg6Ym4odCxlKX0pKTplJiZyLnB1c2goR24ocikrInJvdGF0ZSgiK2UrIikiKX1mdW5jdGlvbiBZbih0LGUscixuKXt0IT09ZT9uLnB1c2goe2k6ci5wdXNoKEduKHIpKyJza2V3WCgiLG51bGwsIikiKS0yLHg6Ym4odCxlKX0pOmUmJnIucHVzaChHbihyKSsic2tld1goIitlKyIpIil9ZnVuY3Rpb24gV24odCxlLHIsbil7aWYodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdKXt2YXIgaT1yLnB1c2goR24ocikrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO24ucHVzaCh7aTppLTQseDpibih0WzBdLGVbMF0pfSx7aTppLTIseDpibih0WzFdLGVbMV0pfSl9ZWxzZSAxPT09ZVswXSYmMT09PWVbMV18fHIucHVzaChHbihyKSsic2NhbGUoIitlKyIpIil9ZnVuY3Rpb24gWm4odCxlKXt2YXIgcj1bXSxuPVtdO3JldHVybiB0PWNhLnRyYW5zZm9ybSh0KSxlPWNhLnRyYW5zZm9ybShlKSxIbih0LnRyYW5zbGF0ZSxlLnRyYW5zbGF0ZSxyLG4pLFhuKHQucm90YXRlLGUucm90YXRlLHIsbiksWW4odC5za2V3LGUuc2tldyxyLG4pLFduKHQuc2NhbGUsZS5zY2FsZSxyLG4pLHQ9ZT1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxpPS0xLG89bi5sZW5ndGg7KytpPG87KXJbKGU9bltpXSkuaV09ZS54KHQpO3JldHVybiByLmpvaW4oIiIpfX1mdW5jdGlvbiBRbih0LGUpe3JldHVybiBlPShlLT10PSt0KXx8MS9lLGZ1bmN0aW9uKHIpe3JldHVybihyLXQpL2V9fWZ1bmN0aW9uIEtuKHQsZSl7cmV0dXJuIGU9KGUtPXQ9K3QpfHwxL2UsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSwoci10KS9lKSl9fWZ1bmN0aW9uIEpuKHQpe2Zvcih2YXIgZT10LnNvdXJjZSxyPXQudGFyZ2V0LG49dGkoZSxyKSxpPVtlXTtlIT09bjspZT1lLnBhcmVudCxpLnB1c2goZSk7Zm9yKHZhciBvPWkubGVuZ3RoO3IhPT1uOylpLnNwbGljZShvLDAscikscj1yLnBhcmVudDtyZXR1cm4gaX1mdW5jdGlvbiAkbih0KXtmb3IodmFyIGU9W10scj10LnBhcmVudDtudWxsIT1yOyllLnB1c2godCksdD1yLHI9ci5wYXJlbnQ7cmV0dXJuIGUucHVzaCh0KSxlfWZ1bmN0aW9uIHRpKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7Zm9yKHZhciByPSRuKHQpLG49JG4oZSksaT1yLnBvcCgpLG89bi5wb3AoKSxhPW51bGw7aT09PW87KWE9aSxpPXIucG9wKCksbz1uLnBvcCgpO3JldHVybiBhfWZ1bmN0aW9uIGVpKHQpe3QuZml4ZWR8PTJ9ZnVuY3Rpb24gcmkodCl7dC5maXhlZCY9LTd9ZnVuY3Rpb24gbmkodCl7dC5maXhlZHw9NCx0LnB4PXQueCx0LnB5PXQueX1mdW5jdGlvbiBpaSh0KXt0LmZpeGVkJj0tNX1mdW5jdGlvbiBvaSh0LGUscil7dmFyIG49MCxpPTA7aWYodC5jaGFyZ2U9MCwhdC5sZWFmKWZvcih2YXIgbyxhPXQubm9kZXMscz1hLmxlbmd0aCxsPS0xOysrbDxzOylvPWFbbF0sbnVsbCE9byYmKG9pKG8sZSxyKSx0LmNoYXJnZSs9by5jaGFyZ2Usbis9by5jaGFyZ2Uqby5jeCxpKz1vLmNoYXJnZSpvLmN5KTtpZih0LnBvaW50KXt0LmxlYWZ8fCh0LnBvaW50LngrPU1hdGgucmFuZG9tKCktLjUsdC5wb2ludC55Kz1NYXRoLnJhbmRvbSgpLS41KTt2YXIgdT1lKnJbdC5wb2ludC5pbmRleF07dC5jaGFyZ2UrPXQucG9pbnRDaGFyZ2U9dSxuKz11KnQucG9pbnQueCxpKz11KnQucG9pbnQueX10LmN4PW4vdC5jaGFyZ2UsdC5jeT1pL3QuY2hhcmdlfWZ1bmN0aW9uIGFpKHQsZSl7cmV0dXJuIGNhLnJlYmluZCh0LGUsInNvcnQiLCJjaGlsZHJlbiIsInZhbHVlIiksdC5ub2Rlcz10LHQubGlua3M9ZmksdH1mdW5jdGlvbiBzaSh0LGUpe2Zvcih2YXIgcj1bdF07bnVsbCE9KHQ9ci5wb3AoKSk7KWlmKGUodCksKGk9dC5jaGlsZHJlbikmJihuPWkubGVuZ3RoKSlmb3IodmFyIG4saTstLW4+PTA7KXIucHVzaChpW25dKX1mdW5jdGlvbiBsaSh0LGUpe2Zvcih2YXIgcj1bdF0sbj1bXTtudWxsIT0odD1yLnBvcCgpKTspaWYobi5wdXNoKHQpLChvPXQuY2hpbGRyZW4pJiYoaT1vLmxlbmd0aCkpZm9yKHZhciBpLG8sYT0tMTsrK2E8aTspci5wdXNoKG9bYV0pO2Zvcig7bnVsbCE9KHQ9bi5wb3AoKSk7KWUodCl9ZnVuY3Rpb24gdWkodCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24gY2kodCl7cmV0dXJuIHQudmFsdWV9ZnVuY3Rpb24gaGkodCxlKXtyZXR1cm4gZS52YWx1ZS10LnZhbHVlfWZ1bmN0aW9uIGZpKHQpe3JldHVybiBjYS5tZXJnZSh0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC5jaGlsZHJlbnx8W10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnQsdGFyZ2V0OmV9fSl9KSl9ZnVuY3Rpb24gcGkodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBkaSh0KXtyZXR1cm4gdC55fWZ1bmN0aW9uIG1pKHQsZSxyKXt0LnkwPWUsdC55PXJ9ZnVuY3Rpb24gZ2kodCl7cmV0dXJuIGNhLnJhbmdlKHQubGVuZ3RoKX1mdW5jdGlvbiB2aSh0KXtmb3IodmFyIGU9LTEscj10WzBdLmxlbmd0aCxuPVtdOysrZTxyOyluW2VdPTA7cmV0dXJuIG59ZnVuY3Rpb24geWkodCl7Zm9yKHZhciBlLHI9MSxuPTAsaT10WzBdWzFdLG89dC5sZW5ndGg7bz5yOysrcikoZT10W3JdWzFdKT5pJiYobj1yLGk9ZSk7cmV0dXJuIG59ZnVuY3Rpb24gYmkodCl7cmV0dXJuIHQucmVkdWNlKHhpLDApfWZ1bmN0aW9uIHhpKHQsZSl7cmV0dXJuIHQrZVsxXX1mdW5jdGlvbiBfaSh0LGUpe3JldHVybiB3aSh0LE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIrMSkpfWZ1bmN0aW9uIHdpKHQsZSl7Zm9yKHZhciByPS0xLG49K3RbMF0saT0odFsxXS1uKS9lLG89W107KytyPD1lOylvW3JdPWkqcituO3JldHVybiBvfWZ1bmN0aW9uIE1pKHQpe3JldHVybltjYS5taW4odCksY2EubWF4KHQpXX1mdW5jdGlvbiBraSh0LGUpe3JldHVybiB0LnZhbHVlLWUudmFsdWV9ZnVuY3Rpb24gQWkodCxlKXt2YXIgcj10Ll9wYWNrX25leHQ7dC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXQsZS5fcGFja19uZXh0PXIsci5fcGFja19wcmV2PWV9ZnVuY3Rpb24gVGkodCxlKXt0Ll9wYWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dH1mdW5jdGlvbiBFaSh0LGUpe3ZhciByPWUueC10Lngsbj1lLnktdC55LGk9dC5yK2UucjtyZXR1cm4uOTk5KmkqaT5yKnIrbipufWZ1bmN0aW9uIFNpKHQpe2Z1bmN0aW9uIGUodCl7Yz1NYXRoLm1pbih0LngtdC5yLGMpLGg9TWF0aC5tYXgodC54K3QucixoKSxmPU1hdGgubWluKHQueS10LnIsZikscD1NYXRoLm1heCh0LnkrdC5yLHApfWlmKChyPXQuY2hpbGRyZW4pJiYodT1yLmxlbmd0aCkpe3ZhciByLG4saSxvLGEscyxsLHUsYz0xLzAsaD0tKDEvMCksZj0xLzAscD0tKDEvMCk7aWYoci5mb3JFYWNoKExpKSxuPXJbMF0sbi54PS1uLnIsbi55PTAsZShuKSx1PjEmJihpPXJbMV0saS54PWkucixpLnk9MCxlKGkpLHU+MikpZm9yKG89clsyXSxQaShuLGksbyksZShvKSxBaShuLG8pLG4uX3BhY2tfcHJldj1vLEFpKG8saSksaT1uLl9wYWNrX25leHQsYT0zO3U+YTthKyspe1BpKG4saSxvPXJbYV0pO3ZhciBkPTAsbT0xLGc9MTtmb3Iocz1pLl9wYWNrX25leHQ7cyE9PWk7cz1zLl9wYWNrX25leHQsbSsrKWlmKEVpKHMsbykpe2Q9MTticmVha31pZigxPT1kKWZvcihsPW4uX3BhY2tfcHJldjtsIT09cy5fcGFja19wcmV2JiYhRWkobCxvKTtsPWwuX3BhY2tfcHJldixnKyspO2Q/KGc+bXx8bT09ZyYmaS5yPG4ucj9UaShuLGk9cyk6VGkobj1sLGkpLGEtLSk6KEFpKG4sbyksaT1vLGUobykpfXZhciB2PShjK2gpLzIseT0oZitwKS8yLGI9MDtmb3IoYT0wO3U+YTthKyspbz1yW2FdLG8ueC09dixvLnktPXksYj1NYXRoLm1heChiLG8ucitNYXRoLnNxcnQoby54Km8ueCtvLnkqby55KSk7dC5yPWIsci5mb3JFYWNoKHppKX19ZnVuY3Rpb24gTGkodCl7dC5fcGFja19uZXh0PXQuX3BhY2tfcHJldj10fWZ1bmN0aW9uIHppKHQpe2RlbGV0ZSB0Ll9wYWNrX25leHQsZGVsZXRlIHQuX3BhY2tfcHJldn1mdW5jdGlvbiBJaSh0LGUscixuKXt2YXIgaT10LmNoaWxkcmVuO2lmKHQueD1lKz1uKnQueCx0Lnk9cis9bip0LnksdC5yKj1uLGkpZm9yKHZhciBvPS0xLGE9aS5sZW5ndGg7KytvPGE7KUlpKGlbb10sZSxyLG4pfWZ1bmN0aW9uIFBpKHQsZSxyKXt2YXIgbj10LnIrci5yLGk9ZS54LXQueCxvPWUueS10Lnk7aWYobiYmKGl8fG8pKXt2YXIgYT1lLnIrci5yLHM9aSppK28qbzthKj1hLG4qPW47dmFyIGw9LjUrKG4tYSkvKDIqcyksdT1NYXRoLnNxcnQoTWF0aC5tYXgoMCwyKmEqKG4rcyktKG4tPXMpKm4tYSphKSkvKDIqcyk7ci54PXQueCtsKmkrdSpvLHIueT10LnkrbCpvLXUqaX1lbHNlIHIueD10LngrbixyLnk9dC55fWZ1bmN0aW9uIENpKHQsZSl7cmV0dXJuIHQucGFyZW50PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gUmkodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZS5sZW5ndGg/ZVswXTp0LnR9ZnVuY3Rpb24gamkodCl7dmFyIGUscj10LmNoaWxkcmVuO3JldHVybihlPXIubGVuZ3RoKT9yW2UtMV06dC50fWZ1bmN0aW9uIERpKHQsZSxyKXt2YXIgbj1yLyhlLmktdC5pKTtlLmMtPW4sZS5zKz1yLHQuYys9bixlLnorPXIsZS5tKz1yfWZ1bmN0aW9uIE9pKHQpe2Zvcih2YXIgZSxyPTAsbj0wLGk9dC5jaGlsZHJlbixvPWkubGVuZ3RoOy0tbz49MDspZT1pW29dLGUueis9cixlLm0rPXIscis9ZS5zKyhuKz1lLmMpfWZ1bmN0aW9uIEZpKHQsZSxyKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpyfWZ1bmN0aW9uIE5pKHQpe3JldHVybiAxK2NhLm1heCh0LGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KX1mdW5jdGlvbiBCaSh0KXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLnh9LDApL3QubGVuZ3RofWZ1bmN0aW9uIFVpKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGUmJmUubGVuZ3RoP1VpKGVbMF0pOnR9ZnVuY3Rpb24gVmkodCl7dmFyIGUscj10LmNoaWxkcmVuO3JldHVybiByJiYoZT1yLmxlbmd0aCk/VmkocltlLTFdKTp0fWZ1bmN0aW9uIHFpKHQpe3JldHVybnt4OnQueCx5OnQueSxkeDp0LmR4LGR5OnQuZHl9fWZ1bmN0aW9uIEdpKHQsZSl7dmFyIHI9dC54K2VbM10sbj10LnkrZVswXSxpPXQuZHgtZVsxXS1lWzNdLG89dC5keS1lWzBdLWVbMl07cmV0dXJuIDA+aSYmKHIrPWkvMixpPTApLDA+byYmKG4rPW8vMixvPTApLHt4OnIseTpuLGR4OmksZHk6b319ZnVuY3Rpb24gSGkodCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIHI+ZT9bZSxyXTpbcixlXX1mdW5jdGlvbiBYaSh0KXtyZXR1cm4gdC5yYW5nZUV4dGVudD90LnJhbmdlRXh0ZW50KCk6SGkodC5yYW5nZSgpKX1mdW5jdGlvbiBZaSh0LGUscixuKXt2YXIgaT1yKHRbMF0sdFsxXSksbz1uKGVbMF0sZVsxXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodCkpfX1mdW5jdGlvbiBXaSh0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLTEsbz10W25dLGE9dFtpXTtyZXR1cm4gbz5hJiYocj1uLG49aSxpPXIscj1vLG89YSxhPXIpLHRbbl09ZS5mbG9vcihvKSx0W2ldPWUuY2VpbChhKSx0fWZ1bmN0aW9uIFppKHQpe3JldHVybiB0P3tmbG9vcjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5mbG9vcihlL3QpKnR9LGNlaWw6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguY2VpbChlL3QpKnR9fTpUbH1mdW5jdGlvbiBRaSh0LGUscixuKXt2YXIgaT1bXSxvPVtdLGE9MCxzPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xO2Zvcih0W3NdPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTsrK2E8PXM7KWkucHVzaChyKHRbYS0xXSx0W2FdKSksby5wdXNoKG4oZVthLTFdLGVbYV0pKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9Y2EuYmlzZWN0KHQsZSwxLHMpLTE7cmV0dXJuIG9bcl0oaVtyXShlKSl9fWZ1bmN0aW9uIEtpKHQsZSxyLG4pe2Z1bmN0aW9uIGkoKXt2YXIgaT1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk+Mj9RaTpZaSxsPW4/S246UW47cmV0dXJuIGE9aSh0LGUsbCxyKSxzPWkoZSx0LGwsX24pLG99ZnVuY3Rpb24gbyh0KXtyZXR1cm4gYSh0KX12YXIgYSxzO3JldHVybiBvLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gcyh0KX0sby5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZS5tYXAoTnVtYmVyKSxpKCkpOnR9LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxpKCkpOmV9LG8ucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gby5yYW5nZSh0KS5pbnRlcnBvbGF0ZShObil9LG8uY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxpKCkpOm59LG8uaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKCkpOnJ9LG8udGlja3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGVvKHQsZSl9LG8udGlja0Zvcm1hdD1mdW5jdGlvbihlLHIpe3JldHVybiBybyh0LGUscil9LG8ubmljZT1mdW5jdGlvbihlKXtyZXR1cm4gJGkodCxlKSxpKCl9LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBLaSh0LGUscixuKX0saSgpfWZ1bmN0aW9uIEppKHQsZSl7cmV0dXJuIGNhLnJlYmluZCh0LGUsInJhbmdlIiwicmFuZ2VSb3VuZCIsImludGVycG9sYXRlIiwiY2xhbXAiKX1mdW5jdGlvbiAkaSh0LGUpe3JldHVybiBXaSh0LFppKHRvKHQsZSlbMl0pKSxXaSh0LFppKHRvKHQsZSlbMl0pKSx0fWZ1bmN0aW9uIHRvKHQsZSl7bnVsbD09ZSYmKGU9MTApO3ZhciByPUhpKHQpLG49clsxXS1yWzBdLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhuL2UpL01hdGguTE4xMCkpLG89ZS9uKmk7cmV0dXJuLjE1Pj1vP2kqPTEwOi4zNT49bz9pKj01Oi43NT49byYmKGkqPTIpLHJbMF09TWF0aC5jZWlsKHJbMF0vaSkqaSxyWzFdPU1hdGguZmxvb3IoclsxXS9pKSppKy41KmksclsyXT1pLHJ9ZnVuY3Rpb24gZW8odCxlKXtyZXR1cm4gY2EucmFuZ2UuYXBwbHkoY2EsdG8odCxlKSl9ZnVuY3Rpb24gcm8odCxlLHIpe3ZhciBuPXRvKHQsZSk7aWYocil7dmFyIGk9ZHMuZXhlYyhyKTtpZihpLnNoaWZ0KCksInMiPT09aVs4XSl7dmFyIG89Y2EuZm9ybWF0UHJlZml4KE1hdGgubWF4KHdhKG5bMF0pLHdhKG5bMV0pKSk7cmV0dXJuIGlbN118fChpWzddPSIuIitubyhvLnNjYWxlKG5bMl0pKSksaVs4XT0iZiIscj1jYS5mb3JtYXQoaS5qb2luKCIiKSksZnVuY3Rpb24odCl7cmV0dXJuIHIoby5zY2FsZSh0KSkrby5zeW1ib2x9fWlbN118fChpWzddPSIuIitpbyhpWzhdLG4pKSxyPWkuam9pbigiIil9ZWxzZSByPSIsLiIrbm8oblsyXSkrImYiO3JldHVybiBjYS5mb3JtYXQocil9ZnVuY3Rpb24gbm8odCl7cmV0dXJuLU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjEwKy4wMSl9ZnVuY3Rpb24gaW8odCxlKXt2YXIgcj1ubyhlWzJdKTtyZXR1cm4gdCBpbiBFbD9NYXRoLmFicyhyLW5vKE1hdGgubWF4KHdhKGVbMF0pLHdhKGVbMV0pKSkpKyArKCJlIiE9PXQpOnItMiooIiUiPT09dCl9ZnVuY3Rpb24gb28odCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4ocj9NYXRoLmxvZygwPnQ/MDp0KTotTWF0aC5sb2codD4wPzA6LXQpKS9NYXRoLmxvZyhlKX1mdW5jdGlvbiBvKHQpe3JldHVybiByP01hdGgucG93KGUsdCk6LU1hdGgucG93KGUsLXQpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIHQoaShlKSl9cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKGUpe3JldHVybiBvKHQuaW52ZXJ0KGUpKX0sYS5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZVswXT49MCx0LmRvbWFpbigobj1lLm1hcChOdW1iZXIpKS5tYXAoaSkpLGEpOm59LGEuYmFzZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rcix0LmRvbWFpbihuLm1hcChpKSksYSk6ZX0sYS5uaWNlPWZ1bmN0aW9uKCl7dmFyIGU9V2kobi5tYXAoaSkscj9NYXRoOkxsKTtyZXR1cm4gdC5kb21haW4oZSksbj1lLm1hcChvKSxhfSxhLnRpY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9SGkobiksYT1bXSxzPXRbMF0sbD10WzFdLHU9TWF0aC5mbG9vcihpKHMpKSxjPU1hdGguY2VpbChpKGwpKSxoPWUlMT8yOmU7aWYoaXNGaW5pdGUoYy11KSl7aWYocil7Zm9yKDtjPnU7dSsrKWZvcih2YXIgZj0xO2g+ZjtmKyspYS5wdXNoKG8odSkqZik7YS5wdXNoKG8odSkpfWVsc2UgZm9yKGEucHVzaChvKHUpKTt1Kys8YzspZm9yKHZhciBmPWgtMTtmPjA7Zi0tKWEucHVzaChvKHUpKmYpO2Zvcih1PTA7YVt1XTxzO3UrKyk7Zm9yKGM9YS5sZW5ndGg7YVtjLTFdPmw7Yy0tKTthPWEuc2xpY2UodSxjKX1yZXR1cm4gYX0sYS50aWNrRm9ybWF0PWZ1bmN0aW9uKHQscil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIFNsO2FyZ3VtZW50cy5sZW5ndGg8Mj9yPVNsOiJmdW5jdGlvbiIhPXR5cGVvZiByJiYocj1jYS5mb3JtYXQocikpO3ZhciBuPU1hdGgubWF4KDEsZSp0L2EudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgYT10L28oTWF0aC5yb3VuZChpKHQpKSk7cmV0dXJuIGUtLjU+YSplJiYoYSo9ZSksbj49YT9yKHQpOiIifX0sYS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG9vKHQuY29weSgpLGUscixuKX0sSmkoYSx0KX1mdW5jdGlvbiBhbyh0LGUscil7ZnVuY3Rpb24gbihlKXtyZXR1cm4gdChpKGUpKX12YXIgaT1zbyhlKSxvPXNvKDEvZSk7cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKGUpe3JldHVybiBvKHQuaW52ZXJ0KGUpKX0sbi5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQuZG9tYWluKChyPWUubWFwKE51bWJlcikpLm1hcChpKSksbik6cn0sbi50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gZW8ocix0KX0sbi50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJvKHIsdCxlKX0sbi5uaWNlPWZ1bmN0aW9uKHQpe3JldHVybiBuLmRvbWFpbigkaShyLHQpKX0sbi5leHBvbmVudD1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1zbyhlPWEpLG89c28oMS9lKSx0LmRvbWFpbihyLm1hcChpKSksbik6ZX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGFvKHQuY29weSgpLGUscil9LEppKG4sdCl9ZnVuY3Rpb24gc28odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAwPmU/LU1hdGgucG93KC1lLHQpOk1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIGxvKHQsZSl7ZnVuY3Rpb24gcihyKXtyZXR1cm4gb1soKGkuZ2V0KHIpfHwoInJhbmdlIj09PWUudD9pLnNldChyLHQucHVzaChyKSk6TmFOKSktMSklby5sZW5ndGhdfWZ1bmN0aW9uIG4oZSxyKXtyZXR1cm4gY2EucmFuZ2UodC5sZW5ndGgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZStyKnR9KX12YXIgaSxvLGE7cmV0dXJuIHIuZG9tYWluPWZ1bmN0aW9uKG4pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0O3Q9W10saT1uZXcgaDtmb3IodmFyIG8sYT0tMSxzPW4ubGVuZ3RoOysrYTxzOylpLmhhcyhvPW5bYV0pfHxpLnNldChvLHQucHVzaChvKSk7cmV0dXJuIHJbZS50XS5hcHBseShyLGUuYSl9LHIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxhPTAsZT17dDoicmFuZ2UiLGE6YXJndW1lbnRzfSxyKTpvfSxyLnJhbmdlUG9pbnRzPWZ1bmN0aW9uKGkscyl7YXJndW1lbnRzLmxlbmd0aDwyJiYocz0wKTt2YXIgbD1pWzBdLHU9aVsxXSxjPXQubGVuZ3RoPDI/KGw9KGwrdSkvMiwwKToodS1sKS8odC5sZW5ndGgtMStzKTtyZXR1cm4gbz1uKGwrYypzLzIsYyksYT0wLGU9e3Q6InJhbmdlUG9pbnRzIixhOmFyZ3VtZW50c30scn0sci5yYW5nZVJvdW5kUG9pbnRzPWZ1bmN0aW9uKGkscyl7YXJndW1lbnRzLmxlbmd0aDwyJiYocz0wKTt2YXIgbD1pWzBdLHU9aVsxXSxjPXQubGVuZ3RoPDI/KGw9dT1NYXRoLnJvdW5kKChsK3UpLzIpLDApOih1LWwpLyh0Lmxlbmd0aC0xK3MpfDA7cmV0dXJuIG89bihsK01hdGgucm91bmQoYypzLzIrKHUtbC0odC5sZW5ndGgtMStzKSpjKS8yKSxjKSxhPTAsZT17dDoicmFuZ2VSb3VuZFBvaW50cyIsYTphcmd1bWVudHN9LHJ9LHIucmFuZ2VCYW5kcz1mdW5jdGlvbihpLHMsbCl7YXJndW1lbnRzLmxlbmd0aDwyJiYocz0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihsPXMpO3ZhciB1PWlbMV08aVswXSxjPWlbdS0wXSxoPWlbMS11XSxmPShoLWMpLyh0Lmxlbmd0aC1zKzIqbCk7cmV0dXJuIG89bihjK2YqbCxmKSx1JiZvLnJldmVyc2UoKSxhPWYqKDEtcyksZT17dDoicmFuZ2VCYW5kcyIsYTphcmd1bWVudHN9LHJ9LHIucmFuZ2VSb3VuZEJhbmRzPWZ1bmN0aW9uKGkscyxsKXthcmd1bWVudHMubGVuZ3RoPDImJihzPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGw9cyk7dmFyIHU9aVsxXTxpWzBdLGM9aVt1LTBdLGg9aVsxLXVdLGY9TWF0aC5mbG9vcigoaC1jKS8odC5sZW5ndGgtcysyKmwpKTtyZXR1cm4gbz1uKGMrTWF0aC5yb3VuZCgoaC1jLSh0Lmxlbmd0aC1zKSpmKS8yKSxmKSx1JiZvLnJldmVyc2UoKSxhPU1hdGgucm91bmQoZiooMS1zKSksZT17dDoicmFuZ2VSb3VuZEJhbmRzIixhOmFyZ3VtZW50c30scn0sci5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sci5yYW5nZUV4dGVudD1mdW5jdGlvbigpe3JldHVybiBIaShlLmFbMF0pfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbG8odCxlKX0sci5kb21haW4odCl9ZnVuY3Rpb24gdW8odCxlKXtmdW5jdGlvbiByKCl7dmFyIHI9MCxpPWUubGVuZ3RoO2ZvcihzPVtdOysrcjxpOylzW3ItMV09Y2EucXVhbnRpbGUodCxyL2kpO3JldHVybiBufWZ1bmN0aW9uIG4odCl7cmV0dXJuIGlzTmFOKHQ9K3QpP3ZvaWQgMDplW2NhLmJpc2VjdChzLHQpXX12YXIgcztyZXR1cm4gbi5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZS5tYXAobykuZmlsdGVyKGEpLnNvcnQoaSkscigpKTp0fSxuLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQscigpKTplfSxuLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBzfSxuLmludmVydEV4dGVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj1lLmluZGV4T2YociksMD5yP1tOYU4sTmFOXTpbcj4wP3Nbci0xXTp0WzBdLHI8cy5sZW5ndGg/c1tyXTp0W3QubGVuZ3RoLTFdXX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHVvKHQsZSl9LHIoKX1mdW5jdGlvbiBjbyh0LGUscil7ZnVuY3Rpb24gbihlKXtyZXR1cm4gcltNYXRoLm1heCgwLE1hdGgubWluKGEsTWF0aC5mbG9vcihvKihlLXQpKSkpXX1mdW5jdGlvbiBpKCl7cmV0dXJuIG89ci5sZW5ndGgvKGUtdCksYT1yLmxlbmd0aC0xLG59dmFyIG8sYTtyZXR1cm4gbi5kb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K3JbMF0sZT0rcltyLmxlbmd0aC0xXSxpKCkpOlt0LGVdfSxuLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSgpKTpyfSxuLmludmVydEV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gZT1yLmluZGV4T2YoZSksZT0wPmU/TmFOOmUvbyt0LFtlLGUrMS9vXX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvKHQsZSxyKX0saSgpfWZ1bmN0aW9uIGhvKHQsZSl7ZnVuY3Rpb24gcihyKXtyZXR1cm4gcj49cj9lW2NhLmJpc2VjdCh0LHIpXTp2b2lkIDB9cmV0dXJuIHIuZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUscik6dH0sci5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHIpOmV9LHIuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPWUuaW5kZXhPZihyKSxbdFtyLTFdLHRbcl1dfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gaG8odCxlKX0scn1mdW5jdGlvbiBmbyh0KXtmdW5jdGlvbiBlKHQpe3JldHVybit0fXJldHVybiBlLmludmVydD1lLGUuZG9tYWluPWUucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ci5tYXAoZSksZSk6dH0sZS50aWNrcz1mdW5jdGlvbihlKXtyZXR1cm4gZW8odCxlKX0sZS50aWNrRm9ybWF0PWZ1bmN0aW9uKGUscil7cmV0dXJuIHJvKHQsZSxyKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGZvKHQpfSxlfWZ1bmN0aW9uIHBvKCl7cmV0dXJuIDB9ZnVuY3Rpb24gbW8odCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gZ28odCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gdm8odCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiB5byh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBibyh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiB4byh0LGUscixuKXtyZXR1cm4odC1yKSplLShlLW4pKnQ+MD8wOjF9ZnVuY3Rpb24gX28odCxlLHIsbixpKXt2YXIgbz10WzBdLWVbMF0sYT10WzFdLWVbMV0scz0oaT9uOi1uKS9NYXRoLnNxcnQobypvK2EqYSksbD1zKmEsdT0tcypvLGM9dFswXStsLGg9dFsxXSt1LGY9ZVswXStsLHA9ZVsxXSt1LGQ9KGMrZikvMixtPShoK3ApLzIsZz1mLWMsdj1wLWgseT1nKmcrdip2LGI9ci1uLHg9YypwLWYqaCxfPSgwPnY/LTE6MSkqTWF0aC5zcXJ0KE1hdGgubWF4KDAsYipiKnkteCp4KSksdz0oeCp2LWcqXykveSxNPSgteCpnLXYqXykveSxrPSh4KnYrZypfKS95LEE9KC14KmcrdipfKS95LFQ9dy1kLEU9TS1tLFM9ay1kLEw9QS1tO3JldHVybiBUKlQrRSpFPlMqUytMKkwmJih3PWssTT1BKSxbW3ctbCxNLXVdLFt3KnIvYixNKnIvYl1dfWZ1bmN0aW9uIHdvKHQpe2Z1bmN0aW9uIGUoZSl7ZnVuY3Rpb24gYSgpe3UucHVzaCgiTSIsbyh0KGMpLHMpKX1mb3IodmFyIGwsdT1bXSxjPVtdLGg9LTEsZj1lLmxlbmd0aCxwPVN0KHIpLGQ9U3Qobik7KytoPGY7KWkuY2FsbCh0aGlzLGw9ZVtoXSxoKT9jLnB1c2goWytwLmNhbGwodGhpcyxsLGgpLCtkLmNhbGwodGhpcyxsLGgpXSk6Yy5sZW5ndGgmJihhKCksYz1bXSk7cmV0dXJuIGMubGVuZ3RoJiZhKCksdS5sZW5ndGg/dS5qb2luKCIiKTpudWxsfXZhciByPXpyLG49SXIsaT1JZSxvPU1vLGE9by5rZXkscz0uNztyZXR1cm4gZS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsZSk6cn0sZS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZSk6bn0sZS5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsZSk6aX0sZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD9vPXQ6KG89amwuZ2V0KHQpfHxNbykua2V5LGUpOmF9LGUudGVuc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGUpOnN9LGV9ZnVuY3Rpb24gTW8odCl7cmV0dXJuIHQubGVuZ3RoPjE/dC5qb2luKCJMIik6dCsiWiJ9ZnVuY3Rpb24ga28odCl7cmV0dXJuIHQuam9pbigiTCIpKyJaIn1mdW5jdGlvbiBBbyh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxpPVtuWzBdLCIsIixuWzFdXTsrK2U8cjspaS5wdXNoKCJIIiwoblswXSsobj10W2VdKVswXSkvMiwiViIsblsxXSk7cmV0dXJuIHI+MSYmaS5wdXNoKCJIIixuWzBdKSxpLmpvaW4oIiIpfWZ1bmN0aW9uIFRvKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sIiwiLG5bMV1dOysrZTxyOylpLnB1c2goIlYiLChuPXRbZV0pWzFdLCJIIixuWzBdKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBFbyh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxpPVtuWzBdLCIsIixuWzFdXTsrK2U8cjspaS5wdXNoKCJIIiwobj10W2VdKVswXSwiViIsblsxXSk7cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gU28odCxlKXtyZXR1cm4gdC5sZW5ndGg8ND9Nbyh0KTp0WzFdK0lvKHQuc2xpY2UoMSwtMSksUG8odCxlKSl9ZnVuY3Rpb24gTG8odCxlKXtyZXR1cm4gdC5sZW5ndGg8Mz9rbyh0KTp0WzBdK0lvKCh0LnB1c2godFswXSksdCksUG8oW3RbdC5sZW5ndGgtMl1dLmNvbmNhdCh0LFt0WzFdXSksZSkpfWZ1bmN0aW9uIHpvKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDM/TW8odCk6dFswXStJbyh0LFBvKHQsZSkpfWZ1bmN0aW9uIElvKHQsZSl7aWYoZS5sZW5ndGg8MXx8dC5sZW5ndGghPWUubGVuZ3RoJiZ0Lmxlbmd0aCE9ZS5sZW5ndGgrMilyZXR1cm4gTW8odCk7dmFyIHI9dC5sZW5ndGghPWUubGVuZ3RoLG49IiIsaT10WzBdLG89dFsxXSxhPWVbMF0scz1hLGw9MTtpZihyJiYobis9IlEiKyhvWzBdLTIqYVswXS8zKSsiLCIrKG9bMV0tMiphWzFdLzMpKyIsIitvWzBdKyIsIitvWzFdLGk9dFsxXSxsPTIpLGUubGVuZ3RoPjEpe3M9ZVsxXSxvPXRbbF0sbCsrLG4rPSJDIisoaVswXSthWzBdKSsiLCIrKGlbMV0rYVsxXSkrIiwiKyhvWzBdLXNbMF0pKyIsIisob1sxXS1zWzFdKSsiLCIrb1swXSsiLCIrb1sxXTtmb3IodmFyIHU9Mjt1PGUubGVuZ3RoO3UrKyxsKyspbz10W2xdLHM9ZVt1XSxuKz0iUyIrKG9bMF0tc1swXSkrIiwiKyhvWzFdLXNbMV0pKyIsIitvWzBdKyIsIitvWzFdfWlmKHIpe3ZhciBjPXRbbF07bis9IlEiKyhvWzBdKzIqc1swXS8zKSsiLCIrKG9bMV0rMipzWzFdLzMpKyIsIitjWzBdKyIsIitjWzFdfXJldHVybiBufWZ1bmN0aW9uIFBvKHQsZSl7Zm9yKHZhciByLG49W10saT0oMS1lKS8yLG89dFswXSxhPXRbMV0scz0xLGw9dC5sZW5ndGg7KytzPGw7KXI9byxvPWEsYT10W3NdLG4ucHVzaChbaSooYVswXS1yWzBdKSxpKihhWzFdLXJbMV0pXSk7cmV0dXJuIG59ZnVuY3Rpb24gQ28odCl7aWYodC5sZW5ndGg8MylyZXR1cm4gTW8odCk7dmFyIGU9MSxyPXQubGVuZ3RoLG49dFswXSxpPW5bMF0sbz1uWzFdLGE9W2ksaSxpLChuPXRbMV0pWzBdXSxzPVtvLG8sbyxuWzFdXSxsPVtpLCIsIixvLCJMIixPbyhGbCxhKSwiLCIsT28oRmwscyldO2Zvcih0LnB1c2godFtyLTFdKTsrK2U8PXI7KW49dFtlXSxhLnNoaWZ0KCksYS5wdXNoKG5bMF0pLHMuc2hpZnQoKSxzLnB1c2goblsxXSksRm8obCxhLHMpO3JldHVybiB0LnBvcCgpLGwucHVzaCgiTCIsbiksbC5qb2luKCIiKX1mdW5jdGlvbiBSbyh0KXtpZih0Lmxlbmd0aDw0KXJldHVybiBNbyh0KTtmb3IodmFyIGUscj1bXSxuPS0xLGk9dC5sZW5ndGgsbz1bMF0sYT1bMF07KytuPDM7KWU9dFtuXSxvLnB1c2goZVswXSksYS5wdXNoKGVbMV0pO2ZvcihyLnB1c2goT28oRmwsbykrIiwiK09vKEZsLGEpKSwtLW47KytuPGk7KWU9dFtuXSxvLnNoaWZ0KCksby5wdXNoKGVbMF0pLGEuc2hpZnQoKSxhLnB1c2goZVsxXSksRm8ocixvLGEpO3JldHVybiByLmpvaW4oIiIpfWZ1bmN0aW9uIGpvKHQpe2Zvcih2YXIgZSxyLG49LTEsaT10Lmxlbmd0aCxvPWkrNCxhPVtdLHM9W107KytuPDQ7KXI9dFtuJWldLGEucHVzaChyWzBdKSxzLnB1c2goclsxXSk7Zm9yKGU9W09vKEZsLGEpLCIsIixPbyhGbCxzKV0sLS1uOysrbjxvOylyPXRbbiVpXSxhLnNoaWZ0KCksYS5wdXNoKHJbMF0pLHMuc2hpZnQoKSxzLnB1c2goclsxXSksRm8oZSxhLHMpO3JldHVybiBlLmpvaW4oIiIpfWZ1bmN0aW9uIERvKHQsZSl7dmFyIHI9dC5sZW5ndGgtMTtpZihyKWZvcih2YXIgbixpLG89dFswXVswXSxhPXRbMF1bMV0scz10W3JdWzBdLW8sbD10W3JdWzFdLWEsdT0tMTsrK3U8PXI7KW49dFt1XSxpPXUvcixuWzBdPWUqblswXSsoMS1lKSoobytpKnMpLG5bMV09ZSpuWzFdKygxLWUpKihhK2kqbCk7cmV0dXJuIENvKHQpfWZ1bmN0aW9uIE9vKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdK3RbM10qZVszXX1mdW5jdGlvbiBGbyh0LGUscil7dC5wdXNoKCJDIixPbyhEbCxlKSwiLCIsT28oRGwsciksIiwiLE9vKE9sLGUpLCIsIixPbyhPbCxyKSwiLCIsT28oRmwsZSksIiwiLE9vKEZsLHIpKX1mdW5jdGlvbiBObyh0LGUpe3JldHVybihlWzFdLXRbMV0pLyhlWzBdLXRbMF0pfWZ1bmN0aW9uIEJvKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgtMSxuPVtdLGk9dFswXSxvPXRbMV0sYT1uWzBdPU5vKGksbyk7KytlPHI7KW5bZV09KGErKGE9Tm8oaT1vLG89dFtlKzFdKSkpLzI7cmV0dXJuIG5bZV09YSxufWZ1bmN0aW9uIFVvKHQpe2Zvcih2YXIgZSxyLG4saSxvPVtdLGE9Qm8odCkscz0tMSxsPXQubGVuZ3RoLTE7KytzPGw7KWU9Tm8odFtzXSx0W3MrMV0pLHdhKGUpPE5hP2Fbc109YVtzKzFdPTA6KHI9YVtzXS9lLG49YVtzKzFdL2UsaT1yKnIrbipuLGk+OSYmKGk9MyplL01hdGguc3FydChpKSxhW3NdPWkqcixhW3MrMV09aSpuKSk7Zm9yKHM9LTE7KytzPD1sOylpPSh0W01hdGgubWluKGwscysxKV1bMF0tdFtNYXRoLm1heCgwLHMtMSldWzBdKS8oNiooMSthW3NdKmFbc10pKSxvLnB1c2goW2l8fDAsYVtzXSppfHwwXSk7cmV0dXJuIG99ZnVuY3Rpb24gVm8odCl7cmV0dXJuIHQubGVuZ3RoPDM/TW8odCk6dFswXStJbyh0LFVvKHQpKX1mdW5jdGlvbiBxbyh0KXtmb3IodmFyIGUscixuLGk9LTEsbz10Lmxlbmd0aDsrK2k8bzspZT10W2ldLHI9ZVswXSxuPWVbMV0tR2EsZVswXT1yKk1hdGguY29zKG4pLGVbMV09cipNYXRoLnNpbihuKTtyZXR1cm4gdH1mdW5jdGlvbiBHbyh0KXtmdW5jdGlvbiBlKGUpe2Z1bmN0aW9uIGwoKXttLnB1c2goIk0iLHModCh2KSxoKSxjLHUodChnLnJldmVyc2UoKSksaCksIloiKX1mb3IodmFyIGYscCxkLG09W10sZz1bXSx2PVtdLHk9LTEsYj1lLmxlbmd0aCx4PVN0KHIpLF89U3QoaSksdz1yPT09bj9mdW5jdGlvbigpe3JldHVybiBwfTpTdChuKSxNPWk9PT1vP2Z1bmN0aW9uKCl7cmV0dXJuIGR9OlN0KG8pOysreTxiOylhLmNhbGwodGhpcyxmPWVbeV0seSk/KGcucHVzaChbcD0reC5jYWxsKHRoaXMsZix5KSxkPStfLmNhbGwodGhpcyxmLHkpXSksdi5wdXNoKFsrdy5jYWxsKHRoaXMsZix5KSwrTS5jYWxsKHRoaXMsZix5KV0pKTpnLmxlbmd0aCYmKGwoKSxnPVtdLHY9W10pO3JldHVybiBnLmxlbmd0aCYmbCgpLG0ubGVuZ3RoP20uam9pbigiIik6bnVsbH12YXIgcj16cixuPXpyLGk9MCxvPUlyLGE9SWUscz1NbyxsPXMua2V5LHU9cyxjPSJMIixoPS43O3JldHVybiBlLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bj10LGUpOm59LGUueDA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxlKTpyfSxlLngxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZSk6bn0sZS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW89dCxlKTpvfSxlLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsZSk6aX0sZS55MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGUpOm99LGUuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGUpOmF9LGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/cz10OihzPWpsLmdldCh0KXx8TW8pLmtleSx1PXMucmV2ZXJzZXx8cyxjPXMuY2xvc2VkPyJNIjoiTCIsZSk6bH0sZS50ZW5zaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQsZSk6aH0sZX1mdW5jdGlvbiBIbyh0KXtyZXR1cm4gdC5yYWRpdXN9ZnVuY3Rpb24gWG8odCl7cmV0dXJuW3QueCx0LnldfWZ1bmN0aW9uIFlvKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9ZVswXSxuPWVbMV0tR2E7cmV0dXJuW3IqTWF0aC5jb3MobikscipNYXRoLnNpbihuKV19fWZ1bmN0aW9uIFdvKCl7cmV0dXJuIDY0fWZ1bmN0aW9uIFpvKCl7cmV0dXJuImNpcmNsZSJ9ZnVuY3Rpb24gUW8odCl7dmFyIGU9TWF0aC5zcXJ0KHQvVWEpO3JldHVybiJNMCwiK2UrIkEiK2UrIiwiK2UrIiAwIDEsMSAwLCIrLWUrIkEiK2UrIiwiK2UrIiAwIDEsMSAwLCIrZSsiWiJ9ZnVuY3Rpb24gS28odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUscixuOyhlPXRoaXNbdF0pJiYobj1lW3I9ZS5hY3RpdmVdKSYmKG4udGltZXIuYz1udWxsLG4udGltZXIudD1OYU4sLS1lLmNvdW50P2RlbGV0ZSBlW3JdOmRlbGV0ZSB0aGlzW3RdLGUuYWN0aXZlKz0uNSxuLmV2ZW50JiZuLmV2ZW50LmludGVycnVwdC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxuLmluZGV4KSl9fWZ1bmN0aW9uIEpvKHQsZSxyKXtyZXR1cm4gRWEodCxIbCksdC5uYW1lc3BhY2U9ZSx0LmlkPXIsdH1mdW5jdGlvbiAkbyh0LGUscixuKXt2YXIgaT10LmlkLG89dC5uYW1lc3BhY2U7cmV0dXJuIEgodCwiZnVuY3Rpb24iPT10eXBlb2Ygcj9mdW5jdGlvbih0LGEscyl7dFtvXVtpXS50d2Vlbi5zZXQoZSxuKHIuY2FsbCh0LHQuX19kYXRhX18sYSxzKSkpfToocj1uKHIpLGZ1bmN0aW9uKHQpe3Rbb11baV0udHdlZW4uc2V0KGUscil9KSl9ZnVuY3Rpb24gdGEodCl7cmV0dXJuIG51bGw9PXQmJih0PSIiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gZWEodCl7cmV0dXJuIG51bGw9PXQ/Il9fdHJhbnNpdGlvbl9fIjoiX190cmFuc2l0aW9uXyIrdCsiX18ifWZ1bmN0aW9uIHJhKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyh0KXt2YXIgZT1tLmRlbGF5O3JldHVybiB1LnQ9ZStsLHQ+PWU/YSh0LWUpOnZvaWQodS5jPWEpfWZ1bmN0aW9uIGEocil7dmFyIGk9ZC5hY3RpdmUsbz1kW2ldO28mJihvLnRpbWVyLmM9bnVsbCxvLnRpbWVyLnQ9TmFOLC0tZC5jb3VudCxkZWxldGUgZFtpXSxvLmV2ZW50JiZvLmV2ZW50LmludGVycnVwdC5jYWxsKHQsdC5fX2RhdGFfXyxvLmluZGV4KSk7Zm9yKHZhciBhIGluIGQpaWYobj4rYSl7dmFyIGg9ZFthXTtoLnRpbWVyLmM9bnVsbCxoLnRpbWVyLnQ9TmFOLC0tZC5jb3VudCxkZWxldGUgZFthXX11LmM9cyxDdChmdW5jdGlvbigpe3JldHVybiB1LmMmJnMocnx8MSkmJih1LmM9bnVsbCx1LnQ9TmFOKSwxfSwwLGwpLGQuYWN0aXZlPW4sbS5ldmVudCYmbS5ldmVudC5zdGFydC5jYWxsKHQsdC5fX2RhdGFfXyxlKSxwPVtdLG0udHdlZW4uZm9yRWFjaChmdW5jdGlvbihyLG4peyhuPW4uY2FsbCh0LHQuX19kYXRhX18sZSkpJiZwLnB1c2gobil9KSxmPW0uZWFzZSxjPW0uZHVyYXRpb259ZnVuY3Rpb24gcyhpKXtmb3IodmFyIG89aS9jLGE9ZihvKSxzPXAubGVuZ3RoO3M+MDspcFstLXNdLmNhbGwodCxhKTtyZXR1cm4gbz49MT8obS5ldmVudCYmbS5ldmVudC5lbmQuY2FsbCh0LHQuX19kYXRhX18sZSksLS1kLmNvdW50P2RlbGV0ZSBkW25dOmRlbGV0ZSB0W3JdLDEpOnZvaWQgMH12YXIgbCx1LGMsZixwLGQ9dFtyXXx8KHRbcl09e2FjdGl2ZTowLGNvdW50OjB9KSxtPWRbbl07bXx8KGw9aS50aW1lLHU9Q3QobywwLGwpLG09ZFtuXT17dHdlZW46bmV3IGgsdGltZTpsLHRpbWVyOnUsZGVsYXk6aS5kZWxheSxkdXJhdGlvbjppLmR1cmF0aW9uLGVhc2U6aS5lYXNlLGluZGV4OmV9LGk9bnVsbCwrK2QuY291bnQpfWZ1bmN0aW9uIG5hKHQsZSxyKXt0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7dmFyIG49ZSh0KTtyZXR1cm4idHJhbnNsYXRlKCIrKGlzRmluaXRlKG4pP246cih0KSkrIiwwKSJ9KX1mdW5jdGlvbiBpYSh0LGUscil7dC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBuPWUodCk7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGlzRmluaXRlKG4pP246cih0KSkrIikifSl9ZnVuY3Rpb24gb2EodCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX1mdW5jdGlvbiBhYSh0LGUscil7ZnVuY3Rpb24gbihlKXtyZXR1cm4gdChlKX1mdW5jdGlvbiBpKHQscil7dmFyIG49dFsxXS10WzBdLGk9bi9yLG89Y2EuYmlzZWN0KHR1LGkpO3JldHVybiBvPT10dS5sZW5ndGg/W2UueWVhcix0byh0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC8zMTUzNmU2fSkscilbMl1dOm8/ZVtpL3R1W28tMV08dHVbb10vaT9vLTE6b106W251LHRvKHQscilbMl1dfXJldHVybiBuLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4gc2EodC5pbnZlcnQoZSkpfSxuLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC5kb21haW4oZSksbik6dC5kb21haW4oKS5tYXAoc2EpfSxuLm5pY2U9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIpe3JldHVybiFpc05hTihyKSYmIXQucmFuZ2UocixzYSgrcisxKSxlKS5sZW5ndGh9dmFyIG89bi5kb21haW4oKSxhPUhpKG8pLHM9bnVsbD09dD9pKGEsMTApOiJudW1iZXIiPT10eXBlb2YgdCYmaShhLHQpO3JldHVybiBzJiYodD1zWzBdLGU9c1sxXSksbi5kb21haW4oV2kobyxlPjE/e2Zsb29yOmZ1bmN0aW9uKGUpe2Zvcig7cihlPXQuZmxvb3IoZSkpOyllPXNhKGUtMSk7cmV0dXJuIGV9LGNlaWw6ZnVuY3Rpb24oZSl7Zm9yKDtyKGU9dC5jZWlsKGUpKTspZT1zYSgrZSsxKTtyZXR1cm4gZX19OnQpKX0sbi50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciByPUhpKG4uZG9tYWluKCkpLG89bnVsbD09dD9pKHIsMTApOiJudW1iZXIiPT10eXBlb2YgdD9pKHIsdCk6IXQucmFuZ2UmJlt7cmFuZ2U6dH0sZV07cmV0dXJuIG8mJih0PW9bMF0sZT1vWzFdKSx0LnJhbmdlKHJbMF0sc2EoK3JbMV0rMSksMT5lPzE6ZSl9LG4udGlja0Zvcm1hdD1mdW5jdGlvbigpe3JldHVybiByfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYWEodC5jb3B5KCksZSxyKX0sSmkobix0KX1mdW5jdGlvbiBzYSh0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gbGEodCl7cmV0dXJuIEpTT04ucGFyc2UodC5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIHVhKHQpe3ZhciBlPXBhLmNyZWF0ZVJhbmdlKCk7cmV0dXJuIGUuc2VsZWN0Tm9kZShwYS5ib2R5KSxlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0LnJlc3BvbnNlVGV4dCl9dmFyIGNhPXt2ZXJzaW9uOiIzLjUuMTYifSxoYT1bXS5zbGljZSxmYT1mdW5jdGlvbih0KXtyZXR1cm4gaGEuY2FsbCh0KX0scGE9dGhpcy5kb2N1bWVudDtpZihwYSl0cnl7ZmEocGEuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlfWNhdGNoKGRhKXtmYT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPXRbZV07cmV0dXJuIHJ9fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSxwYSl0cnl7cGEuY3JlYXRlRWxlbWVudCgiRElWIikuc3R5bGUuc2V0UHJvcGVydHkoIm9wYWNpdHkiLDAsIiIpfWNhdGNoKG1hKXt2YXIgZ2E9dGhpcy5FbGVtZW50LnByb3RvdHlwZSx2YT1nYS5zZXRBdHRyaWJ1dGUseWE9Z2Euc2V0QXR0cmlidXRlTlMsYmE9dGhpcy5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSx4YT1iYS5zZXRQcm9wZXJ0eTtnYS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXt2YS5jYWxsKHRoaXMsdCxlKyIiKX0sZ2Euc2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLHIpe3lhLmNhbGwodGhpcyx0LGUscisiIil9LGJhLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyKXt4YS5jYWxsKHRoaXMsdCxlKyIiLHIpfX1jYS5hc2NlbmRpbmc9aSxjYS5kZXNjZW5kaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+ZT8tMTplPnQ/MTplPj10PzA6TmFOfSxjYS5taW49ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsbz10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8bzspaWYobnVsbCE9KG49dFtpXSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxvOyludWxsIT0obj10W2ldKSYmcj5uJiYocj1uKX1lbHNle2Zvcig7KytpPG87KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8bzspbnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJnI+biYmKHI9bil9cmV0dXJuIHJ9LGNhLm1heD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT0tMSxvPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysraTxvOylpZihudWxsIT0obj10W2ldKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPG87KW51bGwhPShuPXRbaV0pJiZuPnImJihyPW4pfWVsc2V7Zm9yKDsrK2k8bzspaWYobnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxvOyludWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj5yJiYocj1uKX1yZXR1cm4gcn0sY2EuZXh0ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLG89LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK288YTspaWYobnVsbCE9KG49dFtvXSkmJm4+PW4pe3I9aT1uO2JyZWFrfWZvcig7KytvPGE7KW51bGwhPShuPXRbb10pJiYocj5uJiYocj1uKSxuPmkmJihpPW4pKX1lbHNle2Zvcig7KytvPGE7KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbb10sbykpJiZuPj1uKXtyPWk9bjticmVha31mb3IoOysrbzxhOyludWxsIT0obj1lLmNhbGwodCx0W29dLG8pKSYmKHI+biYmKHI9biksbj5pJiYoaT1uKSl9cmV0dXJuW3IsaV19LGNhLnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLG89LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK288aTspYShyPSt0W29dKSYmKG4rPXIpO2Vsc2UgZm9yKDsrK288aTspYShyPStlLmNhbGwodCx0W29dLG8pKSYmKG4rPXIpO3JldHVybiBufSxjYS5tZWFuPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0wLGk9dC5sZW5ndGgscz0tMSxsPWk7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK3M8aTspYShyPW8odFtzXSkpP24rPXI6LS1sO2Vsc2UgZm9yKDsrK3M8aTspYShyPW8oZS5jYWxsKHQsdFtzXSxzKSkpP24rPXI6LS1sO3JldHVybiBsP24vbDp2b2lkIDB9LGNhLnF1YW50aWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQubGVuZ3RoLTEpKmUrMSxuPU1hdGguZmxvb3IociksaT0rdFtuLTFdLG89ci1uO3JldHVybiBvP2krbyoodFtuXS1pKTppfSxjYS5tZWRpYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPVtdLHM9dC5sZW5ndGgsbD0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrbDxzOylhKHI9byh0W2xdKSkmJm4ucHVzaChyKTtlbHNlIGZvcig7KytsPHM7KWEocj1vKGUuY2FsbCh0LHRbbF0sbCkpKSYmbi5wdXNoKHIpO3JldHVybiBuLmxlbmd0aD9jYS5xdWFudGlsZShuLnNvcnQoaSksLjUpOnZvaWQgMH0sY2EudmFyaWFuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5sZW5ndGgscz0wLGw9MCx1PS0xLGM9MDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrdTxpOylhKHI9byh0W3VdKSkmJihuPXItcyxzKz1uLysrYyxsKz1uKihyLXMpKTtlbHNlIGZvcig7Kyt1PGk7KWEocj1vKGUuY2FsbCh0LHRbdV0sdSkpKSYmKG49ci1zLHMrPW4vKytjLGwrPW4qKHItcykpO3JldHVybiBjPjE/bC8oYy0xKTp2b2lkIDB9LGNhLmRldmlhdGlvbj1mdW5jdGlvbigpe3ZhciB0PWNhLnZhcmlhbmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdD9NYXRoLnNxcnQodCk6dH07dmFyIF9hPXMoaSk7Y2EuYmlzZWN0TGVmdD1fYS5sZWZ0LGNhLmJpc2VjdD1jYS5iaXNlY3RSaWdodD1fYS5yaWdodCxjYS5iaXNlY3Rvcj1mdW5jdGlvbih0KXtyZXR1cm4gcygxPT09dC5sZW5ndGg/ZnVuY3Rpb24oZSxyKXtyZXR1cm4gaSh0KGUpLHIpfTp0KX0sY2Euc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7KG89YXJndW1lbnRzLmxlbmd0aCk8MyYmKHI9dC5sZW5ndGgsMj5vJiYoZT0wKSk7Zm9yKHZhciBuLGksbz1yLWU7bzspaT1NYXRoLnJhbmRvbSgpKm8tLXwwLG49dFtvK2VdLHRbbytlXT10W2krZV0sdFtpK2VdPW47cmV0dXJuIHR9LGNhLnBlcm11dGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkocik7ci0tOyluW3JdPXRbZVtyXV07cmV0dXJuIG59LGNhLnBhaXJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPTAsbj10Lmxlbmd0aC0xLGk9dFswXSxvPW5ldyBBcnJheSgwPm4/MDpuKTtuPnI7KW9bcl09W2U9aSxpPXRbKytyXV07cmV0dXJuIG99LGNhLnRyYW5zcG9zZT1mdW5jdGlvbih0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgZT0tMSxyPWNhLm1pbih0LGwpLG49bmV3IEFycmF5KHIpOysrZTxyOylmb3IodmFyIGksbz0tMSxhPW5bZV09bmV3IEFycmF5KGkpOysrbzxpOylhW29dPXRbb11bZV07cmV0dXJuIG59LGNhLnppcD1mdW5jdGlvbigpe3JldHVybiBjYS50cmFuc3Bvc2UoYXJndW1lbnRzKX0sY2Eua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9LGNhLnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LGNhLmVudHJpZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHtrZXk6cix2YWx1ZTp0W3JdfSk7cmV0dXJuIGV9LGNhLm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT10Lmxlbmd0aCxvPS0xLGE9MDsrK288aTspYSs9dFtvXS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KGEpOy0taT49MDspZm9yKG49dFtpXSxlPW4ubGVuZ3RoOy0tZT49MDspclstLWFdPW5bZV07cmV0dXJuIHJ9O3ZhciB3YT1NYXRoLmFicztjYS5yYW5nZT1mdW5jdGlvbih0LGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj0xLGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9dCx0PTApKSwoZS10KS9yPT09MS8wKXRocm93IG5ldyBFcnJvcigiaW5maW5pdGUgcmFuZ2UiKTt2YXIgbixpPVtdLG89dSh3YShyKSksYT0tMTtpZih0Kj1vLGUqPW8scio9bywwPnIpZm9yKDsobj10K3IqKythKT5lOylpLnB1c2gobi9vKTtlbHNlIGZvcig7KG49dCtyKisrYSk8ZTspaS5wdXNoKG4vbyk7cmV0dXJuIGl9LGNhLm1hcD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBoO2lmKHQgaW5zdGFuY2VvZiBoKXQuZm9yRWFjaChmdW5jdGlvbih0LGUpe3Iuc2V0KHQsZSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuLGk9LTEsbz10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysraTxvOylyLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8bzspci5zZXQoZS5jYWxsKHQsbj10W2ldLGkpLG4pfWVsc2UgZm9yKHZhciBhIGluIHQpci5zZXQoYSx0W2FdKTtyZXR1cm4gcn07dmFyIE1hPSJfX3Byb3RvX18iLGthPSJceDAwIjtjKGgse2hhczpkLGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fW2YodCldfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fW2YodCldPWV9LHJlbW92ZTptLGtleXM6Zyx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaCh0aGlzLl9bZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2goe2tleTpwKGUpLHZhbHVlOnRoaXMuX1tlXX0pO3JldHVybiB0fSxzaXplOnYsZW1wdHk6eSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5jYWxsKHRoaXMscChlKSx0aGlzLl9bZV0pfX0pLGNhLm5lc3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsYSxzKXtpZihzPj1vLmxlbmd0aClyZXR1cm4gbj9uLmNhbGwoaSxhKTpyP2Euc29ydChyKTphO2Zvcih2YXIgbCx1LGMsZixwPS0xLGQ9YS5sZW5ndGgsbT1vW3MrK10sZz1uZXcgaDsrK3A8ZDspKGY9Zy5nZXQobD1tKHU9YVtwXSkpKT9mLnB1c2godSk6Zy5zZXQobCxbdV0pO3JldHVybiBlPyh1PWUoKSxjPWZ1bmN0aW9uKHIsbil7dS5zZXQocix0KGUsbixzKSl9KToodT17fSxjPWZ1bmN0aW9uKHIsbil7dVtyXT10KGUsbixzKX0pLGcuZm9yRWFjaChjKSx1fWZ1bmN0aW9uIGUodCxyKXtpZihyPj1vLmxlbmd0aClyZXR1cm4gdDt2YXIgbj1bXSxpPWFbcisrXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQsaSl7bi5wdXNoKHtrZXk6dCx2YWx1ZXM6ZShpLHIpfSl9KSxpP24uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBpKHQua2V5LGUua2V5KX0pOm59dmFyIHIsbixpPXt9LG89W10sYT1bXTtyZXR1cm4gaS5tYXA9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdChyLGUsMCl9LGkuZW50cmllcz1mdW5jdGlvbihyKXtyZXR1cm4gZSh0KGNhLm1hcCxyLDApLDApfSxpLmtleT1mdW5jdGlvbih0KXtyZXR1cm4gby5wdXNoKHQpLGl9LGkuc29ydEtleXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFbby5sZW5ndGgtMV09dCxpfSxpLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHI9dCxpfSxpLnJvbGx1cD1mdW5jdGlvbih0KXtyZXR1cm4gbj10LGl9LGl9LGNhLnNldD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYjtpZih0KWZvcih2YXIgcj0wLG49dC5sZW5ndGg7bj5yOysrcillLmFkZCh0W3JdKTtyZXR1cm4gZX0sYyhiLHtoYXM6ZCxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX1tmKHQrPSIiKV09ITAsdH0scmVtb3ZlOm0sdmFsdWVzOmcsc2l6ZTp2LGVtcHR5OnksZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fKXQuY2FsbCh0aGlzLHAoZSkpfX0pLGNhLmJlaGF2aW9yPXt9LGNhLnJlYmluZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoOysrbjxpOyl0W3I9YXJndW1lbnRzW25dXT1fKHQsZSxlW3JdKTtyZXR1cm4gdH07dmFyIEFhPVsid2Via2l0IiwibXMiLCJtb3oiLCJNb3oiLCJvIiwiTyJdO2NhLmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBrLGU9LTEscj1hcmd1bWVudHMubGVuZ3RoOysrZTxyOyl0W2FyZ3VtZW50c1tlXV09QSh0KTtyZXR1cm4gdH0say5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXt2YXIgcj10LmluZGV4T2YoIi4iKSxuPSIiO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdClyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXNbdF0ub24obik6dGhpc1t0XS5vbihuLGUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihudWxsPT1lKWZvcih0IGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpc1t0XS5vbihuLG51bGwpO3JldHVybiB0aGlzfX0sY2EuZXZlbnQ9bnVsbCxjYS5yZXF1b3RlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoVGEsIlxcJCYiKX07dmFyIFRhPS9bXFxcXlwkXCpcK1w/XHxcW1xdXChcKVwuXHtcfV0vZyxFYT17fS5fX3Byb3RvX18/ZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX0sU2E9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yKHQpfSxMYT1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3JBbGwodCl9LHphPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5tYXRjaGVzfHx0W3codCwibWF0Y2hlc1NlbGVjdG9yIildO3JldHVybih6YT1mdW5jdGlvbih0LGUpe3JldHVybiByLmNhbGwodCxlKX0pKHQsZSl9OyJmdW5jdGlvbiI9PXR5cGVvZiBTaXp6bGUmJihTYT1mdW5jdGlvbih0LGUpe3JldHVybiBTaXp6bGUodCxlKVswXXx8bnVsbH0sTGE9U2l6emxlLHphPVNpenpsZS5tYXRjaGVzU2VsZWN0b3IpLGNhLnNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBjYS5zZWxlY3QocGEuZG9jdW1lbnRFbGVtZW50KX07dmFyIElhPWNhLnNlbGVjdGlvbi5wcm90b3R5cGU9W107SWEuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLG89W107dD16KHQpO2Zvcih2YXIgYT0tMSxzPXRoaXMubGVuZ3RoOysrYTxzOyl7by5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT0obj10aGlzW2FdKS5wYXJlbnROb2RlO2Zvcih2YXIgbD0tMSx1PW4ubGVuZ3RoOysrbDx1OykoaT1uW2xdKT8oZS5wdXNoKHI9dC5jYWxsKGksaS5fX2RhdGFfXyxsLGEpKSxyJiYiX19kYXRhX18iaW4gaSYmKHIuX19kYXRhX189aS5fX2RhdGFfXykpOmUucHVzaChudWxsKX1yZXR1cm4gTChvKX0sSWEuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj1bXTt0PUkodCk7Zm9yKHZhciBpPS0xLG89dGhpcy5sZW5ndGg7KytpPG87KWZvcih2YXIgYT10aGlzW2ldLHM9LTEsbD1hLmxlbmd0aDsrK3M8bDspKHI9YVtzXSkmJihuLnB1c2goZT1mYSh0LmNhbGwocixyLl9fZGF0YV9fLHMsaSkpKSxlLnBhcmVudE5vZGU9cik7cmV0dXJuIEwobil9O3ZhciBQYT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsQ2E9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOlBhLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07Y2EubnM9e3ByZWZpeDpDYSxxdWFsaWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiOiIpLHI9dDtyZXR1cm4gZT49MCYmInhtbG5zIiE9PShyPXQuc2xpY2UoMCxlKSkmJih0PXQuc2xpY2UoZSsxKSksQ2EuaGFzT3duUHJvcGVydHkocik/e3NwYWNlOkNhW3JdLGxvY2FsOnR9OnR9fSxJYS5hdHRyPWZ1bmN0aW9uKHQsZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiB0PWNhLm5zLnF1YWxpZnkodCksdC5sb2NhbD9yLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6ci5nZXRBdHRyaWJ1dGUodCl9Zm9yKGUgaW4gdCl0aGlzLmVhY2goUChlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKFAodCxlKSl9LElhLmNsYXNzZWQ9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9dGhpcy5ub2RlKCksbj0odD1qKHQpKS5sZW5ndGgsaT0tMTtpZihlPXIuY2xhc3NMaXN0KXtmb3IoOysraTxuOylpZighZS5jb250YWlucyh0W2ldKSlyZXR1cm4hMX1lbHNlIGZvcihlPXIuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOysraTxuOylpZighUih0W2ldKS50ZXN0KGUpKXJldHVybiExO3JldHVybiEwfWZvcihlIGluIHQpdGhpcy5lYWNoKEQoZSx0W2VdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChEKHQsZSkpfSxJYS5zdHlsZT1mdW5jdGlvbih0LGUscil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aDtpZigzPmkpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7Mj5pJiYoZT0iIik7Zm9yKHIgaW4gdCl0aGlzLmVhY2goRihyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKDI+aSl7dmFyIG89dGhpcy5ub2RlKCk7cmV0dXJuIG4obykuZ2V0Q29tcHV0ZWRTdHlsZShvLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9cj0iIn1yZXR1cm4gdGhpcy5lYWNoKEYodCxlLHIpKX0sSWEucHJvcGVydHk9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdGhpcy5ub2RlKClbdF07Zm9yKGUgaW4gdCl0aGlzLmVhY2goTihlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKE4odCxlKSl9LElhLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9Om51bGw9PXQ/ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PSIifTpmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH0pOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxJYS5odG1sPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX06bnVsbD09dD9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LElhLmFwcGVuZD1mdW5jdGlvbih0KXtyZXR1cm4gdD1CKHQpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LElhLmluc2VydD1mdW5jdGlvbih0LGUpe3JldHVybiB0PUIodCksZT16KGUpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxJYS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKFUpfSxJYS5kYXRhPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LHIpe3ZhciBuLGksbyxhPXQubGVuZ3RoLGM9ci5sZW5ndGgsZj1NYXRoLm1pbihhLGMpLHA9bmV3IEFycmF5KGMpLGQ9bmV3IEFycmF5KGMpLG09bmV3IEFycmF5KGEpO2lmKGUpe3ZhciBnLHY9bmV3IGgseT1uZXcgQXJyYXkoYSk7Zm9yKG49LTE7KytuPGE7KShpPXRbbl0pJiYodi5oYXMoZz1lLmNhbGwoaSxpLl9fZGF0YV9fLG4pKT9tW25dPWk6di5zZXQoZyxpKSx5W25dPWcpO2ZvcihuPS0xOysrbjxjOykoaT12LmdldChnPWUuY2FsbChyLG89cltuXSxuKSkpP2khPT0hMCYmKHBbbl09aSxpLl9fZGF0YV9fPW8pOmRbbl09VihvKSx2LnNldChnLCEwKTtmb3Iobj0tMTsrK248YTspbiBpbiB5JiZ2LmdldCh5W25dKSE9PSEwJiYobVtuXT10W25dKX1lbHNle2ZvcihuPS0xOysrbjxmOylpPXRbbl0sbz1yW25dLGk/KGkuX19kYXRhX189byxwW25dPWkpOmRbbl09VihvKTtmb3IoO2M+bjsrK24pZFtuXT1WKHJbbl0pO2Zvcig7YT5uOysrbiltW25dPXRbbl19ZC51cGRhdGU9cCxkLnBhcmVudE5vZGU9cC5wYXJlbnROb2RlPW0ucGFyZW50Tm9kZT10LnBhcmVudE5vZGUscy5wdXNoKGQpLGwucHVzaChwKSx1LnB1c2gobSl9dmFyIG4saSxvPS0xLGE9dGhpcy5sZW5ndGg7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe2Zvcih0PW5ldyBBcnJheShhPShuPXRoaXNbMF0pLmxlbmd0aCk7KytvPGE7KShpPW5bb10pJiYodFtvXT1pLl9fZGF0YV9fKTtyZXR1cm4gdH12YXIgcz1YKFtdKSxsPUwoW10pLHU9TChbXSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKDsrK288YTspcihuPXRoaXNbb10sdC5jYWxsKG4sbi5wYXJlbnROb2RlLl9fZGF0YV9fLG8pKTtlbHNlIGZvcig7KytvPGE7KXIobj10aGlzW29dLHQpO3JldHVybiBsLmVudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LGwuZXhpdD1mdW5jdGlvbigpe3JldHVybiB1fSxsfSxJYS5kYXR1bT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iKX0sSWEuZmlsdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPVtdOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1xKHQpKTtmb3IodmFyIG89MCxhPXRoaXMubGVuZ3RoO2E+bztvKyspe2kucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9KHI9dGhpc1tvXSkucGFyZW50Tm9kZTtmb3IodmFyIHM9MCxsPXIubGVuZ3RoO2w+cztzKyspKG49cltzXSkmJnQuY2FsbChuLG4uX19kYXRhX18scyxvKSYmZS5wdXNoKG4pfXJldHVybiBMKGkpfSxJYS5vcmRlcj1mdW5jdGlvbigpe2Zvcih2YXIgdD0tMSxlPXRoaXMubGVuZ3RoOysrdDxlOylmb3IodmFyIHIsbj10aGlzW3RdLGk9bi5sZW5ndGgtMSxvPW5baV07LS1pPj0wOykocj1uW2ldKSYmKG8mJm8hPT1yLm5leHRTaWJsaW5nJiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsbyksbz1yKTsKcmV0dXJuIHRoaXN9LElhLnNvcnQ9ZnVuY3Rpb24odCl7dD1HLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIGU9LTEscj10aGlzLmxlbmd0aDsrK2U8cjspdGhpc1tlXS5zb3J0KHQpO3JldHVybiB0aGlzLm9yZGVyKCl9LElhLmVhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIEgodGhpcyxmdW5jdGlvbihlLHIsbil7dC5jYWxsKGUsZS5fX2RhdGFfXyxyLG4pfSl9LElhLmNhbGw9ZnVuY3Rpb24odCl7dmFyIGU9ZmEoYXJndW1lbnRzKTtyZXR1cm4gdC5hcHBseShlWzBdPXRoaXMsZSksdGhpc30sSWEuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LElhLm5vZGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMubGVuZ3RoO2U+dDt0KyspZm9yKHZhciByPXRoaXNbdF0sbj0wLGk9ci5sZW5ndGg7aT5uO24rKyl7dmFyIG89cltuXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfSxJYS5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gSCh0aGlzLGZ1bmN0aW9uKCl7Kyt0fSksdH07dmFyIFJhPVtdO2NhLnNlbGVjdGlvbi5lbnRlcj1YLGNhLnNlbGVjdGlvbi5lbnRlci5wcm90b3R5cGU9UmEsUmEuYXBwZW5kPUlhLmFwcGVuZCxSYS5lbXB0eT1JYS5lbXB0eSxSYS5ub2RlPUlhLm5vZGUsUmEuY2FsbD1JYS5jYWxsLFJhLnNpemU9SWEuc2l6ZSxSYS5zZWxlY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpLG8sYT1bXSxzPS0xLGw9dGhpcy5sZW5ndGg7KytzPGw7KXtuPShpPXRoaXNbc10pLnVwZGF0ZSxhLnB1c2goZT1bXSksZS5wYXJlbnROb2RlPWkucGFyZW50Tm9kZTtmb3IodmFyIHU9LTEsYz1pLmxlbmd0aDsrK3U8YzspKG89aVt1XSk/KGUucHVzaChuW3VdPXI9dC5jYWxsKGkucGFyZW50Tm9kZSxvLl9fZGF0YV9fLHUscykpLHIuX19kYXRhX189by5fX2RhdGFfXyk6ZS5wdXNoKG51bGwpfXJldHVybiBMKGEpfSxSYS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT1ZKHRoaXMpKSxJYS5pbnNlcnQuY2FsbCh0aGlzLHQsZSl9LGNhLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KHI9W1NhKHQscGEpXSxyLnBhcmVudE5vZGU9cGEuZG9jdW1lbnRFbGVtZW50KToocj1bdF0sci5wYXJlbnROb2RlPWUodCkpLEwoW3JdKX0sY2Euc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1mYShMYSh0LHBhKSksZS5wYXJlbnROb2RlPXBhLmRvY3VtZW50RWxlbWVudCk6KGU9ZmEodCksZS5wYXJlbnROb2RlPW51bGwpLEwoW2VdKX0sSWEub249ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYoMz5uKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpezI+biYmKGU9ITEpO2ZvcihyIGluIHQpdGhpcy5lYWNoKFcocix0W3JdLGUpKTtyZXR1cm4gdGhpc31pZigyPm4pcmV0dXJuKG49dGhpcy5ub2RlKClbIl9fb24iK3RdKSYmbi5fO3I9ITF9cmV0dXJuIHRoaXMuZWFjaChXKHQsZSxyKSl9O3ZhciBqYT1jYS5tYXAoe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSk7cGEmJmphLmZvckVhY2goZnVuY3Rpb24odCl7Im9uIit0IGluIHBhJiZqYS5yZW1vdmUodCl9KTt2YXIgRGEsT2E9MDtjYS5tb3VzZT1mdW5jdGlvbih0KXtyZXR1cm4gSih0LEUoKSl9O3ZhciBGYT10aGlzLm5hdmlnYXRvciYmL1dlYktpdC8udGVzdCh0aGlzLm5hdmlnYXRvci51c2VyQWdlbnQpPy0xOjA7Y2EudG91Y2g9ZnVuY3Rpb24odCxlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9ZSxlPUUoKS5jaGFuZ2VkVG91Y2hlcyksZSlmb3IodmFyIG4saT0wLG89ZS5sZW5ndGg7bz5pOysraSlpZigobj1lW2ldKS5pZGVudGlmaWVyPT09cilyZXR1cm4gSih0LG4pfSxjYS5iZWhhdmlvci5kcmFnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMub24oIm1vdXNlZG93bi5kcmFnIixvKS5vbigidG91Y2hzdGFydC5kcmFnIixhKX1mdW5jdGlvbiBlKHQsZSxuLG8sYSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcygpe3ZhciB0LHIsbj1lKGYsbSk7biYmKHQ9blswXS1iWzBdLHI9blsxXS1iWzFdLGR8PXR8cixiPW4scCh7dHlwZToiZHJhZyIseDpuWzBdK3VbMF0seTpuWzFdK3VbMV0sZHg6dCxkeTpyfSkpfWZ1bmN0aW9uIGwoKXtlKGYsbSkmJih2Lm9uKG8rZyxudWxsKS5vbihhK2csbnVsbCkseShkKSxwKHt0eXBlOiJkcmFnZW5kIn0pKX12YXIgdSxjPXRoaXMsaD1jYS5ldmVudC50YXJnZXQuY29ycmVzcG9uZGluZ0VsZW1lbnR8fGNhLmV2ZW50LnRhcmdldCxmPWMucGFyZW50Tm9kZSxwPXIub2YoYyxhcmd1bWVudHMpLGQ9MCxtPXQoKSxnPSIuZHJhZyIrKG51bGw9PW0/IiI6Ii0iK20pLHY9Y2Euc2VsZWN0KG4oaCkpLm9uKG8rZyxzKS5vbihhK2csbCkseT1LKGgpLGI9ZShmLG0pO2k/KHU9aS5hcHBseShjLGFyZ3VtZW50cyksdT1bdS54LWJbMF0sdS55LWJbMV1dKTp1PVswLDBdLHAoe3R5cGU6ImRyYWdzdGFydCJ9KX19dmFyIHI9Uyh0LCJkcmFnIiwiZHJhZ3N0YXJ0IiwiZHJhZ2VuZCIpLGk9bnVsbCxvPWUoTSxjYS5tb3VzZSxuLCJtb3VzZW1vdmUiLCJtb3VzZXVwIiksYT1lKCQsY2EudG91Y2gseCwidG91Y2htb3ZlIiwidG91Y2hlbmQiKTtyZXR1cm4gdC5vcmlnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZSx0KTppfSxjYS5yZWJpbmQodCxyLCJvbiIpfSxjYS50b3VjaGVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9RSgpLnRvdWNoZXMpLGU/ZmEoZSkubWFwKGZ1bmN0aW9uKGUpe3ZhciByPUoodCxlKTtyZXR1cm4gci5pZGVudGlmaWVyPWUuaWRlbnRpZmllcixyfSk6W119O3ZhciBOYT0xZS02LEJhPU5hKk5hLFVhPU1hdGguUEksVmE9MipVYSxxYT1WYS1OYSxHYT1VYS8yLEhhPVVhLzE4MCxYYT0xODAvVWEsWWE9TWF0aC5TUVJUMixXYT0yLFphPTQ7Y2EuaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sbz10WzFdLGE9dFsyXSxzPWVbMF0sbD1lWzFdLHU9ZVsyXSxjPXMtaSxoPWwtbyxmPWMqYytoKmg7aWYoQmE+ZiluPU1hdGgubG9nKHUvYSkvWWEscj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KmMsbyt0KmgsYSpNYXRoLmV4cChZYSp0Km4pXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoZiksZD0odSp1LWEqYStaYSpmKS8oMiphKldhKnApLG09KHUqdS1hKmEtWmEqZikvKDIqdSpXYSpwKSxnPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCksdj1NYXRoLmxvZyhNYXRoLnNxcnQobSptKzEpLW0pO249KHYtZykvWWEscj1mdW5jdGlvbih0KXt2YXIgZT10Km4scj1vdChnKSxzPWEvKFdhKnApKihyKmF0KFlhKmUrZyktaXQoZykpO3JldHVybltpK3MqYyxvK3MqaCxhKnIvb3QoWWEqZStnKV19fXJldHVybiByLmR1cmF0aW9uPTFlMypuLHJ9LGNhLmJlaGF2aW9yLnpvb209ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3Qub24oSSxoKS5vbihLYSsiLnpvb20iLHApLm9uKCJkYmxjbGljay56b29tIixkKS5vbihSLGYpfWZ1bmN0aW9uIGUodCl7cmV0dXJuWyh0WzBdLWsueCkvay5rLCh0WzFdLWsueSkvay5rXX1mdW5jdGlvbiByKHQpe3JldHVyblt0WzBdKmsuaytrLngsdFsxXSprLmsray55XX1mdW5jdGlvbiBpKHQpe2suaz1NYXRoLm1heChFWzBdLE1hdGgubWluKEVbMV0sdCkpfWZ1bmN0aW9uIG8odCxlKXtlPXIoZSksay54Kz10WzBdLWVbMF0say55Kz10WzFdLWVbMV19ZnVuY3Rpb24gYShlLHIsbixhKXtlLl9fY2hhcnRfXz17eDprLngseTprLnksazprLmt9LGkoTWF0aC5wb3coMixhKSksbyhnPXIsbiksZT1jYS5zZWxlY3QoZSksTD4wJiYoZT1lLnRyYW5zaXRpb24oKS5kdXJhdGlvbihMKSksZS5jYWxsKHQuZXZlbnQpfWZ1bmN0aW9uIHMoKXtfJiZfLmRvbWFpbih4LnJhbmdlKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LWsueCkvay5rfSkubWFwKHguaW52ZXJ0KSksTSYmTS5kb21haW4ody5yYW5nZSgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC1rLnkpL2sua30pLm1hcCh3LmludmVydCkpfWZ1bmN0aW9uIGwodCl7eisrfHx0KHt0eXBlOiJ6b29tc3RhcnQifSl9ZnVuY3Rpb24gdSh0KXtzKCksdCh7dHlwZToiem9vbSIsc2NhbGU6ay5rLHRyYW5zbGF0ZTpbay54LGsueV19KX1mdW5jdGlvbiBjKHQpey0tenx8KHQoe3R5cGU6Inpvb21lbmQifSksZz1udWxsKX1mdW5jdGlvbiBoKCl7ZnVuY3Rpb24gdCgpe3M9MSxvKGNhLm1vdXNlKGkpLGYpLHUoYSl9ZnVuY3Rpb24gcigpe2gub24oUCxudWxsKS5vbihDLG51bGwpLHAocyksYyhhKX12YXIgaT10aGlzLGE9ai5vZihpLGFyZ3VtZW50cykscz0wLGg9Y2Euc2VsZWN0KG4oaSkpLm9uKFAsdCkub24oQyxyKSxmPWUoY2EubW91c2UoaSkpLHA9SyhpKTtHbC5jYWxsKGkpLGwoYSl9ZnVuY3Rpb24gZigpe2Z1bmN0aW9uIHQoKXt2YXIgdD1jYS50b3VjaGVzKGQpO3JldHVybiBwPWsuayx0LmZvckVhY2goZnVuY3Rpb24odCl7dC5pZGVudGlmaWVyIGluIGcmJihnW3QuaWRlbnRpZmllcl09ZSh0KSl9KSx0fWZ1bmN0aW9uIHIoKXt2YXIgZT1jYS5ldmVudC50YXJnZXQ7Y2Euc2VsZWN0KGUpLm9uKHgsbikub24oXyxzKSx3LnB1c2goZSk7Zm9yKHZhciByPWNhLmV2ZW50LmNoYW5nZWRUb3VjaGVzLGk9MCxvPXIubGVuZ3RoO28+aTsrK2kpZ1tyW2ldLmlkZW50aWZpZXJdPW51bGw7dmFyIGw9dCgpLHU9RGF0ZS5ub3coKTtpZigxPT09bC5sZW5ndGgpe2lmKDUwMD51LWIpe3ZhciBjPWxbMF07YShkLGMsZ1tjLmlkZW50aWZpZXJdLE1hdGguZmxvb3IoTWF0aC5sb2coay5rKS9NYXRoLkxOMikrMSksVCgpfWI9dX1lbHNlIGlmKGwubGVuZ3RoPjEpe3ZhciBjPWxbMF0saD1sWzFdLGY9Y1swXS1oWzBdLHA9Y1sxXS1oWzFdO3Y9ZipmK3AqcH19ZnVuY3Rpb24gbigpe3ZhciB0LGUscixuLGE9Y2EudG91Y2hlcyhkKTtHbC5jYWxsKGQpO2Zvcih2YXIgcz0wLGw9YS5sZW5ndGg7bD5zOysrcyxuPW51bGwpaWYocj1hW3NdLG49Z1tyLmlkZW50aWZpZXJdKXtpZihlKWJyZWFrO3Q9cixlPW59aWYobil7dmFyIGM9KGM9clswXS10WzBdKSpjKyhjPXJbMV0tdFsxXSkqYyxoPXYmJk1hdGguc3FydChjL3YpO3Q9Wyh0WzBdK3JbMF0pLzIsKHRbMV0rclsxXSkvMl0sZT1bKGVbMF0rblswXSkvMiwoZVsxXStuWzFdKS8yXSxpKGgqcCl9Yj1udWxsLG8odCxlKSx1KG0pfWZ1bmN0aW9uIHMoKXtpZihjYS5ldmVudC50b3VjaGVzLmxlbmd0aCl7Zm9yKHZhciBlPWNhLmV2ZW50LmNoYW5nZWRUb3VjaGVzLHI9MCxuPWUubGVuZ3RoO24+cjsrK3IpZGVsZXRlIGdbZVtyXS5pZGVudGlmaWVyXTtmb3IodmFyIGkgaW4gZylyZXR1cm4gdm9pZCB0KCl9Y2Euc2VsZWN0QWxsKHcpLm9uKHksbnVsbCksTS5vbihJLGgpLm9uKFIsZiksQSgpLGMobSl9dmFyIHAsZD10aGlzLG09ai5vZihkLGFyZ3VtZW50cyksZz17fSx2PTAseT0iLnpvb20tIitjYS5ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyLHg9InRvdWNobW92ZSIreSxfPSJ0b3VjaGVuZCIreSx3PVtdLE09Y2Euc2VsZWN0KGQpLEE9SyhkKTtyKCksbChtKSxNLm9uKEksbnVsbCkub24oUixyKX1mdW5jdGlvbiBwKCl7dmFyIHQ9ai5vZih0aGlzLGFyZ3VtZW50cyk7eT9jbGVhclRpbWVvdXQoeSk6KEdsLmNhbGwodGhpcyksbT1lKGc9dnx8Y2EubW91c2UodGhpcykpLGwodCkpLHk9c2V0VGltZW91dChmdW5jdGlvbigpe3k9bnVsbCxjKHQpfSw1MCksVCgpLGkoTWF0aC5wb3coMiwuMDAyKlFhKCkpKmsuayksbyhnLG0pLHUodCl9ZnVuY3Rpb24gZCgpe3ZhciB0PWNhLm1vdXNlKHRoaXMpLHI9TWF0aC5sb2coay5rKS9NYXRoLkxOMjthKHRoaXMsdCxlKHQpLGNhLmV2ZW50LnNoaWZ0S2V5P01hdGguY2VpbChyKS0xOk1hdGguZmxvb3IocikrMSl9dmFyIG0sZyx2LHksYix4LF8sdyxNLGs9e3g6MCx5OjAsazoxfSxBPVs5NjAsNTAwXSxFPUphLEw9MjUwLHo9MCxJPSJtb3VzZWRvd24uem9vbSIsUD0ibW91c2Vtb3ZlLnpvb20iLEM9Im1vdXNldXAuem9vbSIsUj0idG91Y2hzdGFydC56b29tIixqPVModCwiem9vbXN0YXJ0Iiwiem9vbSIsInpvb21lbmQiKTtyZXR1cm4gS2F8fChLYT0ib253aGVlbCJpbiBwYT8oUWE9ZnVuY3Rpb24oKXtyZXR1cm4tY2EuZXZlbnQuZGVsdGFZKihjYS5ldmVudC5kZWx0YU1vZGU/MTIwOjEpfSwid2hlZWwiKToib25tb3VzZXdoZWVsImluIHBhPyhRYT1mdW5jdGlvbigpe3JldHVybiBjYS5ldmVudC53aGVlbERlbHRhfSwibW91c2V3aGVlbCIpOihRYT1mdW5jdGlvbigpe3JldHVybi1jYS5ldmVudC5kZXRhaWx9LCJNb3pNb3VzZVBpeGVsU2Nyb2xsIikpLHQuZXZlbnQ9ZnVuY3Rpb24odCl7dC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ai5vZih0aGlzLGFyZ3VtZW50cyksZT1rO1ZsP2NhLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtrPXRoaXMuX19jaGFydF9ffHx7eDowLHk6MCxrOjF9LGwodCl9KS50d2Vlbigiem9vbTp6b29tIixmdW5jdGlvbigpe3ZhciByPUFbMF0sbj1BWzFdLGk9Zz9nWzBdOnIvMixvPWc/Z1sxXTpuLzIsYT1jYS5pbnRlcnBvbGF0ZVpvb20oWyhpLWsueCkvay5rLChvLWsueSkvay5rLHIvay5rXSxbKGktZS54KS9lLmssKG8tZS55KS9lLmssci9lLmtdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49YShlKSxzPXIvblsyXTt0aGlzLl9fY2hhcnRfXz1rPXt4OmktblswXSpzLHk6by1uWzFdKnMsazpzfSx1KHQpfX0pLmVhY2goImludGVycnVwdC56b29tIixmdW5jdGlvbigpe2ModCl9KS5lYWNoKCJlbmQuem9vbSIsZnVuY3Rpb24oKXtjKHQpfSk6KHRoaXMuX19jaGFydF9fPWssbCh0KSx1KHQpLGModCkpfSl9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPXt4OitlWzBdLHk6K2VbMV0sazprLmt9LHMoKSx0KTpbay54LGsueV19LHQuc2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9e3g6ay54LHk6ay55LGs6bnVsbH0saSgrZSkscygpLHQpOmsua30sdC5zY2FsZUV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT1udWxsPT1lP0phOlsrZVswXSwrZVsxXV0sdCk6RX0sdC5jZW50ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9ZSYmWytlWzBdLCtlWzFdXSx0KTp2fSx0LnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9ZSYmWytlWzBdLCtlWzFdXSx0KTpBfSx0LmR1cmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhMPStlLHQpOkx9LHQueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz1lLHg9ZS5jb3B5KCksaz17eDowLHk6MCxrOjF9LHQpOl99LHQueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT1lLHc9ZS5jb3B5KCksaz17eDowLHk6MCxrOjF9LHQpOk19LGNhLnJlYmluZCh0LGosIm9uIil9O3ZhciBRYSxLYSxKYT1bMCwxLzBdO2NhLmNvbG9yPWx0LGx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifSxjYS5oc2w9dXQ7dmFyICRhPXV0LnByb3RvdHlwZT1uZXcgbHQ7JGEuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpLG5ldyB1dCh0aGlzLmgsdGhpcy5zLHRoaXMubC90KX0sJGEuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKSxuZXcgdXQodGhpcy5oLHRoaXMucyx0KnRoaXMubCl9LCRhLnJnYj1mdW5jdGlvbigpe3JldHVybiBjdCh0aGlzLmgsdGhpcy5zLHRoaXMubCl9LGNhLmhjbD1odDt2YXIgdHM9aHQucHJvdG90eXBlPW5ldyBsdDt0cy5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGh0KHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRoaXMubCtlcyooYXJndW1lbnRzLmxlbmd0aD90OjEpKSl9LHRzLmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGh0KHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0aGlzLmwtZXMqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSkpfSx0cy5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gZnQodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSxjYS5sYWI9cHQ7dmFyIGVzPTE4LHJzPS45NTA0Nyxucz0xLGlzPTEuMDg4ODMsb3M9cHQucHJvdG90eXBlPW5ldyBsdDtvcy5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHB0KE1hdGgubWluKDEwMCx0aGlzLmwrZXMqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSksdGhpcy5hLHRoaXMuYil9LG9zLmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHB0KE1hdGgubWF4KDAsdGhpcy5sLWVzKihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpLHRoaXMuYSx0aGlzLmIpfSxvcy5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gZHQodGhpcy5sLHRoaXMuYSx0aGlzLmIpfSxjYS5yZ2I9YnQ7dmFyIGFzPWJ0LnByb3RvdHlwZT1uZXcgbHQ7YXMuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7dD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSk7dmFyIGU9dGhpcy5yLHI9dGhpcy5nLG49dGhpcy5iLGk9MzA7cmV0dXJuIGV8fHJ8fG4/KGUmJmk+ZSYmKGU9aSksciYmaT5yJiYocj1pKSxuJiZpPm4mJihuPWkpLG5ldyBidChNYXRoLm1pbigyNTUsZS90KSxNYXRoLm1pbigyNTUsci90KSxNYXRoLm1pbigyNTUsbi90KSkpOm5ldyBidChpLGksaSl9LGFzLmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IGJ0KHQqdGhpcy5yLHQqdGhpcy5nLHQqdGhpcy5iKX0sYXMuaHNsPWZ1bmN0aW9uKCl7cmV0dXJuIGt0KHRoaXMucix0aGlzLmcsdGhpcy5iKX0sYXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIyIrd3QodGhpcy5yKSt3dCh0aGlzLmcpK3d0KHRoaXMuYil9O3ZhciBzcz1jYS5tYXAoe2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH0pO3NzLmZvckVhY2goZnVuY3Rpb24odCxlKXtzcy5zZXQodCx4dChlKSl9KSxjYS5mdW5jdG9yPVN0LGNhLnhocj1MdCh4KSxjYS5kc3Y9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQscixvKXthcmd1bWVudHMubGVuZ3RoPDMmJihvPXIscj1udWxsKTt2YXIgYT16dCh0LGUsbnVsbD09cj9uOmkociksbyk7cmV0dXJuIGEucm93PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EucmVzcG9uc2UobnVsbD09KHI9dCk/bjppKHQpKTpyfSxhfWZ1bmN0aW9uIG4odCl7cmV0dXJuIHIucGFyc2UodC5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiByLnBhcnNlKGUucmVzcG9uc2VUZXh0LHQpfX1mdW5jdGlvbiBvKGUpe3JldHVybiBlLm1hcChhKS5qb2luKHQpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHMudGVzdCh0KT8nIicrdC5yZXBsYWNlKC9cIi9nLCciIicpKyciJzp0fXZhciBzPW5ldyBSZWdFeHAoJ1siJyt0KyJcbl0iKSxsPXQuY2hhckNvZGVBdCgwKTtyZXR1cm4gci5wYXJzZT1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiByLnBhcnNlUm93cyh0LGZ1bmN0aW9uKHQscil7aWYobilyZXR1cm4gbih0LHItMSk7dmFyIGk9bmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK3QubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIitlKyJdIn0pLmpvaW4oIiwiKSsifSIpO249ZT9mdW5jdGlvbih0LHIpe3JldHVybiBlKGkodCkscil9Oml9KX0sci5wYXJzZVJvd3M9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7aWYoYz49dSlyZXR1cm4gYTtpZihpKXJldHVybiBpPSExLG87dmFyIGU9YztpZigzND09PXQuY2hhckNvZGVBdChlKSl7Zm9yKHZhciByPWU7cisrPHU7KWlmKDM0PT09dC5jaGFyQ29kZUF0KHIpKXtpZigzNCE9PXQuY2hhckNvZGVBdChyKzEpKWJyZWFrOysrcn1jPXIrMjt2YXIgbj10LmNoYXJDb2RlQXQocisxKTtyZXR1cm4gMTM9PT1uPyhpPSEwLDEwPT09dC5jaGFyQ29kZUF0KHIrMikmJisrYyk6MTA9PT1uJiYoaT0hMCksdC5zbGljZShlKzEscikucmVwbGFjZSgvIiIvZywnIicpfWZvcig7dT5jOyl7dmFyIG49dC5jaGFyQ29kZUF0KGMrKykscz0xO2lmKDEwPT09bilpPSEwO2Vsc2UgaWYoMTM9PT1uKWk9ITAsMTA9PT10LmNoYXJDb2RlQXQoYykmJigrK2MsKytzKTtlbHNlIGlmKG4hPT1sKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKGUsYy1zKX1yZXR1cm4gdC5zbGljZShlKX1mb3IodmFyIG4saSxvPXt9LGE9e30scz1bXSx1PXQubGVuZ3RoLGM9MCxoPTA7KG49cigpKSE9PWE7KXtmb3IodmFyIGY9W107biE9PW8mJm4hPT1hOylmLnB1c2gobiksbj1yKCk7ZSYmbnVsbD09KGY9ZShmLGgrKykpfHxzLnB1c2goZil9cmV0dXJuIHN9LHIuZm9ybWF0PWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZVswXSkpcmV0dXJuIHIuZm9ybWF0Um93cyhlKTt2YXIgbj1uZXcgYixpPVtdO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpbi5oYXMoZSl8fGkucHVzaChuLmFkZChlKSl9KSxbaS5tYXAoYSkuam9pbih0KV0uY29uY2F0KGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gYShlW3RdKX0pLmpvaW4odCl9KSkuam9pbigiXG4iKX0sci5mb3JtYXRSb3dzPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChvKS5qb2luKCJcbiIpfSxyfSxjYS5jc3Y9Y2EuZHN2KCIsIiwidGV4dC9jc3YiKSxjYS50c3Y9Y2EuZHN2KCIJIiwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIpO3ZhciBscyx1cyxjcyxocyxmcz10aGlzW3codGhpcywicmVxdWVzdEFuaW1hdGlvbkZyYW1lIildfHxmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtjYS50aW1lcj1mdW5jdGlvbigpe0N0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sY2EudGltZXIuZmx1c2g9ZnVuY3Rpb24oKXtqdCgpLER0KCl9LGNhLnJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/TWF0aC5yb3VuZCh0KihlPU1hdGgucG93KDEwLGUpKSkvZTpNYXRoLnJvdW5kKHQpfTt2YXIgcHM9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0ubWFwKEZ0KTtjYS5mb3JtYXRQcmVmaXg9ZnVuY3Rpb24odCxlKXt2YXIgcj0wO3JldHVybih0PSt0KSYmKDA+dCYmKHQqPS0xKSxlJiYodD1jYS5yb3VuZCh0LE90KHQsZSkpKSxyPTErTWF0aC5mbG9vcigxZS0xMitNYXRoLmxvZyh0KS9NYXRoLkxOMTApLHI9TWF0aC5tYXgoLTI0LE1hdGgubWluKDI0LDMqTWF0aC5mbG9vcigoci0xKS8zKSkpKSxwc1s4K3IvM119O3ZhciBkcz0vKD86KFtee10pPyhbPD49Xl0pKT8oWytcLSBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC4tP1xkKyk/KFthLXolXSk/L2ksbXM9Y2EubWFwKHtiOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDgpfSx4OmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDE2KX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LHI6ZnVuY3Rpb24odCxlKXtyZXR1cm4odD1jYS5yb3VuZCh0LE90KHQsZSkpKS50b0ZpeGVkKE1hdGgubWF4KDAsTWF0aC5taW4oMjAsT3QodCooMSsxZS0xNSksZSkpKSl9fSksZ3M9Y2EudGltZT17fSx2cz1EYXRlO1V0LnByb3RvdHlwZT17Z2V0RGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRGF0ZSgpfSxnZXREYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RheSgpfSxnZXRGdWxsWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRnVsbFllYXIoKX0sZ2V0SG91cnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0hvdXJzKCl9LGdldE1pbGxpc2Vjb25kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTWlsbGlzZWNvbmRzKCl9LGdldE1pbnV0ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbnV0ZXMoKX0sZ2V0TW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01vbnRoKCl9LGdldFNlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ1NlY29uZHMoKX0sZ2V0VGltZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VGltZSgpfSxnZXRUaW1lem9uZU9mZnNldDpmdW5jdGlvbigpe3JldHVybiAwfSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy52YWx1ZU9mKCl9LHNldERhdGU6ZnVuY3Rpb24oKXt5cy5zZXRVVENEYXRlLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXREYXk6ZnVuY3Rpb24oKXt5cy5zZXRVVENEYXkuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldEZ1bGxZZWFyOmZ1bmN0aW9uKCl7eXMuc2V0VVRDRnVsbFllYXIuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldEhvdXJzOmZ1bmN0aW9uKCl7eXMuc2V0VVRDSG91cnMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1pbGxpc2Vjb25kczpmdW5jdGlvbigpe3lzLnNldFVUQ01pbGxpc2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TWludXRlczpmdW5jdGlvbigpe3lzLnNldFVUQ01pbnV0ZXMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1vbnRoOmZ1bmN0aW9uKCl7eXMuc2V0VVRDTW9udGguYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldFNlY29uZHM6ZnVuY3Rpb24oKXt5cy5zZXRVVENTZWNvbmRzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRUaW1lOmZ1bmN0aW9uKCl7eXMuc2V0VGltZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX19O3ZhciB5cz1EYXRlLnByb3RvdHlwZTtncy55ZWFyPVZ0KGZ1bmN0aW9uKHQpe3JldHVybiB0PWdzLmRheSh0KSx0LnNldE1vbnRoKDAsMSksdH0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKX0pLGdzLnllYXJzPWdzLnllYXIucmFuZ2UsZ3MueWVhcnMudXRjPWdzLnllYXIudXRjLnJhbmdlLGdzLmRheT1WdChmdW5jdGlvbih0KXt2YXIgZT1uZXcgdnMoMmUzLDApO3JldHVybiBlLnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpLGV9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pLGdzLmRheXM9Z3MuZGF5LnJhbmdlLGdzLmRheXMudXRjPWdzLmRheS51dGMucmFuZ2UsZ3MuZGF5T2ZZZWFyPWZ1bmN0aW9uKHQpe3ZhciBlPWdzLnllYXIodCk7cmV0dXJuIE1hdGguZmxvb3IoKHQtZS02ZTQqKHQuZ2V0VGltZXpvbmVPZmZzZXQoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkpKS84NjRlNSl9LFsic3VuZGF5IiwibW9uZGF5IiwidHVlc2RheSIsIndlZG5lc2RheSIsInRodXJzZGF5IiwiZnJpZGF5Iiwic2F0dXJkYXkiXS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7ZT03LWU7dmFyIHI9Z3NbdF09VnQoZnVuY3Rpb24odCl7cmV0dXJuKHQ9Z3MuZGF5KHQpKS5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpK2UpJTcpLHR9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqTWF0aC5mbG9vcihlKSl9LGZ1bmN0aW9uKHQpe3ZhciByPWdzLnllYXIodCkuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKGdzLmRheU9mWWVhcih0KSsocitlKSU3KS83KS0ociE9PWUpfSk7Z3NbdCsicyJdPXIucmFuZ2UsZ3NbdCsicyJdLnV0Yz1yLnV0Yy5yYW5nZSxnc1t0KyJPZlllYXIiXT1mdW5jdGlvbih0KXt2YXIgcj1ncy55ZWFyKHQpLmdldERheSgpO3JldHVybiBNYXRoLmZsb29yKChncy5kYXlPZlllYXIodCkrKHIrZSklNykvNyl9fSksZ3Mud2Vlaz1ncy5zdW5kYXksZ3Mud2Vla3M9Z3Muc3VuZGF5LnJhbmdlLGdzLndlZWtzLnV0Yz1ncy5zdW5kYXkudXRjLnJhbmdlLGdzLndlZWtPZlllYXI9Z3Muc3VuZGF5T2ZZZWFyO3ZhciBicz17Ii0iOiIiLF86IiAiLDA6IjAifSx4cz0vXlxzKlxkKy8sX3M9L14lLztjYS5sb2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJue251bWJlckZvcm1hdDpOdCh0KSx0aW1lRm9ybWF0Okd0KHQpfX07dmFyIHdzPWNhLmxvY2FsZSh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sZGF0ZVRpbWU6IiVhICViICVlICVYICVZIixkYXRlOiIlbS8lZC8lWSIsdGltZToiJUg6JU06JVMiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7Y2EuZm9ybWF0PXdzLm51bWJlckZvcm1hdCxjYS5nZW89e30saGUucHJvdG90eXBlPXtzOjAsdDowLGFkZDpmdW5jdGlvbih0KXtmZSh0LHRoaXMudCxNcyksZmUoTXMucyx0aGlzLnMsdGhpcyksdGhpcy5zP3RoaXMudCs9TXMudDp0aGlzLnM9TXMudH0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIE1zPW5ldyBoZTtjYS5nZW8uc3RyZWFtPWZ1bmN0aW9uKHQsZSl7dCYma3MuaGFzT3duUHJvcGVydHkodC50eXBlKT9rc1t0LnR5cGVdKHQsZSk6cGUodCxlKX07dmFyIGtzPXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7cGUodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KXBlKHJbbl0uZ2VvbWV0cnksZSl9fSxBcz17U3BoZXJlOmZ1bmN0aW9uKHQsZSl7ZS5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24odCxlKXt0PXQuY29vcmRpbmF0ZXMsZS5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KXQ9cltuXSxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2RlKHQuY29vcmRpbmF0ZXMsZSwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylkZShyW25dLGUsMCl9LFBvbHlnb246ZnVuY3Rpb24odCxlKXttZSh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KW1lKHJbbl0sZSl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylwZShyW25dLGUpfX07Y2EuZ2VvLmFyZWE9ZnVuY3Rpb24odCl7cmV0dXJuIFRzPTAsY2EuZ2VvLnN0cmVhbSh0LFNzKSxUc307dmFyIFRzLEVzPW5ldyBoZSxTcz17c3BoZXJlOmZ1bmN0aW9uKCl7VHMrPTQqVWF9LHBvaW50Ok0sbGluZVN0YXJ0Ok0sbGluZUVuZDpNLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0VzLnJlc2V0KCksU3MubGluZVN0YXJ0PWdlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9MipFcztUcys9MD50PzQqVWErdDp0LFNzLmxpbmVTdGFydD1Tcy5saW5lRW5kPVNzLnBvaW50PU19fTtjYS5nZW8uYm91bmRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2IucHVzaCh4PVtjPXQsZj10XSksaD5lJiYoaD1lKSxlPnAmJihwPWUpfWZ1bmN0aW9uIGUoZSxyKXt2YXIgbj12ZShbZSpIYSxyKkhhXSk7aWYodil7dmFyIGk9YmUodixuKSxvPVtpWzFdLC1pWzBdLDBdLGE9YmUobyxpKTt3ZShhKSxhPU1lKGEpO3ZhciBsPWUtZCx1PWw+MD8xOi0xLG09YVswXSpYYSp1LGc9d2EobCk+MTgwO2lmKGdeKG0+dSpkJiZ1KmU+bSkpe3ZhciB5PWFbMV0qWGE7eT5wJiYocD15KX1lbHNlIGlmKG09KG0rMzYwKSUzNjAtMTgwLGdeKG0+dSpkJiZ1KmU+bSkpe3ZhciB5PS1hWzFdKlhhO2g+eSYmKGg9eSl9ZWxzZSBoPnImJihoPXIpLHI+cCYmKHA9cik7Zz9kPmU/cyhjLGUpPnMoYyxmKSYmKGY9ZSk6cyhlLGYpPnMoYyxmKSYmKGM9ZSk6Zj49Yz8oYz5lJiYoYz1lKSxlPmYmJihmPWUpKTplPmQ/cyhjLGUpPnMoYyxmKSYmKGY9ZSk6cyhlLGYpPnMoYyxmKSYmKGM9ZSl9ZWxzZSB0KGUscik7dj1uLGQ9ZX1mdW5jdGlvbiByKCl7Xy5wb2ludD1lfWZ1bmN0aW9uIG4oKXt4WzBdPWMseFsxXT1mLF8ucG9pbnQ9dCx2PW51bGx9ZnVuY3Rpb24gaSh0LHIpe2lmKHYpe3ZhciBuPXQtZDt5Kz13YShuKT4xODA/bisobj4wPzM2MDotMzYwKTpufWVsc2UgbT10LGc9cjtTcy5wb2ludCh0LHIpLGUodCxyKX1mdW5jdGlvbiBvKCl7U3MubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYSgpe2kobSxnKSxTcy5saW5lRW5kKCksd2EoeSk+TmEmJihjPS0oZj0xODApKSx4WzBdPWMseFsxXT1mLHY9bnVsbH1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuKGUtPXQpPDA/ZSszNjA6ZX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH12YXIgYyxoLGYscCxkLG0sZyx2LHksYix4LF89e3BvaW50OnQsbGluZVN0YXJ0OnIsbGluZUVuZDpuLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe18ucG9pbnQ9aSxfLmxpbmVTdGFydD1vLF8ubGluZUVuZD1hLHk9MCxTcy5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1NzLnBvbHlnb25FbmQoKSxfLnBvaW50PXQsXy5saW5lU3RhcnQ9cixfLmxpbmVFbmQ9biwwPkVzPyhjPS0oZj0xODApLGg9LShwPTkwKSk6eT5OYT9wPTkwOi1OYT55JiYoaD0tOTApLHhbMF09Yyx4WzFdPWZ9fTtyZXR1cm4gZnVuY3Rpb24odCl7cD1mPS0oYz1oPTEvMCksYj1bXSxjYS5nZW8uc3RyZWFtKHQsXyk7dmFyIGU9Yi5sZW5ndGg7aWYoZSl7Yi5zb3J0KGwpO2Zvcih2YXIgcixuPTEsaT1iWzBdLG89W2ldO2U+bjsrK24pcj1iW25dLHUoclswXSxpKXx8dShyWzFdLGkpPyhzKGlbMF0sclsxXSk+cyhpWzBdLGlbMV0pJiYoaVsxXT1yWzFdKSxzKHJbMF0saVsxXSk+cyhpWzBdLGlbMV0pJiYoaVswXT1yWzBdKSk6by5wdXNoKGk9cik7Zm9yKHZhciBhLHIsZD0tKDEvMCksZT1vLmxlbmd0aC0xLG49MCxpPW9bZV07ZT49bjtpPXIsKytuKXI9b1tuXSwoYT1zKGlbMV0sclswXSkpPmQmJihkPWEsYz1yWzBdLGY9aVsxXSl9cmV0dXJuIGI9eD1udWxsLGM9PT0xLzB8fGg9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbYyxoXSxbZixwXV19fSgpLGNhLmdlby5jZW50cm9pZD1mdW5jdGlvbih0KXtMcz16cz1Jcz1Qcz1Dcz1Scz1qcz1Ecz1Pcz1Gcz1Ocz0wLGNhLmdlby5zdHJlYW0odCxCcyk7dmFyIGU9T3Mscj1GcyxuPU5zLGk9ZSplK3IqcituKm47cmV0dXJuIEJhPmkmJihlPVJzLHI9anMsbj1EcyxOYT56cyYmKGU9SXMscj1QcyxuPUNzKSxpPWUqZStyKnIrbipuLEJhPmkpP1tOYU4sTmFOXTpbTWF0aC5hdGFuMihyLGUpKlhhLG50KG4vTWF0aC5zcXJ0KGkpKSpYYV19O3ZhciBMcyx6cyxJcyxQcyxDcyxScyxqcyxEcyxPcyxGcyxOcyxCcz17c3BoZXJlOk0scG9pbnQ6QWUsbGluZVN0YXJ0OkVlLGxpbmVFbmQ6U2UscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7QnMubGluZVN0YXJ0PUxlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7QnMubGluZVN0YXJ0PUVlfX0sVXM9amUoSWUsTmUsVWUsWy1VYSwtVWEvMl0pLFZzPTFlOTtjYS5nZW8uY2xpcEV4dGVudD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksbyxhPXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIGkmJihpLnZhbGlkPSExKSxpPW8odCksaS52YWxpZD0hMCxpfSxleHRlbnQ6ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89SGUodD0rc1swXVswXSxlPStzWzBdWzFdLHI9K3NbMV1bMF0sbj0rc1sxXVsxXSksaSYmKGkudmFsaWQ9ITEsaT1udWxsKSxhKTpbW3QsZV0sW3Isbl1dfX07cmV0dXJuIGEuZXh0ZW50KFtbMCwwXSxbOTYwLDUwMF1dKX0sKGNhLmdlby5jb25pY0VxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBYZShZZSl9KS5yYXc9WWUsY2EuZ2VvLmFsYmVycz1mdW5jdGlvbigpe3JldHVybiBjYS5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKX0sY2EuZ2VvLmFsYmVyc1VzYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIG89dFswXSxhPXRbMV07cmV0dXJuIGU9bnVsbCxyKG8sYSksZXx8KG4obyxhKSxlKXx8aShvLGEpLGV9dmFyIGUscixuLGksbz1jYS5nZW8uYWxiZXJzKCksYT1jYS5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLHM9Y2EuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGw9e3BvaW50OmZ1bmN0aW9uKHQscil7ZT1bdCxyXX19O3JldHVybiB0LmludmVydD1mdW5jdGlvbih0KXt2YXIgZT1vLnNjYWxlKCkscj1vLnRyYW5zbGF0ZSgpLG49KHRbMF0tclswXSkvZSxpPSh0WzFdLXJbMV0pL2U7cmV0dXJuKGk+PS4xMiYmLjIzND5pJiZuPj0tLjQyNSYmLS4yMTQ+bj9hOmk+PS4xNjYmJi4yMzQ+aSYmbj49LS4yMTQmJi0uMTE1Pm4/czpvKS5pbnZlcnQodCl9LHQuc3RyZWFtPWZ1bmN0aW9uKHQpe3ZhciBlPW8uc3RyZWFtKHQpLHI9YS5zdHJlYW0odCksbj1zLnN0cmVhbSh0KTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24odCxpKXtlLnBvaW50KHQsaSksci5wb2ludCh0LGkpLG4ucG9pbnQodCxpKX0sc3BoZXJlOmZ1bmN0aW9uKCl7ZS5zcGhlcmUoKSxyLnNwaGVyZSgpLG4uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UubGluZVN0YXJ0KCksci5saW5lU3RhcnQoKSxuLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksci5saW5lRW5kKCksbi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksci5wb2x5Z29uU3RhcnQoKSxuLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCksci5wb2x5Z29uRW5kKCksbi5wb2x5Z29uRW5kKCl9fX0sdC5wcmVjaXNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8ucHJlY2lzaW9uKGUpLGEucHJlY2lzaW9uKGUpLHMucHJlY2lzaW9uKGUpLHQpOm8ucHJlY2lzaW9uKCl9LHQuc2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8uc2NhbGUoZSksYS5zY2FsZSguMzUqZSkscy5zY2FsZShlKSx0LnRyYW5zbGF0ZShvLnRyYW5zbGF0ZSgpKSk6by5zY2FsZSgpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gby50cmFuc2xhdGUoKTt2YXIgdT1vLnNjYWxlKCksYz0rZVswXSxoPStlWzFdO3JldHVybiByPW8udHJhbnNsYXRlKGUpLmNsaXBFeHRlbnQoW1tjLS40NTUqdSxoLS4yMzgqdV0sW2MrLjQ1NSp1LGgrLjIzOCp1XV0pLnN0cmVhbShsKS5wb2ludCxuPWEudHJhbnNsYXRlKFtjLS4zMDcqdSxoKy4yMDEqdV0pLmNsaXBFeHRlbnQoW1tjLS40MjUqdStOYSxoKy4xMip1K05hXSxbYy0uMjE0KnUtTmEsaCsuMjM0KnUtTmFdXSkuc3RyZWFtKGwpLnBvaW50LGk9cy50cmFuc2xhdGUoW2MtLjIwNSp1LGgrLjIxMip1XSkuY2xpcEV4dGVudChbW2MtLjIxNCp1K05hLGgrLjE2Nip1K05hXSxbYy0uMTE1KnUtTmEsaCsuMjM0KnUtTmFdXSkuc3RyZWFtKGwpLnBvaW50LHR9LHQuc2NhbGUoMTA3MCl9O3ZhciBxcyxHcyxIcyxYcyxZcyxXcyxacz17cG9pbnQ6TSxsaW5lU3RhcnQ6TSxsaW5lRW5kOk0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7R3M9MCxacy5saW5lU3RhcnQ9V2V9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtacy5saW5lU3RhcnQ9WnMubGluZUVuZD1acy5wb2ludD1NLHFzKz13YShHcy8yKX19LFFzPXtwb2ludDpaZSxsaW5lU3RhcnQ6TSxsaW5lRW5kOk0scG9seWdvblN0YXJ0Ok0scG9seWdvbkVuZDpNfSxLcz17cG9pbnQ6SmUsbGluZVN0YXJ0OiRlLGxpbmVFbmQ6dHIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7S3MubGluZVN0YXJ0PWVyfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7S3MucG9pbnQ9SmUsS3MubGluZVN0YXJ0PSRlLEtzLmxpbmVFbmQ9dHJ9fTtjYS5nZW8ucGF0aD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIHQmJigiZnVuY3Rpb24iPT10eXBlb2YgcyYmby5wb2ludFJhZGl1cygrcy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGEmJmEudmFsaWR8fChhPWkobykpLGNhLmdlby5zdHJlYW0odCxhKSksby5yZXN1bHQoKX1mdW5jdGlvbiBlKCl7cmV0dXJuIGE9bnVsbCx0fXZhciByLG4saSxvLGEscz00LjU7cmV0dXJuIHQuYXJlYT1mdW5jdGlvbih0KXtyZXR1cm4gcXM9MCxjYS5nZW8uc3RyZWFtKHQsaShacykpLHFzfSx0LmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiBJcz1Qcz1Dcz1Scz1qcz1Ecz1Pcz1Gcz1Ocz0wLGNhLmdlby5zdHJlYW0odCxpKEtzKSksTnM/W09zL05zLEZzL05zXTpEcz9bUnMvRHMsanMvRHNdOkNzP1tJcy9DcyxQcy9Dc106W05hTixOYU5dfSx0LmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gWXM9V3M9LShIcz1Ycz0xLzApLGNhLmdlby5zdHJlYW0odCxpKFFzKSksW1tIcyxYc10sW1lzLFdzXV19LHQucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0ocj10KT90LnN0cmVhbXx8aXIodCk6eCxlKCkpOnJ9LHQuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1udWxsPT0obj10KT9uZXcgUWU6bmV3IHJyKHQpLCJmdW5jdGlvbiIhPXR5cGVvZiBzJiZvLnBvaW50UmFkaXVzKHMpLGUoKSk6bn0sdC5wb2ludFJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOihvLnBvaW50UmFkaXVzKCtlKSwrZSksdCk6c30sdC5wcm9qZWN0aW9uKGNhLmdlby5hbGJlcnNVc2EoKSkuY29udGV4dChudWxsKX0sY2EuZ2VvLnRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm57c3RyZWFtOmZ1bmN0aW9uKGUpe3ZhciByPW5ldyBvcihlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9fX0sb3IucHJvdG90eXBlPXtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSxjYS5nZW8ucHJvamVjdGlvbj1zcixjYS5nZW8ucHJvamVjdGlvbk11dGF0b3I9bHIsKGNhLmdlby5lcXVpcmVjdGFuZ3VsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gc3IoY3IpfSkucmF3PWNyLmludmVydD1jcixjYS5nZW8ucm90YXRpb249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZT10KGVbMF0qSGEsZVsxXSpIYSksZVswXSo9WGEsZVsxXSo9WGEsZX1yZXR1cm4gdD1mcih0WzBdJTM2MCpIYSx0WzFdKkhhLHQubGVuZ3RoPjI/dFsyXSpIYTowKSxlLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4gZT10LmludmVydChlWzBdKkhhLGVbMV0qSGEpLGVbMF0qPVhhLGVbMV0qPVhhLGV9LGV9LGhyLmludmVydD1jcixjYS5nZW8uY2lyY2xlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4sZT1mcigtdFswXSpIYSwtdFsxXSpIYSwwKS5pbnZlcnQsaT1bXTtyZXR1cm4gcihudWxsLG51bGwsMSx7cG9pbnQ6ZnVuY3Rpb24odCxyKXtpLnB1c2godD1lKHQscikpLHRbMF0qPVhhLHRbMV0qPVhhfX0pLHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbaV19fXZhciBlLHIsbj1bMCwwXSxpPTY7cmV0dXJuIHQub3JpZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC5hbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1ncigoZT0rbikqSGEsaSpIYSksdCk6ZX0sdC5wcmVjaXNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Z3IoZSpIYSwoaT0rbikqSGEpLHQpOml9LHQuYW5nbGUoOTApfSxjYS5nZW8uZGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuPShlWzBdLXRbMF0pKkhhLGk9dFsxXSpIYSxvPWVbMV0qSGEsYT1NYXRoLnNpbihuKSxzPU1hdGguY29zKG4pLGw9TWF0aC5zaW4oaSksdT1NYXRoLmNvcyhpKSxjPU1hdGguc2luKG8pLGg9TWF0aC5jb3Mobyk7cmV0dXJuIE1hdGguYXRhbjIoTWF0aC5zcXJ0KChyPWgqYSkqcisocj11KmMtbCpoKnMpKnIpLGwqYyt1Kmgqcyl9LGNhLmdlby5ncmF0aWN1bGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6ZSgpfX1mdW5jdGlvbiBlKCl7cmV0dXJuIGNhLnJhbmdlKE1hdGguY2VpbChvL2cpKmcsaSxnKS5tYXAoZikuY29uY2F0KGNhLnJhbmdlKE1hdGguY2VpbCh1L3YpKnYsbCx2KS5tYXAocCkpLmNvbmNhdChjYS5yYW5nZShNYXRoLmNlaWwobi9kKSpkLHIsZCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB3YSh0JWcpPk5hfSkubWFwKGMpKS5jb25jYXQoY2EucmFuZ2UoTWF0aC5jZWlsKHMvbSkqbSxhLG0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gd2EodCV2KT5OYX0pLm1hcChoKSl9dmFyIHIsbixpLG8sYSxzLGwsdSxjLGgsZixwLGQ9MTAsbT1kLGc9OTAsdj0zNjAseT0yLjU7cmV0dXJuIHQubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KX0sdC5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltmKG8pLmNvbmNhdChwKGwpLnNsaWNlKDEpLGYoaSkucmV2ZXJzZSgpLnNsaWNlKDEpLHAodSkucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx0LmV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90Lm1ham9yRXh0ZW50KGUpLm1pbm9yRXh0ZW50KGUpOnQubWlub3JFeHRlbnQoKX0sdC5tYWpvckV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rZVswXVswXSxpPStlWzFdWzBdLHU9K2VbMF1bMV0sbD0rZVsxXVsxXSxvPmkmJihlPW8sbz1pLGk9ZSksdT5sJiYoZT11LHU9bCxsPWUpLHQucHJlY2lzaW9uKHkpKTpbW28sdV0sW2ksbF1dfSx0Lm1pbm9yRXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStlWzBdWzBdLHI9K2VbMV1bMF0scz0rZVswXVsxXSxhPStlWzFdWzFdLG4+ciYmKGU9bixuPXIscj1lKSxzPmEmJihlPXMscz1hLGE9ZSksdC5wcmVjaXNpb24oeSkpOltbbixzXSxbcixhXV19LHQuc3RlcD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90Lm1ham9yU3RlcChlKS5taW5vclN0ZXAoZSk6dC5taW5vclN0ZXAoKX0sdC5tYWpvclN0ZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K2VbMF0sdj0rZVsxXSx0KTpbZyx2XX0sdC5taW5vclN0ZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9K2VbMF0sbT0rZVsxXSx0KTpbZCxtXX0sdC5wcmVjaXNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K2UsYz15cihzLGEsOTApLGg9YnIobixyLHkpLGY9eXIodSxsLDkwKSxwPWJyKG8saSx5KSx0KTp5fSx0Lm1ham9yRXh0ZW50KFtbLTE4MCwtOTArTmFdLFsxODAsOTAtTmFdXSkubWlub3JFeHRlbnQoW1stMTgwLC04MC1OYV0sWzE4MCw4MCtOYV1dKX0sY2EuZ2VvLmdyZWF0QXJjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpbZXx8bi5hcHBseSh0aGlzLGFyZ3VtZW50cykscnx8aS5hcHBseSh0aGlzLGFyZ3VtZW50cyldfX12YXIgZSxyLG49eHIsaT1fcjtyZXR1cm4gdC5kaXN0YW5jZT1mdW5jdGlvbigpe3JldHVybiBjYS5nZW8uZGlzdGFuY2UoZXx8bi5hcHBseSh0aGlzLGFyZ3VtZW50cykscnx8aS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSx0LnNvdXJjZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1yLGU9ImZ1bmN0aW9uIj09dHlwZW9mIHI/bnVsbDpyLHQpOm59LHQudGFyZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUscj0iZnVuY3Rpb24iPT10eXBlb2YgZT9udWxsOmUsdCk6aX0sdC5wcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90OjB9LHR9LGNhLmdlby5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB3cih0WzBdKkhhLHRbMV0qSGEsZVswXSpIYSxlWzFdKkhhKX0sY2EuZ2VvLmxlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gSnM9MCxjYS5nZW8uc3RyZWFtKHQsJHMpLEpzfTt2YXIgSnMsJHM9e3NwaGVyZTpNLHBvaW50Ok0sbGluZVN0YXJ0Ok1yLGxpbmVFbmQ6TSxwb2x5Z29uU3RhcnQ6TSxwb2x5Z29uRW5kOk19LHRsPWtyKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoMi8oMSt0KSl9LGZ1bmN0aW9uKHQpe3JldHVybiAyKk1hdGguYXNpbih0LzIpfSk7KGNhLmdlby5hemltdXRoYWxFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gc3IodGwpfSkucmF3PXRsO3ZhciBlbD1rcihmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmFjb3ModCk7cmV0dXJuIGUmJmUvTWF0aC5zaW4oZSl9LHgpOyhjYS5nZW8uYXppbXV0aGFsRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gc3IoZWwpfSkucmF3PWVsLChjYS5nZW8uY29uaWNDb25mb3JtYWw9ZnVuY3Rpb24oKXtyZXR1cm4gWGUoQXIpfSkucmF3PUFyLChjYS5nZW8uY29uaWNFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBYZShUcil9KS5yYXc9VHI7dmFyIHJsPWtyKGZ1bmN0aW9uKHQpe3JldHVybiAxL3R9LE1hdGguYXRhbik7KGNhLmdlby5nbm9tb25pYz1mdW5jdGlvbigpe3JldHVybiBzcihybCl9KS5yYXc9cmwsRXIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMipNYXRoLmF0YW4oTWF0aC5leHAoZSkpLUdhXX0sKGNhLmdlby5tZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiBTcihFcil9KS5yYXc9RXI7dmFyIG5sPWtyKGZ1bmN0aW9uKCl7cmV0dXJuIDF9LE1hdGguYXNpbik7KGNhLmdlby5vcnRob2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gc3IobmwpfSkucmF3PW5sO3ZhciBpbD1rcihmdW5jdGlvbih0KXtyZXR1cm4gMS8oMSt0KX0sZnVuY3Rpb24odCl7cmV0dXJuIDIqTWF0aC5hdGFuKHQpfSk7KGNhLmdlby5zdGVyZW9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIHNyKGlsKX0pLnJhdz1pbCxMci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bLWUsMipNYXRoLmF0YW4oTWF0aC5leHAodCkpLUdhXX0sKGNhLmdlby50cmFuc3ZlcnNlTWVyY2F0b3I9ZnVuY3Rpb24oKXt2YXIgdD1TcihMciksZT10LmNlbnRlcixyPXQucm90YXRlO3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD9lKFstdFsxXSx0WzBdXSk6KHQ9ZSgpLFt0WzFdLC10WzBdXSl9LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0P3IoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKToodD1yKCksW3RbMF0sdFsxXSx0WzJdLTkwXSl9LHIoWzAsMCw5MF0pfSkucmF3PUxyLGNhLmdlb209e30sY2EuZ2VvbS5odWxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7aWYodC5sZW5ndGg8MylyZXR1cm5bXTt2YXIgZSxpPVN0KHIpLG89U3QobiksYT10Lmxlbmd0aCxzPVtdLGw9W107Zm9yKGU9MDthPmU7ZSsrKXMucHVzaChbK2kuY2FsbCh0aGlzLHRbZV0sZSksK28uY2FsbCh0aGlzLHRbZV0sZSksZV0pO2ZvcihzLnNvcnQoQ3IpLGU9MDthPmU7ZSsrKWwucHVzaChbc1tlXVswXSwtc1tlXVsxXV0pO3ZhciB1PVByKHMpLGM9UHIobCksaD1jWzBdPT09dVswXSxmPWNbYy5sZW5ndGgtMV09PT11W3UubGVuZ3RoLTFdLHA9W107Zm9yKGU9dS5sZW5ndGgtMTtlPj0wOy0tZSlwLnB1c2godFtzW3VbZV1dWzJdXSk7Zm9yKGU9K2g7ZTxjLmxlbmd0aC1mOysrZSlwLnB1c2godFtzW2NbZV1dWzJdXSk7cmV0dXJuIHB9dmFyIHI9enIsbj1JcjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHQpOihlLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxlKTpyfSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlKTpufSxlKX0sY2EuZ2VvbS5wb2x5Z29uPWZ1bmN0aW9uKHQpe3JldHVybiBFYSh0LG9sKSx0fTt2YXIgb2w9Y2EuZ2VvbS5wb2x5Z29uLnByb3RvdHlwZT1bXTtvbC5hcmVhPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9LTEscj10aGlzLmxlbmd0aCxuPXRoaXNbci0xXSxpPTA7KytlPHI7KXQ9bixuPXRoaXNbZV0saSs9dFsxXSpuWzBdLXRbMF0qblsxXTtyZXR1cm4uNSppfSxvbC5jZW50cm9pZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49LTEsaT10aGlzLmxlbmd0aCxvPTAsYT0wLHM9dGhpc1tpLTFdO2Zvcihhcmd1bWVudHMubGVuZ3RofHwodD0tMS8oNip0aGlzLmFyZWEoKSkpOysrbjxpOyllPXMscz10aGlzW25dLHI9ZVswXSpzWzFdLXNbMF0qZVsxXSxvKz0oZVswXStzWzBdKSpyLGErPShlWzFdK3NbMV0pKnI7cmV0dXJuW28qdCxhKnRdfSxvbC5jbGlwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxvLGEscz1Ecih0KSxsPS0xLHU9dGhpcy5sZW5ndGgtRHIodGhpcyksYz10aGlzW3UtMV07KytsPHU7KXtmb3IoZT10LnNsaWNlKCksdC5sZW5ndGg9MCxpPXRoaXNbbF0sbz1lWyhuPWUubGVuZ3RoLXMpLTFdLHI9LTE7KytyPG47KWE9ZVtyXSxScihhLGMsaSk/KFJyKG8sYyxpKXx8dC5wdXNoKGpyKG8sYSxjLGkpKSx0LnB1c2goYSkpOlJyKG8sYyxpKSYmdC5wdXNoKGpyKG8sYSxjLGkpKSxvPWE7cyYmdC5wdXNoKHRbMF0pLGM9aX1yZXR1cm4gdH07dmFyIGFsLHNsLGxsLHVsLGNsLGhsPVtdLGZsPVtdO0dyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9dGhpcy5lZGdlcyxyPWUubGVuZ3RoO3ItLTspdD1lW3JdLmVkZ2UsdC5iJiZ0LmF8fGUuc3BsaWNlKHIsMSk7cmV0dXJuIGUuc29ydChYciksZS5sZW5ndGh9LHJuLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmE6dGhpcy5lZGdlLmJ9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0ZT90aGlzLmVkZ2UuYjp0aGlzLmVkZ2UuYX19LG5uLnByb3RvdHlwZT17aW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO3I9dH1lbHNlIHRoaXMuXz8odD1sbih0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxyPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUscj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1yLGUuQz0hMCx0PWU7ciYmci5DOyluPXIuVSxyPT09bi5MPyhpPW4uUixpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLHQ9bik6KHQ9PT1yLlImJihhbih0aGlzLHIpLHQ9cixyPXQuVSksci5DPSExLG4uQz0hMCxzbih0aGlzLG4pKSk6KGk9bi5MLGkmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsdD1uKToodD09PXIuTCYmKHNuKHRoaXMsciksdD1yLHI9dC5VKSxyLkM9ITEsbi5DPSEwLGFuKHRoaXMsbikpKSxyPXQuVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3QuTiYmKHQuTi5QPXQuUCksdC5QJiYodC5QLk49dC5OKSx0Lk49dC5QPW51bGw7dmFyIGUscixuLGk9dC5VLG89dC5MLGE9dC5SO2lmKHI9bz9hP2xuKGEpOm86YSxpP2kuTD09PXQ/aS5MPXI6aS5SPXI6dGhpcy5fPXIsbyYmYT8obj1yLkMsci5DPXQuQyxyLkw9byxvLlU9cixyIT09YT8oaT1yLlUsci5VPXQuVSx0PXIuUixpLkw9dCxyLlI9YSxhLlU9cik6KHIuVT1pLGk9cix0PXIuUikpOihuPXQuQyx0PXIpLHQmJih0LlU9aSksIW4pe2lmKHQmJnQuQylyZXR1cm4gdm9pZCh0LkM9ITEpO2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PWkuTCl7aWYoZT1pLlIsZS5DJiYoZS5DPSExLGkuQz0hMCxhbih0aGlzLGkpLGU9aS5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLlImJmUuUi5DfHwoZS5MLkM9ITEsZS5DPSEwLHNuKHRoaXMsZSksZT1pLlIpLGUuQz1pLkMsaS5DPWUuUi5DPSExLGFuKHRoaXMsaSksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoZT1pLkwsZS5DJiYoZS5DPSExLGkuQz0hMCxzbih0aGlzLGkpLGU9aS5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLkwmJmUuTC5DfHwoZS5SLkM9ITEsZS5DPSEwLGFuKHRoaXMsZSksZT1pLkwpLGUuQz1pLkMsaS5DPWUuTC5DPSExLHNuKHRoaXMsaSksdD10aGlzLl87YnJlYWt9ZS5DPSEwLHQ9aSxpPWkuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fSxjYS5nZW9tLnZvcm9ub2k9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLG49c1swXVswXSxpPXNbMF1bMV0sbz1zWzFdWzBdLGE9c1sxXVsxXTtyZXR1cm4gdW4ocih0KSxzKS5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKHIscyl7dmFyIGw9ci5lZGdlcyx1PXIuc2l0ZSxjPWVbc109bC5sZW5ndGg/bC5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC5zdGFydCgpO3JldHVybltlLngsZS55XTsKfSk6dS54Pj1uJiZ1Lng8PW8mJnUueT49aSYmdS55PD1hP1tbbixhXSxbbyxhXSxbbyxpXSxbbixpXV06W107Yy5wb2ludD10W3NdfSksZX1mdW5jdGlvbiByKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybnt4Ok1hdGgucm91bmQobyh0LGUpL05hKSpOYSx5Ok1hdGgucm91bmQoYSh0LGUpL05hKSpOYSxpOmV9fSl9dmFyIG49enIsaT1JcixvPW4sYT1pLHM9cGw7cmV0dXJuIHQ/ZSh0KTooZS5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gdW4ocih0KSkuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmwmJnQucn0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnRbZS5sLmldLHRhcmdldDp0W2Uuci5pXX19KX0sZS50cmlhbmdsZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHVuKHIodCkpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtmb3IodmFyIGksbyxhPXIuc2l0ZSxzPXIuZWRnZXMuc29ydChYciksbD0tMSx1PXMubGVuZ3RoLGM9c1t1LTFdLmVkZ2UsaD1jLmw9PT1hP2MucjpjLmw7KytsPHU7KWk9YyxvPWgsYz1zW2xdLmVkZ2UsaD1jLmw9PT1hP2MucjpjLmwsbjxvLmkmJm48aC5pJiZobihhLG8saCk8MCYmZS5wdXNoKFt0W25dLHRbby5pXSx0W2guaV1dKX0pLGV9LGUueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1TdChuPXQpLGUpOm59LGUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1TdChpPXQpLGUpOml9LGUuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P3BsOnQsZSk6cz09PXBsP251bGw6c30sZS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UuY2xpcEV4dGVudCh0JiZbWzAsMF0sdF0pOnM9PT1wbD9udWxsOnMmJnNbMV19LGUpfTt2YXIgcGw9W1stMWU2LC0xZTZdLFsxZTYsMWU2XV07Y2EuZ2VvbS5kZWxhdW5heT1mdW5jdGlvbih0KXtyZXR1cm4gY2EuZ2VvbS52b3Jvbm9pKCkudHJpYW5nbGVzKHQpfSxjYS5nZW9tLnF1YWR0cmVlPWZ1bmN0aW9uKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyh0KXtmdW5jdGlvbiBvKHQsZSxyLG4saSxvLGEscyl7aWYoIWlzTmFOKHIpJiYhaXNOYU4obikpaWYodC5sZWFmKXt2YXIgbD10LngsYz10Lnk7aWYobnVsbCE9bClpZih3YShsLXIpK3dhKGMtbik8LjAxKXUodCxlLHIsbixpLG8sYSxzKTtlbHNle3ZhciBoPXQucG9pbnQ7dC54PXQueT10LnBvaW50PW51bGwsdSh0LGgsbCxjLGksbyxhLHMpLHUodCxlLHIsbixpLG8sYSxzKX1lbHNlIHQueD1yLHQueT1uLHQucG9pbnQ9ZX1lbHNlIHUodCxlLHIsbixpLG8sYSxzKX1mdW5jdGlvbiB1KHQsZSxyLG4saSxhLHMsbCl7dmFyIHU9LjUqKGkrcyksYz0uNSooYStsKSxoPXI+PXUsZj1uPj1jLHA9Zjw8MXxoO3QubGVhZj0hMSx0PXQubm9kZXNbcF18fCh0Lm5vZGVzW3BdPWRuKCkpLGg/aT11OnM9dSxmP2E9YzpsPWMsbyh0LGUscixuLGksYSxzLGwpfXZhciBjLGgsZixwLGQsbSxnLHYseSxiPVN0KHMpLHg9U3QobCk7aWYobnVsbCE9ZSltPWUsZz1yLHY9bix5PWk7ZWxzZSBpZih2PXk9LShtPWc9MS8wKSxoPVtdLGY9W10sZD10Lmxlbmd0aCxhKWZvcihwPTA7ZD5wOysrcCljPXRbcF0sYy54PG0mJihtPWMueCksYy55PGcmJihnPWMueSksYy54PnYmJih2PWMueCksYy55PnkmJih5PWMueSksaC5wdXNoKGMueCksZi5wdXNoKGMueSk7ZWxzZSBmb3IocD0wO2Q+cDsrK3Ape3ZhciBfPStiKGM9dFtwXSxwKSx3PSt4KGMscCk7bT5fJiYobT1fKSxnPncmJihnPXcpLF8+diYmKHY9Xyksdz55JiYoeT13KSxoLnB1c2goXyksZi5wdXNoKHcpfXZhciBNPXYtbSxrPXktZztNPms/eT1nK006dj1tK2s7dmFyIEE9ZG4oKTtpZihBLmFkZD1mdW5jdGlvbih0KXtvKEEsdCwrYih0LCsrcCksK3godCxwKSxtLGcsdix5KX0sQS52aXNpdD1mdW5jdGlvbih0KXttbih0LEEsbSxnLHYseSl9LEEuZmluZD1mdW5jdGlvbih0KXtyZXR1cm4gZ24oQSx0WzBdLHRbMV0sbSxnLHYseSl9LHA9LTEsbnVsbD09ZSl7Zm9yKDsrK3A8ZDspbyhBLHRbcF0saFtwXSxmW3BdLG0sZyx2LHkpOy0tcH1lbHNlIHQuZm9yRWFjaChBLmFkZCk7cmV0dXJuIGg9Zj10PWM9bnVsbCxBfXZhciBhLHM9enIsbD1JcjtyZXR1cm4oYT1hcmd1bWVudHMubGVuZ3RoKT8ocz1mbixsPXBuLDM9PT1hJiYoaT1yLG49ZSxyPWU9MCksbyh0KSk6KG8ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LG8pOnN9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10LG8pOmx9LG8uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2U9cj1uPWk9bnVsbDooZT0rdFswXVswXSxyPSt0WzBdWzFdLG49K3RbMV1bMF0saT0rdFsxXVsxXSksbyk6bnVsbD09ZT9udWxsOltbZSxyXSxbbixpXV19LG8uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9lPXI9bj1pPW51bGw6KGU9cj0wLG49K3RbMF0saT0rdFsxXSksbyk6bnVsbD09ZT9udWxsOltuLWUsaS1yXX0sbyl9LGNhLmludGVycG9sYXRlUmdiPXZuLGNhLmludGVycG9sYXRlT2JqZWN0PXluLGNhLmludGVycG9sYXRlTnVtYmVyPWJuLGNhLmludGVycG9sYXRlU3RyaW5nPXhuO3ZhciBkbD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csbWw9bmV3IFJlZ0V4cChkbC5zb3VyY2UsImciKTtjYS5pbnRlcnBvbGF0ZT1fbixjYS5pbnRlcnBvbGF0b3JzPVtmdW5jdGlvbih0LGUpe3ZhciByPXR5cGVvZiBlO3JldHVybigic3RyaW5nIj09PXI/c3MuaGFzKGUudG9Mb3dlckNhc2UoKSl8fC9eKCN8cmdiXCh8aHNsXCgpL2kudGVzdChlKT92bjp4bjplIGluc3RhbmNlb2YgbHQ/dm46QXJyYXkuaXNBcnJheShlKT93bjoib2JqZWN0Ij09PXImJmlzTmFOKGUpP3luOmJuKSh0LGUpfV0sY2EuaW50ZXJwb2xhdGVBcnJheT13bjt2YXIgZ2w9ZnVuY3Rpb24oKXtyZXR1cm4geH0sdmw9Y2EubWFwKHtsaW5lYXI6Z2wscG9seTpMbixxdWFkOmZ1bmN0aW9uKCl7cmV0dXJuIFRufSxjdWJpYzpmdW5jdGlvbigpe3JldHVybiBFbn0sc2luOmZ1bmN0aW9uKCl7cmV0dXJuIHpufSxleHA6ZnVuY3Rpb24oKXtyZXR1cm4gSW59LGNpcmNsZTpmdW5jdGlvbigpe3JldHVybiBQbn0sZWxhc3RpYzpDbixiYWNrOlJuLGJvdW5jZTpmdW5jdGlvbigpe3JldHVybiBqbn19KSx5bD1jYS5tYXAoeyJpbiI6eCxvdXQ6a24sImluLW91dCI6QW4sIm91dC1pbiI6ZnVuY3Rpb24odCl7cmV0dXJuIEFuKGtuKHQpKX19KTtjYS5lYXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLSIpLHI9ZT49MD90LnNsaWNlKDAsZSk6dCxuPWU+PTA/dC5zbGljZShlKzEpOiJpbiI7cmV0dXJuIHI9dmwuZ2V0KHIpfHxnbCxuPXlsLmdldChuKXx8eCxNbihuKHIuYXBwbHkobnVsbCxoYS5jYWxsKGFyZ3VtZW50cywxKSkpKX0sY2EuaW50ZXJwb2xhdGVIY2w9RG4sY2EuaW50ZXJwb2xhdGVIc2w9T24sY2EuaW50ZXJwb2xhdGVMYWI9Rm4sY2EuaW50ZXJwb2xhdGVSb3VuZD1ObixjYS50cmFuc2Zvcm09ZnVuY3Rpb24odCl7dmFyIGU9cGEuY3JlYXRlRWxlbWVudE5TKGNhLm5zLnByZWZpeC5zdmcsImciKTtyZXR1cm4oY2EudHJhbnNmb3JtPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpe2Uuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpO3ZhciByPWUudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKX1yZXR1cm4gbmV3IEJuKHI/ci5tYXRyaXg6YmwpfSkodCl9LEJuLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLnRyYW5zbGF0ZSsiKXJvdGF0ZSgiK3RoaXMucm90YXRlKyIpc2tld1goIit0aGlzLnNrZXcrIilzY2FsZSgiK3RoaXMuc2NhbGUrIikifTt2YXIgYmw9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfTtjYS5pbnRlcnBvbGF0ZVRyYW5zZm9ybT1abixjYS5sYXlvdXQ9e30sY2EubGF5b3V0LmJ1bmRsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnB1c2goSm4odFtyXSkpO3JldHVybiBlfX0sY2EubGF5b3V0LmNob3JkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0LHUsaCxmLHAsZD17fSxtPVtdLGc9Y2EucmFuZ2Uobyksdj1bXTtmb3Iocj1bXSxuPVtdLHQ9MCxmPS0xOysrZjxvOyl7Zm9yKHU9MCxwPS0xOysrcDxvOyl1Kz1pW2ZdW3BdO20ucHVzaCh1KSx2LnB1c2goY2EucmFuZ2UobykpLHQrPXV9Zm9yKGEmJmcuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBhKG1bdF0sbVtlXSl9KSxzJiZ2LmZvckVhY2goZnVuY3Rpb24odCxlKXt0LnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gcyhpW2VdW3RdLGlbZV1bcl0pfSl9KSx0PShWYS1jKm8pL3QsdT0wLGY9LTE7KytmPG87KXtmb3IoaD11LHA9LTE7KytwPG87KXt2YXIgeT1nW2ZdLGI9dlt5XVtwXSx4PWlbeV1bYl0sXz11LHc9dSs9eCp0O2RbeSsiLSIrYl09e2luZGV4Onksc3ViaW5kZXg6YixzdGFydEFuZ2xlOl8sZW5kQW5nbGU6dyx2YWx1ZTp4fX1uW3ldPXtpbmRleDp5LHN0YXJ0QW5nbGU6aCxlbmRBbmdsZTp1LHZhbHVlOm1beV19LHUrPWN9Zm9yKGY9LTE7KytmPG87KWZvcihwPWYtMTsrK3A8bzspe3ZhciBNPWRbZisiLSIrcF0saz1kW3ArIi0iK2ZdOyhNLnZhbHVlfHxrLnZhbHVlKSYmci5wdXNoKE0udmFsdWU8ay52YWx1ZT97c291cmNlOmssdGFyZ2V0Ok19Ontzb3VyY2U6TSx0YXJnZXQ6a30pfWwmJmUoKX1mdW5jdGlvbiBlKCl7ci5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGwoKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlKS8yLChlLnNvdXJjZS52YWx1ZStlLnRhcmdldC52YWx1ZSkvMil9KX12YXIgcixuLGksbyxhLHMsbCx1PXt9LGM9MDtyZXR1cm4gdS5tYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89KGk9dCkmJmkubGVuZ3RoLHI9bj1udWxsLHUpOml9LHUucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHI9bj1udWxsLHUpOmN9LHUuc29ydEdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LHI9bj1udWxsLHUpOmF9LHUuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LHI9bnVsbCx1KTpzfSx1LnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxyJiZlKCksdSk6bH0sdS5jaG9yZHM9ZnVuY3Rpb24oKXtyZXR1cm4gcnx8dCgpLHJ9LHUuZ3JvdXBzPWZ1bmN0aW9uKCl7cmV0dXJuIG58fHQoKSxufSx1fSxjYS5sYXlvdXQuZm9yY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiBmdW5jdGlvbihlLHIsbixpKXtpZihlLnBvaW50IT09dCl7dmFyIG89ZS5jeC10LngsYT1lLmN5LXQueSxzPWktcixsPW8qbythKmE7aWYobD5zKnMvdil7aWYobT5sKXt2YXIgdT1lLmNoYXJnZS9sO3QucHgtPW8qdSx0LnB5LT1hKnV9cmV0dXJuITB9aWYoZS5wb2ludCYmbCYmbT5sKXt2YXIgdT1lLnBvaW50Q2hhcmdlL2w7dC5weC09byp1LHQucHktPWEqdX19cmV0dXJuIWUuY2hhcmdlfX1mdW5jdGlvbiBlKHQpe3QucHg9Y2EuZXZlbnQueCx0LnB5PWNhLmV2ZW50LnksbC5yZXN1bWUoKX12YXIgcixuLGksbyxhLHMsbD17fSx1PWNhLmRpc3BhdGNoKCJzdGFydCIsInRpY2siLCJlbmQiKSxjPVsxLDFdLGg9LjksZj14bCxwPV9sLGQ9LTMwLG09d2wsZz0uMSx2PS42NCx5PVtdLGI9W107cmV0dXJuIGwudGljaz1mdW5jdGlvbigpe2lmKChpKj0uOTkpPC4wMDUpcmV0dXJuIHI9bnVsbCx1LmVuZCh7dHlwZToiZW5kIixhbHBoYTppPTB9KSwhMDt2YXIgZSxuLGwsZixwLG0sdix4LF8sdz15Lmxlbmd0aCxNPWIubGVuZ3RoO2ZvcihuPTA7TT5uOysrbilsPWJbbl0sZj1sLnNvdXJjZSxwPWwudGFyZ2V0LHg9cC54LWYueCxfPXAueS1mLnksKG09eCp4K18qXykmJihtPWkqYVtuXSooKG09TWF0aC5zcXJ0KG0pKS1vW25dKS9tLHgqPW0sXyo9bSxwLngtPXgqKHY9Zi53ZWlnaHQrcC53ZWlnaHQ/Zi53ZWlnaHQvKGYud2VpZ2h0K3Aud2VpZ2h0KTouNSkscC55LT1fKnYsZi54Kz14Kih2PTEtdiksZi55Kz1fKnYpO2lmKCh2PWkqZykmJih4PWNbMF0vMixfPWNbMV0vMixuPS0xLHYpKWZvcig7KytuPHc7KWw9eVtuXSxsLngrPSh4LWwueCkqdixsLnkrPShfLWwueSkqdjtpZihkKWZvcihvaShlPWNhLmdlb20ucXVhZHRyZWUoeSksaSxzKSxuPS0xOysrbjx3OykobD15W25dKS5maXhlZHx8ZS52aXNpdCh0KGwpKTtmb3Iobj0tMTsrK248dzspbD15W25dLGwuZml4ZWQ/KGwueD1sLnB4LGwueT1sLnB5KToobC54LT0obC5weC0obC5weD1sLngpKSpoLGwueS09KGwucHktKGwucHk9bC55KSkqaCk7dS50aWNrKHt0eXBlOiJ0aWNrIixhbHBoYTppfSl9LGwubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9dCxsKTp5fSxsLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXQsbCk6Yn0sbC5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbCk6Y30sbC5saW5rRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxsKTpmfSxsLmRpc3RhbmNlPWwubGlua0Rpc3RhbmNlLGwubGlua1N0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6K3QsbCk6cH0sbC5mcmljdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxsKTpofSxsLmNoYXJnZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LGwpOmR9LGwuY2hhcmdlRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dCp0LGwpOk1hdGguc3FydChtKX0sbC5ncmF2aXR5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt0LGwpOmd9LGwudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9dCp0LGwpOk1hdGguc3FydCh2KX0sbC5hbHBoYT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rdCxpP3Q+MD9pPXQ6KHIuYz1udWxsLHIudD1OYU4scj1udWxsLHUuZW5kKHt0eXBlOiJlbmQiLGFscGhhOmk9MH0pKTp0PjAmJih1LnN0YXJ0KHt0eXBlOiJzdGFydCIsYWxwaGE6aT10fSkscj1DdChsLnRpY2spKSxsKTppfSxsLnN0YXJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4pe2lmKCFyKXtmb3Iocj1uZXcgQXJyYXkoaSksbD0wO2k+bDsrK2wpcltsXT1bXTtmb3IobD0wO3U+bDsrK2wpe3ZhciBvPWJbbF07cltvLnNvdXJjZS5pbmRleF0ucHVzaChvLnRhcmdldCkscltvLnRhcmdldC5pbmRleF0ucHVzaChvLnNvdXJjZSl9fWZvcih2YXIgYSxzPXJbZV0sbD0tMSxjPXMubGVuZ3RoOysrbDxjOylpZighaXNOYU4oYT1zW2xdW3RdKSlyZXR1cm4gYTtyZXR1cm4gTWF0aC5yYW5kb20oKSpufXZhciBlLHIsbixpPXkubGVuZ3RoLHU9Yi5sZW5ndGgsaD1jWzBdLG09Y1sxXTtmb3IoZT0wO2k+ZTsrK2UpKG49eVtlXSkuaW5kZXg9ZSxuLndlaWdodD0wO2ZvcihlPTA7dT5lOysrZSluPWJbZV0sIm51bWJlciI9PXR5cGVvZiBuLnNvdXJjZSYmKG4uc291cmNlPXlbbi5zb3VyY2VdKSwibnVtYmVyIj09dHlwZW9mIG4udGFyZ2V0JiYobi50YXJnZXQ9eVtuLnRhcmdldF0pLCsrbi5zb3VyY2Uud2VpZ2h0LCsrbi50YXJnZXQud2VpZ2h0O2ZvcihlPTA7aT5lOysrZSluPXlbZV0saXNOYU4obi54KSYmKG4ueD10KCJ4IixoKSksaXNOYU4obi55KSYmKG4ueT10KCJ5IixtKSksaXNOYU4obi5weCkmJihuLnB4PW4ueCksaXNOYU4obi5weSkmJihuLnB5PW4ueSk7aWYobz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZilmb3IoZT0wO3U+ZTsrK2Upb1tlXT0rZi5jYWxsKHRoaXMsYltlXSxlKTtlbHNlIGZvcihlPTA7dT5lOysrZSlvW2VdPWY7aWYoYT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgcClmb3IoZT0wO3U+ZTsrK2UpYVtlXT0rcC5jYWxsKHRoaXMsYltlXSxlKTtlbHNlIGZvcihlPTA7dT5lOysrZSlhW2VdPXA7aWYocz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZClmb3IoZT0wO2k+ZTsrK2Upc1tlXT0rZC5jYWxsKHRoaXMseVtlXSxlKTtlbHNlIGZvcihlPTA7aT5lOysrZSlzW2VdPWQ7cmV0dXJuIGwucmVzdW1lKCl9LGwucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGwuYWxwaGEoLjEpfSxsLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gbC5hbHBoYSgwKX0sbC5kcmFnPWZ1bmN0aW9uKCl7cmV0dXJuIG58fChuPWNhLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oeCkub24oImRyYWdzdGFydC5mb3JjZSIsZWkpLm9uKCJkcmFnLmZvcmNlIixlKS5vbigiZHJhZ2VuZC5mb3JjZSIscmkpKSxhcmd1bWVudHMubGVuZ3RoP3ZvaWQgdGhpcy5vbigibW91c2VvdmVyLmZvcmNlIixuaSkub24oIm1vdXNlb3V0LmZvcmNlIixpaSkuY2FsbChuKTpufSxjYS5yZWJpbmQobCx1LCJvbiIpfTt2YXIgeGw9MjAsX2w9MSx3bD0xLzA7Y2EubGF5b3V0LmhpZXJhcmNoeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoaSl7dmFyIG8sYT1baV0scz1bXTtmb3IoaS5kZXB0aD0wO251bGwhPShvPWEucG9wKCkpOylpZihzLnB1c2gobyksKHU9ci5jYWxsKHQsbyxvLmRlcHRoKSkmJihsPXUubGVuZ3RoKSl7Zm9yKHZhciBsLHUsYzstLWw+PTA7KWEucHVzaChjPXVbbF0pLGMucGFyZW50PW8sYy5kZXB0aD1vLmRlcHRoKzE7biYmKG8udmFsdWU9MCksby5jaGlsZHJlbj11fWVsc2UgbiYmKG8udmFsdWU9K24uY2FsbCh0LG8sby5kZXB0aCl8fDApLGRlbGV0ZSBvLmNoaWxkcmVuO3JldHVybiBsaShpLGZ1bmN0aW9uKHQpe3ZhciByLGk7ZSYmKHI9dC5jaGlsZHJlbikmJnIuc29ydChlKSxuJiYoaT10LnBhcmVudCkmJihpLnZhbHVlKz10LnZhbHVlKX0pLHN9dmFyIGU9aGkscj11aSxuPWNpO3JldHVybiB0LnNvcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cix0KTplfSx0LmNoaWxkcmVuPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsdCk6cn0sdC52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLHQpOm59LHQucmV2YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gbiYmKHNpKGUsZnVuY3Rpb24odCl7dC5jaGlsZHJlbiYmKHQudmFsdWU9MCl9KSxsaShlLGZ1bmN0aW9uKGUpe3ZhciByO2UuY2hpbGRyZW58fChlLnZhbHVlPStuLmNhbGwodCxlLGUuZGVwdGgpfHwwKSwocj1lLnBhcmVudCkmJihyLnZhbHVlKz1lLnZhbHVlKX0pKSxlfSx0fSxjYS5sYXlvdXQucGFydGl0aW9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuO2lmKGUueD1yLGUueT1lLmRlcHRoKmksZS5keD1uLGUuZHk9aSxvJiYoYT1vLmxlbmd0aCkpe3ZhciBhLHMsbCx1PS0xO2ZvcihuPWUudmFsdWU/bi9lLnZhbHVlOjA7Kyt1PGE7KXQocz1vW3VdLHIsbD1zLnZhbHVlKm4saSkscis9bH19ZnVuY3Rpb24gZSh0KXt2YXIgcj10LmNoaWxkcmVuLG49MDtpZihyJiYoaT1yLmxlbmd0aCkpZm9yKHZhciBpLG89LTE7KytvPGk7KW49TWF0aC5tYXgobixlKHJbb10pKTtyZXR1cm4gMStufWZ1bmN0aW9uIHIocixvKXt2YXIgYT1uLmNhbGwodGhpcyxyLG8pO3JldHVybiB0KGFbMF0sMCxpWzBdLGlbMV0vZShhWzBdKSksYX12YXIgbj1jYS5sYXlvdXQuaGllcmFyY2h5KCksaT1bMSwxXTtyZXR1cm4gci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscik6aX0sYWkocixuKX0sY2EubGF5b3V0LnBpZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoYSl7dmFyIHMsbD1hLmxlbmd0aCx1PWEubWFwKGZ1bmN0aW9uKHIsbil7cmV0dXJuK2UuY2FsbCh0LHIsbil9KSxjPSsoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksaD0oImZ1bmN0aW9uIj09dHlwZW9mIGk/aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6aSktYyxmPU1hdGgubWluKE1hdGguYWJzKGgpL2wsKygiZnVuY3Rpb24iPT10eXBlb2Ygbz9vLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpvKSkscD1mKigwPmg/LTE6MSksZD1jYS5zdW0odSksbT1kPyhoLWwqcCkvZDowLGc9Y2EucmFuZ2UobCksdj1bXTtyZXR1cm4gbnVsbCE9ciYmZy5zb3J0KHI9PT1NbD9mdW5jdGlvbih0LGUpe3JldHVybiB1W2VdLXVbdF19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIoYVt0XSxhW2VdKX0pLGcuZm9yRWFjaChmdW5jdGlvbih0KXt2W3RdPXtkYXRhOmFbdF0sdmFsdWU6cz11W3RdLHN0YXJ0QW5nbGU6YyxlbmRBbmdsZTpjKz1zKm0rcCxwYWRBbmdsZTpmfX0pLHZ9dmFyIGU9TnVtYmVyLHI9TWwsbj0wLGk9VmEsbz0wO3JldHVybiB0LnZhbHVlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXIsdCk6ZX0sdC5zb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsdCk6cn0sdC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC5lbmRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1lLHQpOml9LHQucGFkQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZSx0KTpvfSx0fTt2YXIgTWw9e307Y2EubGF5b3V0LnN0YWNrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChzLGwpe2lmKCEoZj1zLmxlbmd0aCkpcmV0dXJuIHM7dmFyIHU9cy5tYXAoZnVuY3Rpb24ocixuKXtyZXR1cm4gZS5jYWxsKHQscixuKX0pLGM9dS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUscil7cmV0dXJuW28uY2FsbCh0LGUsciksYS5jYWxsKHQsZSxyKV19KX0pLGg9ci5jYWxsKHQsYyxsKTt1PWNhLnBlcm11dGUodSxoKSxjPWNhLnBlcm11dGUoYyxoKTt2YXIgZixwLGQsbSxnPW4uY2FsbCh0LGMsbCksdj11WzBdLmxlbmd0aDtmb3IoZD0wO3Y+ZDsrK2QpZm9yKGkuY2FsbCh0LHVbMF1bZF0sbT1nW2RdLGNbMF1bZF1bMV0pLHA9MTtmPnA7KytwKWkuY2FsbCh0LHVbcF1bZF0sbSs9Y1twLTFdW2RdWzFdLGNbcF1bZF1bMV0pO3JldHVybiBzfXZhciBlPXgscj1naSxuPXZpLGk9bWksbz1waSxhPWRpO3JldHVybiB0LnZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yLHQpOmV9LHQub3JkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTprbC5nZXQoZSl8fGdpLHQpOnJ9LHQub2Zmc2V0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6QWwuZ2V0KGUpfHx2aSx0KTpufSx0Lng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZSx0KTpvfSx0Lnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZSx0KTphfSx0Lm91dD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1lLHQpOml9LHR9O3ZhciBrbD1jYS5tYXAoeyJpbnNpZGUtb3V0IjpmdW5jdGlvbih0KXt2YXIgZSxyLG49dC5sZW5ndGgsaT10Lm1hcCh5aSksbz10Lm1hcChiaSksYT1jYS5yYW5nZShuKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbdF0taVtlXX0pLHM9MCxsPTAsdT1bXSxjPVtdO2ZvcihlPTA7bj5lOysrZSlyPWFbZV0sbD5zPyhzKz1vW3JdLHUucHVzaChyKSk6KGwrPW9bcl0sYy5wdXNoKHIpKTtyZXR1cm4gYy5yZXZlcnNlKCkuY29uY2F0KHUpfSxyZXZlcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBjYS5yYW5nZSh0Lmxlbmd0aCkucmV2ZXJzZSgpfSwiZGVmYXVsdCI6Z2l9KSxBbD1jYS5tYXAoe3NpbGhvdWV0dGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dC5sZW5ndGgsbz10WzBdLmxlbmd0aCxhPVtdLHM9MCxsPVtdO2ZvcihyPTA7bz5yOysrcil7Zm9yKGU9MCxuPTA7aT5lO2UrKyluKz10W2VdW3JdWzFdO24+cyYmKHM9biksYS5wdXNoKG4pfWZvcihyPTA7bz5yOysrcilsW3JdPShzLWFbcl0pLzI7cmV0dXJuIGx9LHdpZ2dsZTpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxvLGEscyxsLHUsYz10Lmxlbmd0aCxoPXRbMF0sZj1oLmxlbmd0aCxwPVtdO2ZvcihwWzBdPWw9dT0wLHI9MTtmPnI7KytyKXtmb3IoZT0wLGk9MDtjPmU7KytlKWkrPXRbZV1bcl1bMV07Zm9yKGU9MCxvPTAscz1oW3JdWzBdLWhbci0xXVswXTtjPmU7KytlKXtmb3Iobj0wLGE9KHRbZV1bcl1bMV0tdFtlXVtyLTFdWzFdKS8oMipzKTtlPm47KytuKWErPSh0W25dW3JdWzFdLXRbbl1bci0xXVsxXSkvcztvKz1hKnRbZV1bcl1bMV19cFtyXT1sLT1pP28vaSpzOjAsdT5sJiYodT1sKX1mb3Iocj0wO2Y+cjsrK3IpcFtyXS09dTtyZXR1cm4gcH0sZXhwYW5kOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLG89dFswXS5sZW5ndGgsYT0xL2kscz1bXTtmb3Iocj0wO28+cjsrK3Ipe2ZvcihlPTAsbj0wO2k+ZTtlKyspbis9dFtlXVtyXVsxXTtpZihuKWZvcihlPTA7aT5lO2UrKyl0W2VdW3JdWzFdLz1uO2Vsc2UgZm9yKGU9MDtpPmU7ZSsrKXRbZV1bcl1bMV09YX1mb3Iocj0wO28+cjsrK3Ipc1tyXT0wO3JldHVybiBzfSx6ZXJvOnZpfSk7Y2EubGF5b3V0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxvKXtmb3IodmFyIGEscyxsPVtdLHU9dC5tYXAocix0aGlzKSxjPW4uY2FsbCh0aGlzLHUsbyksaD1pLmNhbGwodGhpcyxjLHUsbyksbz0tMSxmPXUubGVuZ3RoLHA9aC5sZW5ndGgtMSxkPWU/MToxL2Y7KytvPHA7KWE9bFtvXT1bXSxhLmR4PWhbbysxXS0oYS54PWhbb10pLGEueT0wO2lmKHA+MClmb3Iobz0tMTsrK288Zjspcz11W29dLHM+PWNbMF0mJnM8PWNbMV0mJihhPWxbY2EuYmlzZWN0KGgscywxLHApLTFdLGEueSs9ZCxhLnB1c2godFtvXSkpO3JldHVybiBsfXZhciBlPSEwLHI9TnVtYmVyLG49TWksaT1faTtyZXR1cm4gdC52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLHQpOnJ9LHQucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49U3QoZSksdCk6bn0sdC5iaW5zPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJudW1iZXIiPT10eXBlb2YgZT9mdW5jdGlvbih0KXtyZXR1cm4gd2kodCxlKX06U3QoZSksdCk6aX0sdC5mcmVxdWVuY3k9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISFyLHQpOmV9LHR9LGNhLmxheW91dC5wYWNrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG8pe3ZhciBhPXIuY2FsbCh0aGlzLHQsbykscz1hWzBdLGw9aVswXSx1PWlbMV0sYz1udWxsPT1lP01hdGguc3FydDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9O2lmKHMueD1zLnk9MCxsaShzLGZ1bmN0aW9uKHQpe3Qucj0rYyh0LnZhbHVlKX0pLGxpKHMsU2kpLG4pe3ZhciBoPW4qKGU/MTpNYXRoLm1heCgyKnMuci9sLDIqcy5yL3UpKS8yO2xpKHMsZnVuY3Rpb24odCl7dC5yKz1ofSksbGkocyxTaSksbGkocyxmdW5jdGlvbih0KXt0LnItPWh9KX1yZXR1cm4gSWkocyxsLzIsdS8yLGU/MToxL01hdGgubWF4KDIqcy5yL2wsMipzLnIvdSkpLGF9dmFyIGUscj1jYS5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChraSksbj0wLGk9WzEsMV07cmV0dXJuIHQuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1lLHQpOml9LHQucmFkaXVzPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXJ8fCJmdW5jdGlvbiI9PXR5cGVvZiByP3I6K3IsdCk6ZX0sdC5wYWRkaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStlLHQpOm59LGFpKHQscil9LGNhLmxheW91dC50cmVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGkpe3ZhciBjPWEuY2FsbCh0aGlzLHQsaSksaD1jWzBdLGY9ZShoKTtpZihsaShmLHIpLGYucGFyZW50Lm09LWYueixzaShmLG4pLHUpc2koaCxvKTtlbHNle3ZhciBwPWgsZD1oLG09aDtzaShoLGZ1bmN0aW9uKHQpe3QueDxwLngmJihwPXQpLHQueD5kLngmJihkPXQpLHQuZGVwdGg+bS5kZXB0aCYmKG09dCl9KTt2YXIgZz1zKHAsZCkvMi1wLngsdj1sWzBdLyhkLngrcyhkLHApLzIrZykseT1sWzFdLyhtLmRlcHRofHwxKTtzaShoLGZ1bmN0aW9uKHQpe3QueD0odC54K2cpKnYsdC55PXQuZGVwdGgqeX0pfXJldHVybiBjfWZ1bmN0aW9uIGUodCl7Zm9yKHZhciBlLHI9e0E6bnVsbCxjaGlsZHJlbjpbdF19LG49W3JdO251bGwhPShlPW4ucG9wKCkpOylmb3IodmFyIGksbz1lLmNoaWxkcmVuLGE9MCxzPW8ubGVuZ3RoO3M+YTsrK2Epbi5wdXNoKChvW2FdPWk9e186b1thXSxwYXJlbnQ6ZSxjaGlsZHJlbjooaT1vW2FdLmNoaWxkcmVuKSYmaS5zbGljZSgpfHxbXSxBOm51bGwsYTpudWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTphfSkuYT1pKTtyZXR1cm4gci5jaGlsZHJlblswXX1mdW5jdGlvbiByKHQpe3ZhciBlPXQuY2hpbGRyZW4scj10LnBhcmVudC5jaGlsZHJlbixuPXQuaT9yW3QuaS0xXTpudWxsO2lmKGUubGVuZ3RoKXtPaSh0KTt2YXIgbz0oZVswXS56K2VbZS5sZW5ndGgtMV0ueikvMjtuPyh0Lno9bi56K3ModC5fLG4uXyksdC5tPXQuei1vKTp0Lno9b31lbHNlIG4mJih0Lno9bi56K3ModC5fLG4uXykpO3QucGFyZW50LkE9aSh0LG4sdC5wYXJlbnQuQXx8clswXSl9ZnVuY3Rpb24gbih0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gaSh0LGUscil7aWYoZSl7Zm9yKHZhciBuLGk9dCxvPXQsYT1lLGw9aS5wYXJlbnQuY2hpbGRyZW5bMF0sdT1pLm0sYz1vLm0saD1hLm0sZj1sLm07YT1qaShhKSxpPVJpKGkpLGEmJmk7KWw9UmkobCksbz1qaShvKSxvLmE9dCxuPWEueitoLWkuei11K3MoYS5fLGkuXyksbj4wJiYoRGkoRmkoYSx0LHIpLHQsbiksdSs9bixjKz1uKSxoKz1hLm0sdSs9aS5tLGYrPWwubSxjKz1vLm07YSYmIWppKG8pJiYoby50PWEsby5tKz1oLWMpLGkmJiFSaShsKSYmKGwudD1pLGwubSs9dS1mLHI9dCl9cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0KXt0LngqPWxbMF0sdC55PXQuZGVwdGgqbFsxXX12YXIgYT1jYS5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxzPUNpLGw9WzEsMV0sdT1udWxsO3JldHVybiB0LnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZSx0KTpzfSx0LnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bnVsbD09KGw9ZSk/bzpudWxsLHQpOnU/bnVsbDpsfSx0Lm5vZGVTaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGw9PShsPWUpP251bGw6byx0KTp1P2w6bnVsbH0sYWkodCxhKX0sY2EubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsbyl7dmFyIGEscz1lLmNhbGwodGhpcyx0LG8pLGw9c1swXSx1PTA7bGkobCxmdW5jdGlvbih0KXt2YXIgZT10LmNoaWxkcmVuO2UmJmUubGVuZ3RoPyh0Lng9QmkoZSksdC55PU5pKGUpKToodC54PWE/dSs9cih0LGEpOjAsdC55PTAsYT10KX0pO3ZhciBjPVVpKGwpLGg9VmkobCksZj1jLngtcihjLGgpLzIscD1oLngrcihoLGMpLzI7cmV0dXJuIGxpKGwsaT9mdW5jdGlvbih0KXt0Lng9KHQueC1sLngpKm5bMF0sdC55PShsLnktdC55KSpuWzFdfTpmdW5jdGlvbih0KXt0Lng9KHQueC1mKS8ocC1mKSpuWzBdLHQueT0oMS0obC55P3QueS9sLnk6MSkpKm5bMV19KSxzfXZhciBlPWNhLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHI9Q2ksbj1bMSwxXSxpPSExO3JldHVybiB0LnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSx0KTpyfSx0LnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KG49ZSksdCk6aT9udWxsOm59LHQubm9kZVNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbCE9KG49ZSksdCk6aT9uOm51bGx9LGFpKHQsZSl9LGNhLmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcixuLGk9LTEsbz10Lmxlbmd0aDsrK2k8bzspbj0ocj10W2ldKS52YWx1ZSooMD5lPzA6ZSksci5hcmVhPWlzTmFOKG4pfHwwPj1uPzA6bn1mdW5jdGlvbiBlKHIpe3ZhciBvPXIuY2hpbGRyZW47aWYobyYmby5sZW5ndGgpe3ZhciBhLHMsbCx1PWgociksYz1bXSxmPW8uc2xpY2UoKSxkPTEvMCxtPSJzbGljZSI9PT1wP3UuZHg6ImRpY2UiPT09cD91LmR5OiJzbGljZS1kaWNlIj09PXA/MSZyLmRlcHRoP3UuZHk6dS5keDpNYXRoLm1pbih1LmR4LHUuZHkpO2Zvcih0KGYsdS5keCp1LmR5L3IudmFsdWUpLGMuYXJlYT0wOyhsPWYubGVuZ3RoKT4wOyljLnB1c2goYT1mW2wtMV0pLGMuYXJlYSs9YS5hcmVhLCJzcXVhcmlmeSIhPT1wfHwocz1uKGMsbSkpPD1kPyhmLnBvcCgpLGQ9cyk6KGMuYXJlYS09Yy5wb3AoKS5hcmVhLGkoYyxtLHUsITEpLG09TWF0aC5taW4odS5keCx1LmR5KSxjLmxlbmd0aD1jLmFyZWE9MCxkPTEvMCk7Yy5sZW5ndGgmJihpKGMsbSx1LCEwKSxjLmxlbmd0aD1jLmFyZWE9MCksby5mb3JFYWNoKGUpfX1mdW5jdGlvbiByKGUpe3ZhciBuPWUuY2hpbGRyZW47aWYobiYmbi5sZW5ndGgpe3ZhciBvLGE9aChlKSxzPW4uc2xpY2UoKSxsPVtdO2Zvcih0KHMsYS5keCphLmR5L2UudmFsdWUpLGwuYXJlYT0wO289cy5wb3AoKTspbC5wdXNoKG8pLGwuYXJlYSs9by5hcmVhLG51bGwhPW8ueiYmKGkobCxvLno/YS5keDphLmR5LGEsIXMubGVuZ3RoKSxsLmxlbmd0aD1sLmFyZWE9MCk7bi5mb3JFYWNoKHIpfX1mdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByLG49dC5hcmVhLGk9MCxvPTEvMCxhPS0xLHM9dC5sZW5ndGg7KythPHM7KShyPXRbYV0uYXJlYSkmJihvPnImJihvPXIpLHI+aSYmKGk9cikpO3JldHVybiBuKj1uLGUqPWUsbj9NYXRoLm1heChlKmkqZC9uLG4vKGUqbypkKSk6MS8wfWZ1bmN0aW9uIGkodCxlLHIsbil7dmFyIGksbz0tMSxhPXQubGVuZ3RoLHM9ci54LHU9ci55LGM9ZT9sKHQuYXJlYS9lKTowO2lmKGU9PXIuZHgpe2Zvcigobnx8Yz5yLmR5KSYmKGM9ci5keSk7KytvPGE7KWk9dFtvXSxpLng9cyxpLnk9dSxpLmR5PWMscys9aS5keD1NYXRoLm1pbihyLngrci5keC1zLGM/bChpLmFyZWEvYyk6MCk7aS56PSEwLGkuZHgrPXIueCtyLmR4LXMsci55Kz1jLHIuZHktPWN9ZWxzZXtmb3IoKG58fGM+ci5keCkmJihjPXIuZHgpOysrbzxhOylpPXRbb10saS54PXMsaS55PXUsaS5keD1jLHUrPWkuZHk9TWF0aC5taW4oci55K3IuZHktdSxjP2woaS5hcmVhL2MpOjApO2kuej0hMSxpLmR5Kz1yLnkrci5keS11LHIueCs9YyxyLmR4LT1jfX1mdW5jdGlvbiBvKG4pe3ZhciBpPWF8fHMobiksbz1pWzBdO3JldHVybiBvLng9by55PTAsby52YWx1ZT8oby5keD11WzBdLG8uZHk9dVsxXSk6by5keD1vLmR5PTAsYSYmcy5yZXZhbHVlKG8pLHQoW29dLG8uZHgqby5keS9vLnZhbHVlKSwoYT9yOmUpKG8pLGYmJihhPWkpLGl9dmFyIGEscz1jYS5sYXlvdXQuaGllcmFyY2h5KCksbD1NYXRoLnJvdW5kLHU9WzEsMV0sYz1udWxsLGg9cWksZj0hMSxwPSJzcXVhcmlmeSIsZD0uNSooMStNYXRoLnNxcnQoNSkpO3JldHVybiBvLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxvKTp1fSxvLnBhZGRpbmc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgcj10LmNhbGwobyxlLGUuZGVwdGgpO3JldHVybiBudWxsPT1yP3FpKGUpOkdpKGUsIm51bWJlciI9PXR5cGVvZiByP1tyLHIscixyXTpyKX1mdW5jdGlvbiByKGUpe3JldHVybiBHaShlLHQpfWlmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBjO3ZhciBuO3JldHVybiBoPW51bGw9PShjPXQpP3FpOiJmdW5jdGlvbiI9PShuPXR5cGVvZiB0KT9lOiJudW1iZXIiPT09bj8odD1bdCx0LHQsdF0scik6cixvfSxvLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQ/TWF0aC5yb3VuZDpOdW1iZXIsbyk6bCE9TnVtYmVyfSxvLnN0aWNreT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10LGE9bnVsbCxvKTpmfSxvLnJhdGlvPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXQsbyk6ZH0sby5tb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXQrIiIsbyk6cH0sYWkobyxzKX0sY2EucmFuZG9tPXtub3JtYWw6ZnVuY3Rpb24odCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO3JldHVybiAyPnImJihlPTEpLDE+ciYmKHQ9MCksZnVuY3Rpb24oKXt2YXIgcixuLGk7ZG8gcj0yKk1hdGgucmFuZG9tKCktMSxuPTIqTWF0aC5yYW5kb20oKS0xLGk9cipyK24qbjt3aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtlKnIqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX0sbG9nTm9ybWFsOmZ1bmN0aW9uKCl7dmFyIHQ9Y2EucmFuZG9tLm5vcm1hbC5hcHBseShjYSxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cCh0KCkpfX0sYmF0ZXM6ZnVuY3Rpb24odCl7dmFyIGU9Y2EucmFuZG9tLmlyd2luSGFsbCh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSgpL3R9fSxpcndpbkhhbGw6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAscj0wO3Q+cjtyKyspZSs9TWF0aC5yYW5kb20oKTtyZXR1cm4gZX19fSxjYS5zY2FsZT17fTt2YXIgVGw9e2Zsb29yOngsY2VpbDp4fTtjYS5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1cm4gS2koWzAsMV0sWzAsMV0sX24sITEpfTt2YXIgRWw9e3M6MSxnOjEscDoxLHI6MSxlOjF9O2NhLnNjYWxlLmxvZz1mdW5jdGlvbigpe3JldHVybiBvbyhjYS5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBTbD1jYS5mb3JtYXQoIi4wZSIpLExsPXtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4tTWF0aC5jZWlsKC10KX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4tTWF0aC5mbG9vcigtdCl9fTtjYS5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gYW8oY2Euc2NhbGUubGluZWFyKCksMSxbMCwxXSl9LGNhLnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gY2Euc2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSxjYS5zY2FsZS5vcmRpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIGxvKFtdLHt0OiJyYW5nZSIsYTpbW11dfSl9LGNhLnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gY2Euc2NhbGUub3JkaW5hbCgpLnJhbmdlKHpsKX0sY2Euc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigpe3JldHVybiBjYS5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoSWwpfSxjYS5zY2FsZS5jYXRlZ29yeTIwYj1mdW5jdGlvbigpe3JldHVybiBjYS5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoUGwpfSxjYS5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVybiBjYS5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoQ2wpfTt2YXIgemw9WzIwNjIyNjAsMTY3NDQyMDYsMjkyNDU4OCwxNDAzNDcyOCw5NzI1ODg1LDkxOTcxMzEsMTQ5MDczMzAsODM1NTcxMSwxMjM2OTE4NiwxNTU2MTc1XS5tYXAoX3QpLElsPVsyMDYyMjYwLDExNDU0NDQwLDE2NzQ0MjA2LDE2NzU5NjcyLDI5MjQ1ODgsMTAwMTg2OTgsMTQwMzQ3MjgsMTY3NTA3NDIsOTcyNTg4NSwxMjk1NTg2MSw5MTk3MTMxLDEyODg1MTQwLDE0OTA3MzMwLDE2MjM0MTk0LDgzNTU3MTEsMTMwOTI4MDcsMTIzNjkxODYsMTQ0MDg1ODksMTU1NjE3NSwxMDQxMDcyNV0ubWFwKF90KSxQbD1bMzc1MDc3Nyw1Mzk1NjE5LDcwNDA3MTksMTAyNjQyODYsNjUxOTA5Nyw5MjE2NTk0LDExOTE1MTE1LDEzNTU2NjM2LDkyMDI5OTMsMTI0MjY4MDksMTUxODY1MTQsMTUxOTA5MzIsODY2NjE2OSwxMTM1NjQ5MCwxNDA0OTY0MywxNTE3NzM3Miw4MDc3NjgzLDEwODM0MzI0LDEzNTI4NTA5LDE0NTg5NjU0XS5tYXAoX3QpLENsPVszMjQ0NzMzLDcwNTcxMTAsMTA0MDY2MjUsMTMwMzI0MzEsMTUwOTUwNTMsMTY2MTY3NjQsMTY2MjUyNTksMTY2MzQwMTgsMzI1MzA3Niw3NjUyNDcwLDEwNjA3MDAzLDEzMTAxNTA0LDc2OTUyODEsMTAzOTQzMTIsMTIzNjkzNzIsMTQzNDI4OTEsNjUxMzUwNyw5ODY4OTUwLDEyNDM0ODc3LDE0Mjc3MDgxXS5tYXAoX3QpO2NhLnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHVvKFtdLFtdKX0sY2Euc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXtyZXR1cm4gY28oMCwxLFswLDFdKX0sY2Euc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9uKCl7cmV0dXJuIGhvKFsuNV0sWzAsMV0pfSxjYS5zY2FsZS5pZGVudGl0eT1mdW5jdGlvbigpe3JldHVybiBmbyhbMCwxXSl9LGNhLnN2Zz17fSxjYS5zdmcuYXJjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PU1hdGgubWF4KDAsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx1PU1hdGgubWF4KDAsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxjPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLUdhLGg9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyktR2EsZj1NYXRoLmFicyhoLWMpLHA9Yz5oPzA6MTtpZih0PnUmJihkPXUsdT10LHQ9ZCksZj49cWEpcmV0dXJuIGUodSxwKSsodD9lKHQsMS1wKToiIikrIloiO3ZhciBkLG0sZyx2LHksYix4LF8sdyxNLGssQSxUPTAsRT0wLFM9W107aWYoKHY9KCtsLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MCkvMikmJihnPW89PT1SbD9NYXRoLnNxcnQodCp0K3UqdSk6K28uYXBwbHkodGhpcyxhcmd1bWVudHMpLHB8fChFKj0tMSksdSYmKEU9bnQoZy91Kk1hdGguc2luKHYpKSksdCYmKFQ9bnQoZy90Kk1hdGguc2luKHYpKSkpLHUpe3k9dSpNYXRoLmNvcyhjK0UpLGI9dSpNYXRoLnNpbihjK0UpLHg9dSpNYXRoLmNvcyhoLUUpLF89dSpNYXRoLnNpbihoLUUpO3ZhciBMPU1hdGguYWJzKGgtYy0yKkUpPD1VYT8wOjE7aWYoRSYmeG8oeSxiLHgsXyk9PT1wXkwpe3ZhciB6PShjK2gpLzI7eT11Kk1hdGguY29zKHopLGI9dSpNYXRoLnNpbih6KSx4PV89bnVsbH19ZWxzZSB5PWI9MDtpZih0KXt3PXQqTWF0aC5jb3MoaC1UKSxNPXQqTWF0aC5zaW4oaC1UKSxrPXQqTWF0aC5jb3MoYytUKSxBPXQqTWF0aC5zaW4oYytUKTt2YXIgST1NYXRoLmFicyhjLWgrMipUKTw9VWE/MDoxO2lmKFQmJnhvKHcsTSxrLEEpPT09MS1wXkkpe3ZhciBQPShjK2gpLzI7dz10Kk1hdGguY29zKFApLE09dCpNYXRoLnNpbihQKSxrPUE9bnVsbH19ZWxzZSB3PU09MDtpZihmPk5hJiYoZD1NYXRoLm1pbihNYXRoLmFicyh1LXQpLzIsK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKSk+LjAwMSl7bT11PnRecD8wOjE7dmFyIEM9ZCxSPWQ7aWYoVWE+Zil7dmFyIGo9bnVsbD09az9bdyxNXTpudWxsPT14P1t5LGJdOmpyKFt5LGJdLFtrLEFdLFt4LF9dLFt3LE1dKSxEPXktalswXSxPPWItalsxXSxGPXgtalswXSxOPV8talsxXSxCPTEvTWF0aC5zaW4oTWF0aC5hY29zKChEKkYrTypOKS8oTWF0aC5zcXJ0KEQqRCtPKk8pKk1hdGguc3FydChGKkYrTipOKSkpLzIpLFU9TWF0aC5zcXJ0KGpbMF0qalswXStqWzFdKmpbMV0pO1I9TWF0aC5taW4oZCwodC1VKS8oQi0xKSksQz1NYXRoLm1pbihkLCh1LVUpLyhCKzEpKX1pZihudWxsIT14KXt2YXIgVj1fbyhudWxsPT1rP1t3LE1dOltrLEFdLFt5LGJdLHUsQyxwKSxxPV9vKFt4LF9dLFt3LE1dLHUsQyxwKTtkPT09Qz9TLnB1c2goIk0iLFZbMF0sIkEiLEMsIiwiLEMsIiAwIDAsIixtLCIgIixWWzFdLCJBIix1LCIsIix1LCIgMCAiLDEtcF54byhWWzFdWzBdLFZbMV1bMV0scVsxXVswXSxxWzFdWzFdKSwiLCIscCwiICIscVsxXSwiQSIsQywiLCIsQywiIDAgMCwiLG0sIiAiLHFbMF0pOlMucHVzaCgiTSIsVlswXSwiQSIsQywiLCIsQywiIDAgMSwiLG0sIiAiLHFbMF0pfWVsc2UgUy5wdXNoKCJNIix5LCIsIixiKTtpZihudWxsIT1rKXt2YXIgRz1fbyhbeSxiXSxbayxBXSx0LC1SLHApLEg9X28oW3csTV0sbnVsbD09eD9beSxiXTpbeCxfXSx0LC1SLHApO2Q9PT1SP1MucHVzaCgiTCIsSFswXSwiQSIsUiwiLCIsUiwiIDAgMCwiLG0sIiAiLEhbMV0sIkEiLHQsIiwiLHQsIiAwICIscF54byhIWzFdWzBdLEhbMV1bMV0sR1sxXVswXSxHWzFdWzFdKSwiLCIsMS1wLCIgIixHWzFdLCJBIixSLCIsIixSLCIgMCAwLCIsbSwiICIsR1swXSk6Uy5wdXNoKCJMIixIWzBdLCJBIixSLCIsIixSLCIgMCAwLCIsbSwiICIsR1swXSl9ZWxzZSBTLnB1c2goIkwiLHcsIiwiLE0pfWVsc2UgUy5wdXNoKCJNIix5LCIsIixiKSxudWxsIT14JiZTLnB1c2goIkEiLHUsIiwiLHUsIiAwICIsTCwiLCIscCwiICIseCwiLCIsXyksUy5wdXNoKCJMIix3LCIsIixNKSxudWxsIT1rJiZTLnB1c2goIkEiLHQsIiwiLHQsIiAwICIsSSwiLCIsMS1wLCIgIixrLCIsIixBKTtyZXR1cm4gUy5wdXNoKCJaIiksUy5qb2luKCIiKX1mdW5jdGlvbiBlKHQsZSl7cmV0dXJuIk0wLCIrdCsiQSIrdCsiLCIrdCsiIDAgMSwiK2UrIiAwLCIrLXQrIkEiK3QrIiwiK3QrIiAwIDEsIitlKyIgMCwiK3R9dmFyIHI9bW8sbj1nbyxpPXBvLG89UmwsYT12byxzPXlvLGw9Ym87cmV0dXJuIHQuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9U3QoZSksdCk6cn0sdC5vdXRlclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1TdChlKSx0KTpufSx0LmNvcm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1TdChlKSx0KTppfSx0LnBhZFJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1lPT1SbD9SbDpTdChlKSx0KTpvfSx0LnN0YXJ0QW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9U3QoZSksdCk6YX0sdC5lbmRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1TdChlKSx0KTpzfSx0LnBhZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPVN0KGUpLHQpOmx9LHQuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgdD0oK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsZT0oK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArcy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItR2E7cmV0dXJuW01hdGguY29zKGUpKnQsTWF0aC5zaW4oZSkqdF19LHR9O3ZhciBSbD0iYXV0byI7Y2Euc3ZnLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gd28oeCl9O3ZhciBqbD1jYS5tYXAoe2xpbmVhcjpNbywibGluZWFyLWNsb3NlZCI6a28sc3RlcDpBbywic3RlcC1iZWZvcmUiOlRvLCJzdGVwLWFmdGVyIjpFbyxiYXNpczpDbywiYmFzaXMtb3BlbiI6Um8sImJhc2lzLWNsb3NlZCI6am8sYnVuZGxlOkRvLGNhcmRpbmFsOnpvLCJjYXJkaW5hbC1vcGVuIjpTbywiY2FyZGluYWwtY2xvc2VkIjpMbyxtb25vdG9uZTpWb30pO2psLmZvckVhY2goZnVuY3Rpb24odCxlKXtlLmtleT10LGUuY2xvc2VkPS8tY2xvc2VkJC8udGVzdCh0KX0pO3ZhciBEbD1bMCwyLzMsMS8zLDBdLE9sPVswLDEvMywyLzMsMF0sRmw9WzAsMS82LDIvMywxLzZdO2NhLnN2Zy5saW5lLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PXdvKHFvKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0fSxUby5yZXZlcnNlPUVvLEVvLnJldmVyc2U9VG8sY2Euc3ZnLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gR28oeCl9LGNhLnN2Zy5hcmVhLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PUdvKHFvKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5pbm5lclJhZGl1cz10LngwLGRlbGV0ZSB0LngwLHQub3V0ZXJSYWRpdXM9dC54MSxkZWxldGUgdC54MSx0LmFuZ2xlPXQueSxkZWxldGUgdC55LHQuc3RhcnRBbmdsZT10LnkwLGRlbGV0ZSB0LnkwLHQuZW5kQW5nbGU9dC55MSxkZWxldGUgdC55MSx0fSxjYS5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQscyl7dmFyIGw9ZSh0aGlzLG8sdCxzKSx1PWUodGhpcyxhLHQscyk7cmV0dXJuIk0iK2wucDArbihsLnIsbC5wMSxsLmExLWwuYTApKyhyKGwsdSk/aShsLnIsbC5wMSxsLnIsbC5wMCk6aShsLnIsbC5wMSx1LnIsdS5wMCkrbih1LnIsdS5wMSx1LmExLXUuYTApK2kodS5yLHUucDEsbC5yLGwucDApKSsiWiJ9ZnVuY3Rpb24gZSh0LGUscixuKXt2YXIgaT1lLmNhbGwodCxyLG4pLG89cy5jYWxsKHQsaSxuKSxhPWwuY2FsbCh0LGksbiktR2EsYz11LmNhbGwodCxpLG4pLUdhO3JldHVybntyOm8sYTA6YSxhMTpjLHAwOltvKk1hdGguY29zKGEpLG8qTWF0aC5zaW4oYSldLHAxOltvKk1hdGguY29zKGMpLG8qTWF0aC5zaW4oYyldfX1mdW5jdGlvbiByKHQsZSl7cmV0dXJuIHQuYTA9PWUuYTAmJnQuYTE9PWUuYTF9ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIkEiK3QrIiwiK3QrIiAwICIrICsocj5VYSkrIiwxICIrZX1mdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVybiJRIDAsMCAiK259dmFyIG89eHIsYT1fcixzPUhvLGw9dm8sdT15bztyZXR1cm4gdC5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9U3QoZSksdCk6c30sdC5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89U3QoZSksdCk6b30sdC50YXJnZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9U3QoZSksdCk6YX0sdC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPVN0KGUpLHQpOmx9LHQuZW5kQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9U3QoZSksdCk6dX0sdH0sY2Euc3ZnLmRpYWdvbmFsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGkpe3ZhciBvPWUuY2FsbCh0aGlzLHQsaSksYT1yLmNhbGwodGhpcyx0LGkpLHM9KG8ueSthLnkpLzIsbD1bbyx7eDpvLngseTpzfSx7eDphLngseTpzfSxhXTtyZXR1cm4gbD1sLm1hcChuKSwiTSIrbFswXSsiQyIrbFsxXSsiICIrbFsyXSsiICIrbFszXX12YXIgZT14cixyPV9yLG49WG87cmV0dXJuIHQuc291cmNlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVN0KHIpLHQpOmV9LHQudGFyZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPVN0KGUpLHQpOnJ9LHQucHJvamVjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLHQpOm59LHR9LGNhLnN2Zy5kaWFnb25hbC5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1jYS5zdmcuZGlhZ29uYWwoKSxlPVhvLHI9dC5wcm9qZWN0aW9uO3JldHVybiB0LnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihZbyhlPXQpKTplfSx0fSxjYS5zdmcuc3ltYm9sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4pe3JldHVybihObC5nZXQoZS5jYWxsKHRoaXMsdCxuKSl8fFFvKShyLmNhbGwodGhpcyx0LG4pKX12YXIgZT1abyxyPVdvO3JldHVybiB0LnR5cGU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9U3QociksdCk6ZX0sdC5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPVN0KGUpLHQpOnJ9LHR9O3ZhciBObD1jYS5tYXAoe2NpcmNsZTpRbyxjcm9zczpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC81KS8yO3JldHVybiJNIistMyplKyIsIistZSsiSCIrLWUrIlYiKy0zKmUrIkgiK2UrIlYiKy1lKyJIIiszKmUrIlYiK2UrIkgiK2UrIlYiKzMqZSsiSCIrLWUrIlYiK2UrIkgiKy0zKmUrIloifSxkaWFtb25kOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0LygyKlVsKSkscj1lKlVsO3JldHVybiJNMCwiKy1lKyJMIityKyIsMCAwLCIrZSsiICIrLXIrIiwwWiJ9LHNxdWFyZTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodCkvMjtyZXR1cm4iTSIrLWUrIiwiKy1lKyJMIitlKyIsIistZSsiICIrZSsiLCIrZSsiICIrLWUrIiwiK2UrIloifSwidHJpYW5nbGUtZG93biI6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvQmwpLHI9ZSpCbC8yO3JldHVybiJNMCwiK3IrIkwiK2UrIiwiKy1yKyIgIistZSsiLCIrLXIrIloifSwidHJpYW5nbGUtdXAiOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L0JsKSxyPWUqQmwvMjtyZXR1cm4iTTAsIistcisiTCIrZSsiLCIrcisiICIrLWUrIiwiK3IrIloifX0pO2NhLnN2Zy5zeW1ib2xUeXBlcz1ObC5rZXlzKCk7dmFyIEJsPU1hdGguc3FydCgzKSxVbD1NYXRoLnRhbigzMCpIYSk7SWEudHJhbnNpdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuPVZsfHwrK1hsLGk9ZWEodCksbz1bXSxhPXFsfHx7dGltZTpEYXRlLm5vdygpLGVhc2U6U24sZGVsYXk6MCxkdXJhdGlvbjoyNTB9LHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe28ucHVzaChlPVtdKTtmb3IodmFyIHU9dGhpc1tzXSxjPS0xLGg9dS5sZW5ndGg7KytjPGg7KShyPXVbY10pJiZyYShyLGMsaSxuLGEpLGUucHVzaChyKX1yZXR1cm4gSm8obyxpLG4pfSxJYS5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChudWxsPT10P0dsOktvKGVhKHQpKSl9O3ZhciBWbCxxbCxHbD1LbyhlYSgpKSxIbD1bXSxYbD0wO0hsLmNhbGw9SWEuY2FsbCxIbC5lbXB0eT1JYS5lbXB0eSxIbC5ub2RlPUlhLm5vZGUsSGwuc2l6ZT1JYS5zaXplLGNhLnRyYW5zaXRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmdC50cmFuc2l0aW9uP1ZsP3QudHJhbnNpdGlvbihlKTp0OmNhLnNlbGVjdGlvbigpLnRyYW5zaXRpb24odCl9LGNhLnRyYW5zaXRpb24ucHJvdG90eXBlPUhsLEhsLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT10aGlzLmlkLG89dGhpcy5uYW1lc3BhY2UsYT1bXTt0PXoodCk7Zm9yKHZhciBzPS0xLGw9dGhpcy5sZW5ndGg7KytzPGw7KXthLnB1c2goZT1bXSk7Zm9yKHZhciB1PXRoaXNbc10sYz0tMSxoPXUubGVuZ3RoOysrYzxoOykobj11W2NdKSYmKHI9dC5jYWxsKG4sbi5fX2RhdGFfXyxjLHMpKT8oIl9fZGF0YV9fImluIG4mJihyLl9fZGF0YV9fPW4uX19kYXRhX18pLHJhKHIsYyxvLGksbltvXVtpXSksZS5wdXNoKHIpKTplLnB1c2gobnVsbCl9cmV0dXJuIEpvKGEsbyxpKX0sSGwuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLG8sYT10aGlzLmlkLHM9dGhpcy5uYW1lc3BhY2UsbD1bXTt0PUkodCk7Zm9yKHZhciB1PS0xLGM9dGhpcy5sZW5ndGg7Kyt1PGM7KWZvcih2YXIgaD10aGlzW3VdLGY9LTEscD1oLmxlbmd0aDsrK2Y8cDspaWYobj1oW2ZdKXtvPW5bc11bYV0scj10LmNhbGwobixuLl9fZGF0YV9fLGYsdSksbC5wdXNoKGU9W10pO2Zvcih2YXIgZD0tMSxtPXIubGVuZ3RoOysrZDxtOykoaT1yW2RdKSYmcmEoaSxkLHMsYSxvKSxlLnB1c2goaSl9cmV0dXJuIEpvKGwscyxhKX0sSGwuZmlsdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPVtdOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1xKHQpKTtmb3IodmFyIG89MCxhPXRoaXMubGVuZ3RoO2E+bztvKyspe2kucHVzaChlPVtdKTtmb3IodmFyIHI9dGhpc1tvXSxzPTAsbD1yLmxlbmd0aDtsPnM7cysrKShuPXJbc10pJiZ0LmNhbGwobixuLl9fZGF0YV9fLHMsbykmJmUucHVzaChuKX1yZXR1cm4gSm8oaSx0aGlzLm5hbWVzcGFjZSx0aGlzLmlkKX0sSGwudHdlZW49ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmlkLG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzLm5vZGUoKVtuXVtyXS50d2Vlbi5nZXQodCk6SCh0aGlzLG51bGw9PWU/ZnVuY3Rpb24oZSl7ZVtuXVtyXS50d2Vlbi5yZW1vdmUodCl9OmZ1bmN0aW9uKGkpe2lbbl1bcl0udHdlZW4uc2V0KHQsZSl9KX0sSGwuYXR0cj1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShzKX1mdW5jdGlvbiBuKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhzLnNwYWNlLHMubG9jYWwpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIG51bGw9PXQ/cjoodCs9IiIsZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMuZ2V0QXR0cmlidXRlKHMpO3JldHVybiByIT09dCYmKGU9YShyLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlKHMsZSh0KSl9KX0pfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG51bGw9PXQ/bjoodCs9IiIsZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMuZ2V0QXR0cmlidXRlTlMocy5zcGFjZSxzLmxvY2FsKTtyZXR1cm4gciE9PXQmJihlPWEocix0KSxmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZU5TKHMuc3BhY2Uscy5sb2NhbCxlKHQpKX0pfSl9aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IoZSBpbiB0KXRoaXMuYXR0cihlLHRbZV0pO3JldHVybiB0aGlzfXZhciBhPSJ0cmFuc2Zvcm0iPT10P1puOl9uLHM9Y2EubnMucXVhbGlmeSh0KTtyZXR1cm4gJG8odGhpcywiYXR0ci4iK3QsZSxzLmxvY2FsP286aSl9LEhsLmF0dHJUd2Vlbj1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxyKXt2YXIgbj1lLmNhbGwodGhpcyx0LHIsdGhpcy5nZXRBdHRyaWJ1dGUoaSkpO3JldHVybiBuJiZmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShpLG4odCkpfX1mdW5jdGlvbiBuKHQscil7dmFyIG49ZS5jYWxsKHRoaXMsdCxyLHRoaXMuZ2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKSk7cmV0dXJuIG4mJmZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLG4odCkpfX12YXIgaT1jYS5ucy5xdWFsaWZ5KHQpO3JldHVybiB0aGlzLnR3ZWVuKCJhdHRyLiIrdCxpLmxvY2FsP246cil9LEhsLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBpKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX1mdW5jdGlvbiBvKGUpe3JldHVybiBudWxsPT1lP2k6KGUrPSIiLGZ1bmN0aW9uKCl7dmFyIGksbz1uKHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpO3JldHVybiBvIT09ZSYmKGk9X24obyxlKSxmdW5jdGlvbihlKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsaShlKSxyKX0pfSl9dmFyIGE9YXJndW1lbnRzLmxlbmd0aDtpZigzPmEpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7Mj5hJiYoZT0iIik7Zm9yKHIgaW4gdCl0aGlzLnN0eWxlKHIsdFtyXSxlKTtyZXR1cm4gdGhpc31yPSIifXJldHVybiAkbyh0aGlzLCJzdHlsZS4iK3QsZSxvKX0sSGwuc3R5bGVUd2Vlbj1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gaShpLG8pe3ZhciBhPWUuY2FsbCh0aGlzLGksbyxuKHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpKTtyZXR1cm4gYSYmZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGEoZSkscil9fXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDMmJihyPSIiKSx0aGlzLnR3ZWVuKCJzdHlsZS4iK3QsaSl9LEhsLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuICRvKHRoaXMsInRleHQiLHQsdGEpfSxIbC5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5hbWVzcGFjZTtyZXR1cm4gdGhpcy5lYWNoKCJlbmQudHJhbnNpdGlvbiIsZnVuY3Rpb24oKXt2YXIgZTt0aGlzW3RdLmNvdW50PDImJihlPXRoaXMucGFyZW50Tm9kZSkmJmUucmVtb3ZlQ2hpbGQodGhpcyl9KX0sSGwuZWFzZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5lYXNlOigiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Y2EuZWFzZS5hcHBseShjYSxhcmd1bWVudHMpKSxIKHRoaXMsZnVuY3Rpb24obil7bltyXVtlXS5lYXNlPXR9KSl9LEhsLmRlbGF5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWQscj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW3JdW2VdLmRlbGF5OkgodGhpcywiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbihuLGksbyl7bltyXVtlXS5kZWxheT0rdC5jYWxsKG4sbi5fX2RhdGFfXyxpLG8pfToodD0rdCxmdW5jdGlvbihuKXtuW3JdW2VdLmRlbGF5PXR9KSl9LEhsLmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWQscj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW3JdW2VdLmR1cmF0aW9uOkgodGhpcywiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbihuLGksbyl7bltyXVtlXS5kdXJhdGlvbj1NYXRoLm1heCgxLHQuY2FsbChuLG4uX19kYXRhX18saSxvKSl9Oih0PU1hdGgubWF4KDEsdCksZnVuY3Rpb24obil7bltyXVtlXS5kdXJhdGlvbj10fSkpfSxIbC5lYWNoPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5pZCxuPXRoaXMubmFtZXNwYWNlO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGk9cWwsbz1WbDt0cnl7Vmw9cixIKHRoaXMsZnVuY3Rpb24oZSxpLG8pe3FsPWVbbl1bcl0sdC5jYWxsKGUsZS5fX2RhdGFfXyxpLG8pfSl9ZmluYWxseXtxbD1pLFZsPW99fWVsc2UgSCh0aGlzLGZ1bmN0aW9uKGkpe3ZhciBvPWlbbl1bcl07KG8uZXZlbnR8fChvLmV2ZW50PWNhLmRpc3BhdGNoKCJzdGFydCIsImVuZCIsImludGVycnVwdCIpKSkub24odCxlKX0pO3JldHVybiB0aGlzfSxIbC50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscixuLGk9dGhpcy5pZCxvPSsrWGwsYT10aGlzLm5hbWVzcGFjZSxzPVtdLGw9MCx1PXRoaXMubGVuZ3RoO3U+bDtsKyspe3MucHVzaCh0PVtdKTtmb3IodmFyIGU9dGhpc1tsXSxjPTAsaD1lLmxlbmd0aDtoPmM7YysrKShyPWVbY10pJiYobj1yW2FdW2ldLHJhKHIsYyxhLG8se3RpbWU6bi50aW1lLGVhc2U6bi5lYXNlLGRlbGF5Om4uZGVsYXkrbi5kdXJhdGlvbixkdXJhdGlvbjpuLmR1cmF0aW9ufSkpLHQucHVzaChyKX1yZXR1cm4gSm8ocyxhLG8pfSxjYS5zdmcuYXhpcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQsdT1jYS5zZWxlY3QodGhpcyksYz10aGlzLl9fY2hhcnRfX3x8cixoPXRoaXMuX19jaGFydF9fPXIuY29weSgpLGY9bnVsbD09bD9oLnRpY2tzP2gudGlja3MuYXBwbHkoaCxzKTpoLmRvbWFpbigpOmwscD1udWxsPT1lP2gudGlja0Zvcm1hdD9oLnRpY2tGb3JtYXQuYXBwbHkoaCxzKTp4OmUsZD11LnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGYsaCksbT1kLmVudGVyKCkuaW5zZXJ0KCJnIiwiLmRvbWFpbiIpLmF0dHIoImNsYXNzIiwidGljayIpLnN0eWxlKCJvcGFjaXR5IixOYSksZz1jYS50cmFuc2l0aW9uKGQuZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsTmEpLnJlbW92ZSgpLHY9Y2EudHJhbnNpdGlvbihkLm9yZGVyKCkpLnN0eWxlKCJvcGFjaXR5IiwxKSx5PU1hdGgubWF4KGksMCkrYSxiPVhpKGgpLF89dS5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksdz0oXy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWluIiksY2EudHJhbnNpdGlvbihfKSk7bS5hcHBlbmQoImxpbmUiKSxtLmFwcGVuZCgidGV4dCIpO3ZhciBNLGssQSxULEU9bS5zZWxlY3QoImxpbmUiKSxTPXYuc2VsZWN0KCJsaW5lIiksTD1kLnNlbGVjdCgidGV4dCIpLnRleHQocCksej1tLnNlbGVjdCgidGV4dCIpLEk9di5zZWxlY3QoInRleHQiKSxQPSJ0b3AiPT09bnx8ImxlZnQiPT09bj8tMToxO2lmKCJib3R0b20iPT09bnx8InRvcCI9PT1uPyh0PW5hLE09IngiLEE9InkiLGs9IngyIixUPSJ5MiIsTC5hdHRyKCJkeSIsMD5QPyIwZW0iOiIuNzFlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLHcuYXR0cigiZCIsIk0iK2JbMF0rIiwiK1AqbysiVjBIIitiWzFdKyJWIitQKm8pKToodD1pYSxNPSJ5IixBPSJ4IixrPSJ5MiIsVD0ieDIiLEwuYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsMD5QPyJlbmQiOiJzdGFydCIpLHcuYXR0cigiZCIsIk0iK1AqbysiLCIrYlswXSsiSDBWIitiWzFdKyJIIitQKm8pKSwKRS5hdHRyKFQsUCppKSx6LmF0dHIoQSxQKnkpLFMuYXR0cihrLDApLmF0dHIoVCxQKmkpLEkuYXR0cihNLDApLmF0dHIoQSxQKnkpLGgucmFuZ2VCYW5kKXt2YXIgQz1oLFI9Qy5yYW5nZUJhbmQoKS8yO2M9aD1mdW5jdGlvbih0KXtyZXR1cm4gQyh0KStSfX1lbHNlIGMucmFuZ2VCYW5kP2M9aDpnLmNhbGwodCxoLGMpO20uY2FsbCh0LGMsaCksdi5jYWxsKHQsaCxoKX0pfXZhciBlLHI9Y2Euc2NhbGUubGluZWFyKCksbj1ZbCxpPTYsbz02LGE9MyxzPVsxMF0sbD1udWxsO3JldHVybiB0LnNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsdCk6cn0sdC5vcmllbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSBpbiBXbD9lKyIiOllsLHQpOm59LHQudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1mYShhcmd1bWVudHMpLHQpOnN9LHQudGlja1ZhbHVlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1lLHQpOmx9LHQudGlja0Zvcm1hdD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yLHQpOmV9LHQudGlja1NpemU9ZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcj8oaT0rZSxvPSthcmd1bWVudHNbci0xXSx0KTppfSx0LmlubmVyVGlja1NpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2UsdCk6aX0sdC5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStlLHQpOm99LHQudGlja1BhZGRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K2UsdCk6YX0sdC50aWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnR9LHR9O3ZhciBZbD0iYm90dG9tIixXbD17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O2NhLnN2Zy5icnVzaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQobil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49Y2Euc2VsZWN0KHRoaXMpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCIsbykub24oInRvdWNoc3RhcnQuYnJ1c2giLG8pLGE9bi5zZWxlY3RBbGwoIi5iYWNrZ3JvdW5kIikuZGF0YShbMF0pO2EuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhY2tncm91bmQiKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLnN0eWxlKCJjdXJzb3IiLCJjcm9zc2hhaXIiKSxuLnNlbGVjdEFsbCgiLmV4dGVudCIpLmRhdGEoWzBdKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiZXh0ZW50Iikuc3R5bGUoImN1cnNvciIsIm1vdmUiKTt2YXIgcz1uLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmRhdGEobSx4KTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJyZXNpemUgIit0fSkuc3R5bGUoImN1cnNvciIsZnVuY3Rpb24odCl7cmV0dXJuIFpsW3RdfSkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuL1tld10kLy50ZXN0KHQpPy0zOm51bGx9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4vXltuc10vLnRlc3QodCk/LTM6bnVsbH0pLmF0dHIoIndpZHRoIiw2KS5hdHRyKCJoZWlnaHQiLDYpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikscy5zdHlsZSgiZGlzcGxheSIsdC5lbXB0eSgpPyJub25lIjpudWxsKTt2YXIgbCxoPWNhLnRyYW5zaXRpb24obiksZj1jYS50cmFuc2l0aW9uKGEpO3UmJihsPVhpKHUpLGYuYXR0cigieCIsbFswXSkuYXR0cigid2lkdGgiLGxbMV0tbFswXSkscihoKSksYyYmKGw9WGkoYyksZi5hdHRyKCJ5IixsWzBdKS5hdHRyKCJoZWlnaHQiLGxbMV0tbFswXSksaShoKSksZShoKX0pfWZ1bmN0aW9uIGUodCl7dC5zZWxlY3RBbGwoIi5yZXNpemUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIitoWysvZSQvLnRlc3QodCldKyIsIitmWysvXnMvLnRlc3QodCldKyIpIn0pfWZ1bmN0aW9uIHIodCl7dC5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ4IixoWzBdKSx0LnNlbGVjdEFsbCgiLmV4dGVudCwubj5yZWN0LC5zPnJlY3QiKS5hdHRyKCJ3aWR0aCIsaFsxXS1oWzBdKX1mdW5jdGlvbiBpKHQpe3Quc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieSIsZlswXSksdC5zZWxlY3RBbGwoIi5leHRlbnQsLmU+cmVjdCwudz5yZWN0IikuYXR0cigiaGVpZ2h0IixmWzFdLWZbMF0pfWZ1bmN0aW9uIG8oKXtmdW5jdGlvbiBvKCl7MzI9PWNhLmV2ZW50LmtleUNvZGUmJihMfHwoYj1udWxsLElbMF0tPWhbMV0sSVsxXS09ZlsxXSxMPTIpLFQoKSl9ZnVuY3Rpb24gbSgpezMyPT1jYS5ldmVudC5rZXlDb2RlJiYyPT1MJiYoSVswXSs9aFsxXSxJWzFdKz1mWzFdLEw9MCxUKCkpfWZ1bmN0aW9uIGcoKXt2YXIgdD1jYS5tb3VzZShfKSxuPSExO3gmJih0WzBdKz14WzBdLHRbMV0rPXhbMV0pLEx8fChjYS5ldmVudC5hbHRLZXk/KGJ8fChiPVsoaFswXStoWzFdKS8yLChmWzBdK2ZbMV0pLzJdKSxJWzBdPWhbKyh0WzBdPGJbMF0pXSxJWzFdPWZbKyh0WzFdPGJbMV0pXSk6Yj1udWxsKSxFJiZ2KHQsdSwwKSYmKHIoayksbj0hMCksUyYmdih0LGMsMSkmJihpKGspLG49ITApLG4mJihlKGspLE0oe3R5cGU6ImJydXNoIixtb2RlOkw/Im1vdmUiOiJyZXNpemUifSkpfWZ1bmN0aW9uIHYodCxlLHIpe3ZhciBuLGksbz1YaShlKSxsPW9bMF0sdT1vWzFdLGM9SVtyXSxtPXI/ZjpoLGc9bVsxXS1tWzBdO3JldHVybiBMJiYobC09Yyx1LT1nK2MpLG49KHI/ZDpwKT9NYXRoLm1heChsLE1hdGgubWluKHUsdFtyXSkpOnRbcl0sTD9pPShuKz1jKStnOihiJiYoYz1NYXRoLm1heChsLE1hdGgubWluKHUsMipiW3JdLW4pKSksbj5jPyhpPW4sbj1jKTppPWMpLG1bMF0hPW58fG1bMV0hPWk/KHI/cz1udWxsOmE9bnVsbCxtWzBdPW4sbVsxXT1pLCEwKTp2b2lkIDB9ZnVuY3Rpb24geSgpe2coKSxrLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5Iix0LmVtcHR5KCk/Im5vbmUiOm51bGwpLGNhLnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLG51bGwpLFAub24oIm1vdXNlbW92ZS5icnVzaCIsbnVsbCkub24oIm1vdXNldXAuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaGVuZC5icnVzaCIsbnVsbCkub24oImtleWRvd24uYnJ1c2giLG51bGwpLm9uKCJrZXl1cC5icnVzaCIsbnVsbCkseigpLE0oe3R5cGU6ImJydXNoZW5kIn0pfXZhciBiLHgsXz10aGlzLHc9Y2Euc2VsZWN0KGNhLmV2ZW50LnRhcmdldCksTT1sLm9mKF8sYXJndW1lbnRzKSxrPWNhLnNlbGVjdChfKSxBPXcuZGF0dW0oKSxFPSEvXihufHMpJC8udGVzdChBKSYmdSxTPSEvXihlfHcpJC8udGVzdChBKSYmYyxMPXcuY2xhc3NlZCgiZXh0ZW50Iiksej1LKF8pLEk9Y2EubW91c2UoXyksUD1jYS5zZWxlY3QobihfKSkub24oImtleWRvd24uYnJ1c2giLG8pLm9uKCJrZXl1cC5icnVzaCIsbSk7aWYoY2EuZXZlbnQuY2hhbmdlZFRvdWNoZXM/UC5vbigidG91Y2htb3ZlLmJydXNoIixnKS5vbigidG91Y2hlbmQuYnJ1c2giLHkpOlAub24oIm1vdXNlbW92ZS5icnVzaCIsZykub24oIm1vdXNldXAuYnJ1c2giLHkpLGsuaW50ZXJydXB0KCkuc2VsZWN0QWxsKCIqIikuaW50ZXJydXB0KCksTClJWzBdPWhbMF0tSVswXSxJWzFdPWZbMF0tSVsxXTtlbHNlIGlmKEEpe3ZhciBDPSsvdyQvLnRlc3QoQSksUj0rL15uLy50ZXN0KEEpO3g9W2hbMS1DXS1JWzBdLGZbMS1SXS1JWzFdXSxJWzBdPWhbQ10sSVsxXT1mW1JdfWVsc2UgY2EuZXZlbnQuYWx0S2V5JiYoYj1JLnNsaWNlKCkpO2suc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKSxjYS5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIix3LnN0eWxlKCJjdXJzb3IiKSksTSh7dHlwZToiYnJ1c2hzdGFydCJ9KSxnKCl9dmFyIGEscyxsPVModCwiYnJ1c2hzdGFydCIsImJydXNoIiwiYnJ1c2hlbmQiKSx1PW51bGwsYz1udWxsLGg9WzAsMF0sZj1bMCwwXSxwPSEwLGQ9ITAsbT1RbFswXTtyZXR1cm4gdC5ldmVudD1mdW5jdGlvbih0KXt0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1sLm9mKHRoaXMsYXJndW1lbnRzKSxlPXt4OmgseTpmLGk6YSxqOnN9LHI9dGhpcy5fX2NoYXJ0X198fGU7dGhpcy5fX2NoYXJ0X189ZSxWbD9jYS5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0LmJydXNoIixmdW5jdGlvbigpe2E9ci5pLHM9ci5qLGg9ci54LGY9ci55LHQoe3R5cGU6ImJydXNoc3RhcnQifSl9KS50d2VlbigiYnJ1c2g6YnJ1c2giLGZ1bmN0aW9uKCl7dmFyIHI9d24oaCxlLngpLG49d24oZixlLnkpO3JldHVybiBhPXM9bnVsbCxmdW5jdGlvbihpKXtoPWUueD1yKGkpLGY9ZS55PW4oaSksdCh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KX19KS5lYWNoKCJlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7YT1lLmkscz1lLmosdCh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSx0KHt0eXBlOiJicnVzaGVuZCJ9KX0pOih0KHt0eXBlOiJicnVzaHN0YXJ0In0pLHQoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksdCh7dHlwZToiYnJ1c2hlbmQifSkpfSl9LHQueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1lLG09UWxbIXU8PDF8IWNdLHQpOnV9LHQueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLG09UWxbIXU8PDF8IWNdLHQpOmN9LHQuY2xhbXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUmJmM/KHA9ISFlWzBdLGQ9ISFlWzFdKTp1P3A9ISFlOmMmJihkPSEhZSksdCk6dSYmYz9bcCxkXTp1P3A6Yz9kOm51bGx9LHQuZXh0ZW50PWZ1bmN0aW9uKGUpe3ZhciByLG4saSxvLGw7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUmJihyPWVbMF0sbj1lWzFdLGMmJihyPXJbMF0sbj1uWzBdKSxhPVtyLG5dLHUuaW52ZXJ0JiYocj11KHIpLG49dShuKSkscj5uJiYobD1yLHI9bixuPWwpLHI9PWhbMF0mJm49PWhbMV18fChoPVtyLG5dKSksYyYmKGk9ZVswXSxvPWVbMV0sdSYmKGk9aVsxXSxvPW9bMV0pLHM9W2ksb10sYy5pbnZlcnQmJihpPWMoaSksbz1jKG8pKSxpPm8mJihsPWksaT1vLG89bCksaT09ZlswXSYmbz09ZlsxXXx8KGY9W2ksb10pKSx0KToodSYmKGE/KHI9YVswXSxuPWFbMV0pOihyPWhbMF0sbj1oWzFdLHUuaW52ZXJ0JiYocj11LmludmVydChyKSxuPXUuaW52ZXJ0KG4pKSxyPm4mJihsPXIscj1uLG49bCkpKSxjJiYocz8oaT1zWzBdLG89c1sxXSk6KGk9ZlswXSxvPWZbMV0sYy5pbnZlcnQmJihpPWMuaW52ZXJ0KGkpLG89Yy5pbnZlcnQobykpLGk+byYmKGw9aSxpPW8sbz1sKSkpLHUmJmM/W1tyLGldLFtuLG9dXTp1P1tyLG5dOmMmJltpLG9dKX0sdC5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0LmVtcHR5KCl8fChoPVswLDBdLGY9WzAsMF0sYT1zPW51bGwpLHR9LHQuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hIXUmJmhbMF09PWhbMV18fCEhYyYmZlswXT09ZlsxXX0sY2EucmViaW5kKHQsbCwib24iKX07dmFyIFpsPXtuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LFFsPVtbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwic2UiLCJzdyJdLFsiZSIsInciXSxbIm4iLCJzIl0sW11dLEtsPWdzLmZvcm1hdD13cy50aW1lRm9ybWF0LEpsPUtsLnV0YywkbD1KbCgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7S2wuaXNvPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nJiYrbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP29hOiRsLG9hLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9LG9hLnRvU3RyaW5nPSRsLnRvU3RyaW5nLGdzLnNlY29uZD1WdChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHZzKDFlMypNYXRoLmZsb29yKHQvMWUzKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzFlMypNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0U2Vjb25kcygpfSksZ3Muc2Vjb25kcz1ncy5zZWNvbmQucmFuZ2UsZ3Muc2Vjb25kcy51dGM9Z3Muc2Vjb25kLnV0Yy5yYW5nZSxncy5taW51dGU9VnQoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB2cyg2ZTQqTWF0aC5mbG9vcih0LzZlNCkpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSh0LmdldFRpbWUoKSs2ZTQqTWF0aC5mbG9vcihlKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pLGdzLm1pbnV0ZXM9Z3MubWludXRlLnJhbmdlLGdzLm1pbnV0ZXMudXRjPWdzLm1pbnV0ZS51dGMucmFuZ2UsZ3MuaG91cj1WdChmdW5jdGlvbih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCkvNjA7cmV0dXJuIG5ldyB2cygzNmU1KihNYXRoLmZsb29yKHQvMzZlNS1lKStlKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzM2ZTUqTWF0aC5mbG9vcihlKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSxncy5ob3Vycz1ncy5ob3VyLnJhbmdlLGdzLmhvdXJzLnV0Yz1ncy5ob3VyLnV0Yy5yYW5nZSxncy5tb250aD1WdChmdW5jdGlvbih0KXtyZXR1cm4gdD1ncy5kYXkodCksdC5zZXREYXRlKDEpLHR9LGZ1bmN0aW9uKHQsZSl7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSxncy5tb250aHM9Z3MubW9udGgucmFuZ2UsZ3MubW9udGhzLnV0Yz1ncy5tb250aC51dGMucmFuZ2U7dmFyIHR1PVsxZTMsNWUzLDE1ZTMsM2U0LDZlNCwzZTUsOWU1LDE4ZTUsMzZlNSwxMDhlNSwyMTZlNSw0MzJlNSw4NjRlNSwxNzI4ZTUsNjA0OGU1LDI1OTJlNiw3Nzc2ZTYsMzE1MzZlNl0sZXU9W1tncy5zZWNvbmQsMV0sW2dzLnNlY29uZCw1XSxbZ3Muc2Vjb25kLDE1XSxbZ3Muc2Vjb25kLDMwXSxbZ3MubWludXRlLDFdLFtncy5taW51dGUsNV0sW2dzLm1pbnV0ZSwxNV0sW2dzLm1pbnV0ZSwzMF0sW2dzLmhvdXIsMV0sW2dzLmhvdXIsM10sW2dzLmhvdXIsNl0sW2dzLmhvdXIsMTJdLFtncy5kYXksMV0sW2dzLmRheSwyXSxbZ3Mud2VlaywxXSxbZ3MubW9udGgsMV0sW2dzLm1vbnRoLDNdLFtncy55ZWFyLDFdXSxydT1LbC5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSYmMSE9dC5nZXREYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbih0KXtyZXR1cm4gMSE9dC5nZXREYXRlKCl9XSxbIiVCIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfV0sWyIlWSIsSWVdXSksbnU9e3JhbmdlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gY2EucmFuZ2UoTWF0aC5jZWlsKHQvcikqciwrZSxyKS5tYXAoc2EpfSxmbG9vcjp4LGNlaWw6eH07ZXUueWVhcj1ncy55ZWFyLGdzLnNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIGFhKGNhLnNjYWxlLmxpbmVhcigpLGV1LHJ1KX07dmFyIGl1PWV1Lm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXS51dGMsdFsxXV19KSxvdT1KbC5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXkoKSYmMSE9dC5nZXRVVENEYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbih0KXtyZXR1cm4gMSE9dC5nZXRVVENEYXRlKCl9XSxbIiVCIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfV0sWyIlWSIsSWVdXSk7aXUueWVhcj1ncy55ZWFyLnV0Yyxncy5zY2FsZS51dGM9ZnVuY3Rpb24oKXtyZXR1cm4gYWEoY2Euc2NhbGUubGluZWFyKCksaXUsb3UpfSxjYS50ZXh0PUx0KGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlVGV4dH0pLGNhLmpzb249ZnVuY3Rpb24odCxlKXtyZXR1cm4genQodCwiYXBwbGljYXRpb24vanNvbiIsbGEsZSl9LGNhLmh0bWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4genQodCwidGV4dC9odG1sIix1YSxlKX0sY2EueG1sPUx0KGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlWE1MfSksImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kPyh0aGlzLmQzPWNhLHQoY2EpKToib2JqZWN0Ij09dHlwZW9mIHImJnIuZXhwb3J0cz9yLmV4cG9ydHM9Y2E6dGhpcy5kMz1jYX0oKX0se31dLDEyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5wb2ludD10LHRoaXMuaW5kZXg9ZX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPXQucG9pbnQsbj1lLnBvaW50LGk9ci5sZW5ndGgsbz0wO2k+bzsrK28pe3ZhciBhPW5bb10tcltvXTtpZihhKXJldHVybiBhfXJldHVybiAwfWZ1bmN0aW9uIG8odCxlLHIpe2lmKDE9PT10KXJldHVybiByP1tbLTEsMF1dOltdO3ZhciBuPWUubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sZV19KTtuLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSk7Zm9yKHZhciBpPW5ldyBBcnJheSh0LTEpLG89MTt0Pm87KytvKXt2YXIgYT1uW28tMV0scz1uW29dO2lbby0xXT1bYVsxXSxzWzFdXX1yZXR1cm4gciYmaS5wdXNoKFstMSxpWzBdWzFdXSxbaVt0LTFdWzFdLC0xXSksaX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpcmV0dXJuW107dmFyIGE9dFswXS5sZW5ndGg7aWYoMT5hKXJldHVybltdO2lmKDE9PT1hKXJldHVybiBvKHIsdCxlKTtmb3IodmFyIHU9bmV3IEFycmF5KHIpLGM9MSxoPTA7cj5oOysraCl7Zm9yKHZhciBmPXRbaF0scD1uZXcgQXJyYXkoYSsxKSxkPTAsbT0wO2E+bTsrK20pe3ZhciBnPWZbbV07cFttXT1nLGQrPWcqZ31wW2FdPWQsdVtoXT1uZXcgbihwLGgpLGM9TWF0aC5tYXgoZCxjKX1sKHUsaSkscj11Lmxlbmd0aDtmb3IodmFyIHY9bmV3IEFycmF5KHIrYSsxKSx5PW5ldyBBcnJheShyK2ErMSksYj0oYSsxKSooYSsxKSpjLHg9bmV3IEFycmF5KGErMSksaD0wO2E+PWg7KytoKXhbaF09MDt4W2FdPWIsdlswXT14LnNsaWNlKCkseVswXT0tMTtmb3IodmFyIGg9MDthPj1oOysraCl7dmFyIHA9eC5zbGljZSgpO3BbaF09MSx2W2grMV09cCx5W2grMV09LTF9Zm9yKHZhciBoPTA7cj5oOysraCl7dmFyIF89dVtoXTt2W2grYSsxXT1fLnBvaW50LHlbaCthKzFdPV8uaW5kZXh9dmFyIHc9cyh2LCExKTtpZih3PWU/dy5maWx0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO2E+PXI7KytyKXt2YXIgbj15W3Rbcl1dO2lmKDA+biYmKytlPj0yKXJldHVybiExO3Rbcl09bn1yZXR1cm4hMH0pOncuZmlsdGVyKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2E+PWU7KytlKXt2YXIgcj15W3RbZV1dO2lmKDA+cilyZXR1cm4hMTt0W2VdPXJ9cmV0dXJuITB9KSwxJmEpZm9yKHZhciBoPTA7aDx3Lmxlbmd0aDsrK2gpe3ZhciBfPXdbaF0scD1fWzBdO19bMF09X1sxXSxfWzFdPXB9cmV0dXJuIHd9dmFyIHM9dCgiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiKSxsPXQoInVuaXEiKTtlLmV4cG9ydHM9YX0seyJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCI6MjQ2LHVuaXE6NDgyfV0sMTI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBpPTB8dFtyXTtpZigwPj1pKXJldHVybltdO3ZhciBvLGE9bmV3IEFycmF5KGkpO2lmKHI9PT10Lmxlbmd0aC0xKWZvcihvPTA7aT5vOysrbylhW29dPWU7ZWxzZSBmb3Iobz0wO2k+bzsrK28pYVtvXT1uKHQsZSxyKzEpO3JldHVybiBhfWZ1bmN0aW9uIGkodCxlKXt2YXIgcixuO2ZvcihyPW5ldyBBcnJheSh0KSxuPTA7dD5uOysrbilyW25dPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0LGUpe3N3aXRjaCgidW5kZWZpbmVkIj09dHlwZW9mIGUmJihlPTApLHR5cGVvZiB0KXtjYXNlIm51bWJlciI6aWYodD4wKXJldHVybiBpKDB8dCxlKTticmVhaztjYXNlIm9iamVjdCI6aWYoIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aClyZXR1cm4gbih0LGUsMCl9cmV0dXJuW119ZS5leHBvcnRzPW99LHt9XSwxMjc6W2Z1bmN0aW9uKGUscixuKXsoZnVuY3Rpb24obixpKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdHx8Im9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBhKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIHModCl7WD10fWZ1bmN0aW9uIGwodCl7UT10fWZ1bmN0aW9uIHUoKXtyZXR1cm4gZnVuY3Rpb24oKXtuLm5leHRUaWNrKGQpfX1mdW5jdGlvbiBjKCl7cmV0dXJuIGZ1bmN0aW9uKCl7SChkKX19ZnVuY3Rpb24gaCgpe3ZhciB0PTAsZT1uZXcgJChkKSxyPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtyZXR1cm4gZS5vYnNlcnZlKHIse2NoYXJhY3RlckRhdGE6ITB9KSxmdW5jdGlvbigpe3IuZGF0YT10PSsrdCUyfX1mdW5jdGlvbiBmKCl7dmFyIHQ9bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiB0LnBvcnQxLm9ubWVzc2FnZT1kLGZ1bmN0aW9uKCl7dC5wb3J0Mi5wb3N0TWVzc2FnZSgwKX19ZnVuY3Rpb24gcCgpe3JldHVybiBmdW5jdGlvbigpe3NldFRpbWVvdXQoZCwxKX19ZnVuY3Rpb24gZCgpe2Zvcih2YXIgdD0wO1o+dDt0Kz0yKXt2YXIgZT1ydFt0XSxyPXJ0W3QrMV07ZShyKSxydFt0XT12b2lkIDAscnRbdCsxXT12b2lkIDB9Wj0wfWZ1bmN0aW9uIG0oKXt0cnl7dmFyIHQ9ZSxyPXQoInZlcnR4Iik7cmV0dXJuIEg9ci5ydW5Pbkxvb3B8fHIucnVuT25Db250ZXh0LGMoKX1jYXRjaChuKXtyZXR1cm4gcCgpfX1mdW5jdGlvbiBnKHQsZSl7dmFyIHI9dGhpcyxuPXIuX3N0YXRlO2lmKG49PT1hdCYmIXR8fG49PT1zdCYmIWUpcmV0dXJuIHRoaXM7dmFyIGk9bmV3IHRoaXMuY29uc3RydWN0b3IoeSksbz1yLl9yZXN1bHQ7aWYobil7dmFyIGE9YXJndW1lbnRzW24tMV07UShmdW5jdGlvbigpe1IobixpLGEsbyl9KX1lbHNlIHoocixpLHQsZSk7cmV0dXJuIGl9ZnVuY3Rpb24gdih0KXt2YXIgZT10aGlzO2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvcj09PWUpcmV0dXJuIHQ7dmFyIHI9bmV3IGUoeSk7cmV0dXJuIFQocix0KSxyfWZ1bmN0aW9uIHkoKXt9ZnVuY3Rpb24gYigpe3JldHVybiBuZXcgVHlwZUVycm9yKCJZb3UgY2Fubm90IHJlc29sdmUgYSBwcm9taXNlIHdpdGggaXRzZWxmIil9ZnVuY3Rpb24geCgpe3JldHVybiBuZXcgVHlwZUVycm9yKCJBIHByb21pc2VzIGNhbGxiYWNrIGNhbm5vdCByZXR1cm4gdGhhdCBzYW1lIHByb21pc2UuIil9ZnVuY3Rpb24gXyh0KXt0cnl7cmV0dXJuIHQudGhlbn1jYXRjaChlKXtyZXR1cm4gbHQuZXJyb3I9ZSxsdH19ZnVuY3Rpb24gdyh0LGUscixuKXt0cnl7dC5jYWxsKGUscixuKX1jYXRjaChpKXtyZXR1cm4gaX19ZnVuY3Rpb24gTSh0LGUscil7UShmdW5jdGlvbih0KXt2YXIgbj0hMSxpPXcocixlLGZ1bmN0aW9uKHIpe258fChuPSEwLGUhPT1yP1QodCxyKTpTKHQscikpfSxmdW5jdGlvbihlKXtufHwobj0hMCxMKHQsZSkpfSwiU2V0dGxlOiAiKyh0Ll9sYWJlbHx8IiB1bmtub3duIHByb21pc2UiKSk7IW4mJmkmJihuPSEwLEwodCxpKSl9LHQpfWZ1bmN0aW9uIGsodCxlKXtlLl9zdGF0ZT09PWF0P1ModCxlLl9yZXN1bHQpOmUuX3N0YXRlPT09c3Q/TCh0LGUuX3Jlc3VsdCk6eihlLHZvaWQgMCxmdW5jdGlvbihlKXtUKHQsZSl9LGZ1bmN0aW9uKGUpe0wodCxlKX0pfWZ1bmN0aW9uIEEodCxlLHIpe2UuY29uc3RydWN0b3I9PT10LmNvbnN0cnVjdG9yJiZyPT09bnQmJmNvbnN0cnVjdG9yLnJlc29sdmU9PT1pdD9rKHQsZSk6cj09PWx0P0wodCxsdC5lcnJvcik6dm9pZCAwPT09cj9TKHQsZSk6YShyKT9NKHQsZSxyKTpTKHQsZSl9ZnVuY3Rpb24gVCh0LGUpe3Q9PT1lP0wodCxiKCkpOm8oZSk/QSh0LGUsXyhlKSk6Uyh0LGUpfWZ1bmN0aW9uIEUodCl7dC5fb25lcnJvciYmdC5fb25lcnJvcih0Ll9yZXN1bHQpLEkodCl9ZnVuY3Rpb24gUyh0LGUpe3QuX3N0YXRlPT09b3QmJih0Ll9yZXN1bHQ9ZSx0Ll9zdGF0ZT1hdCwwIT09dC5fc3Vic2NyaWJlcnMubGVuZ3RoJiZRKEksdCkpfWZ1bmN0aW9uIEwodCxlKXt0Ll9zdGF0ZT09PW90JiYodC5fc3RhdGU9c3QsdC5fcmVzdWx0PWUsUShFLHQpKX1mdW5jdGlvbiB6KHQsZSxyLG4pe3ZhciBpPXQuX3N1YnNjcmliZXJzLG89aS5sZW5ndGg7dC5fb25lcnJvcj1udWxsLGlbb109ZSxpW28rYXRdPXIsaVtvK3N0XT1uLDA9PT1vJiZ0Ll9zdGF0ZSYmUShJLHQpfWZ1bmN0aW9uIEkodCl7dmFyIGU9dC5fc3Vic2NyaWJlcnMscj10Ll9zdGF0ZTtpZigwIT09ZS5sZW5ndGgpe2Zvcih2YXIgbixpLG89dC5fcmVzdWx0LGE9MDthPGUubGVuZ3RoO2ErPTMpbj1lW2FdLGk9ZVthK3JdLG4/UihyLG4saSxvKTppKG8pO3QuX3N1YnNjcmliZXJzLmxlbmd0aD0wfX1mdW5jdGlvbiBQKCl7dGhpcy5lcnJvcj1udWxsfWZ1bmN0aW9uIEModCxlKXt0cnl7cmV0dXJuIHQoZSl9Y2F0Y2gocil7cmV0dXJuIHV0LmVycm9yPXIsdXR9fWZ1bmN0aW9uIFIodCxlLHIsbil7dmFyIGksbyxzLGwsdT1hKHIpO2lmKHUpe2lmKGk9QyhyLG4pLGk9PT11dD8obD0hMCxvPWkuZXJyb3IsaT1udWxsKTpzPSEwLGU9PT1pKXJldHVybiB2b2lkIEwoZSx4KCkpfWVsc2UgaT1uLHM9ITA7ZS5fc3RhdGUhPT1vdHx8KHUmJnM/VChlLGkpOmw/TChlLG8pOnQ9PT1hdD9TKGUsaSk6dD09PXN0JiZMKGUsaSkpfWZ1bmN0aW9uIGoodCxlKXt0cnl7ZShmdW5jdGlvbihlKXtUKHQsZSl9LGZ1bmN0aW9uKGUpe0wodCxlKX0pfWNhdGNoKHIpe0wodCxyKX19ZnVuY3Rpb24gRCh0KXtyZXR1cm4gbmV3IG10KHRoaXMsdCkucHJvbWlzZX1mdW5jdGlvbiBPKHQpe2Z1bmN0aW9uIGUodCl7VChpLHQpfWZ1bmN0aW9uIHIodCl7TChpLHQpfXZhciBuPXRoaXMsaT1uZXcgbih5KTtpZighVyh0KSlyZXR1cm4gTChpLG5ldyBUeXBlRXJyb3IoIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4iKSksaTtmb3IodmFyIG89dC5sZW5ndGgsYT0wO2kuX3N0YXRlPT09b3QmJm8+YTthKyspeihuLnJlc29sdmUodFthXSksdm9pZCAwLGUscik7cmV0dXJuIGl9ZnVuY3Rpb24gRih0KXt2YXIgZT10aGlzLHI9bmV3IGUoeSk7cmV0dXJuIEwocix0KSxyfWZ1bmN0aW9uIE4oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yIil9ZnVuY3Rpb24gQigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIpfWZ1bmN0aW9uIFUodCl7dGhpcy5faWQ9cHQrKyx0aGlzLl9zdGF0ZT12b2lkIDAsdGhpcy5fcmVzdWx0PXZvaWQgMCx0aGlzLl9zdWJzY3JpYmVycz1bXSx5IT09dCYmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZOKCksdGhpcyBpbnN0YW5jZW9mIFU/aih0aGlzLHQpOkIoKSl9ZnVuY3Rpb24gVih0LGUpe3RoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I9dCx0aGlzLnByb21pc2U9bmV3IHQoeSksQXJyYXkuaXNBcnJheShlKT8odGhpcy5faW5wdXQ9ZSx0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLl9yZW1haW5pbmc9ZS5sZW5ndGgsdGhpcy5fcmVzdWx0PW5ldyBBcnJheSh0aGlzLmxlbmd0aCksMD09PXRoaXMubGVuZ3RoP1ModGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCk6KHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RofHwwLHRoaXMuX2VudW1lcmF0ZSgpLDA9PT10aGlzLl9yZW1haW5pbmcmJlModGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCkpKTpMKHRoaXMucHJvbWlzZSx0aGlzLl92YWxpZGF0aW9uRXJyb3IoKSl9ZnVuY3Rpb24gcSgpe3ZhciB0O2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgaSl0PWk7ZWxzZSBpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYpdD1zZWxmO2Vsc2UgdHJ5e3Q9RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3IoInBvbHlmaWxsIGZhaWxlZCBiZWNhdXNlIGdsb2JhbCBvYmplY3QgaXMgdW5hdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCIpfXZhciByPXQuUHJvbWlzZTtyJiYiW29iamVjdCBQcm9taXNlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoci5yZXNvbHZlKCkpJiYhci5jYXN0fHwodC5Qcm9taXNlPWR0KX12YXIgRztHPUFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheTpmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfTt2YXIgSCxYLFksVz1HLFo9MCxRPWZ1bmN0aW9uKHQsZSl7cnRbWl09dCxydFtaKzFdPWUsWis9MiwyPT09WiYmKFg/WChkKTpZKCkpfSxLPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAsSj1LfHx7fSwkPUouTXV0YXRpb25PYnNlcnZlcnx8Si5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLHR0PSJ1bmRlZmluZWQiIT10eXBlb2YgbiYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChuKSxldD0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiYidW5kZWZpbmVkIiE9dHlwZW9mIGltcG9ydFNjcmlwdHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWwscnQ9bmV3IEFycmF5KDFlMyk7WT10dD91KCk6JD9oKCk6ZXQ/ZigpOnZvaWQgMD09PUsmJiJmdW5jdGlvbiI9PXR5cGVvZiBlP20oKTpwKCk7dmFyIG50PWcsaXQ9dixvdD12b2lkIDAsYXQ9MSxzdD0yLGx0PW5ldyBQLHV0PW5ldyBQLGN0PUQsaHQ9TyxmdD1GLHB0PTAsZHQ9VTtVLmFsbD1jdCxVLnJhY2U9aHQsVS5yZXNvbHZlPWl0LFUucmVqZWN0PWZ0LFUuX3NldFNjaGVkdWxlcj1zLFUuX3NldEFzYXA9bCxVLl9hc2FwPVEsVS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlUsdGhlbjpudCwiY2F0Y2giOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4obnVsbCx0KX19O3ZhciBtdD1WO1YucHJvdG90eXBlLl92YWxpZGF0aW9uRXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVycm9yKCJBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXkiKX0sVi5wcm90b3R5cGUuX2VudW1lcmF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmxlbmd0aCxlPXRoaXMuX2lucHV0LHI9MDt0aGlzLl9zdGF0ZT09PW90JiZ0PnI7cisrKXRoaXMuX2VhY2hFbnRyeShlW3JdLHIpfSxWLnByb3RvdHlwZS5fZWFjaEVudHJ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcixuPXIucmVzb2x2ZTtpZihuPT09aXQpe3ZhciBpPV8odCk7aWYoaT09PW50JiZ0Ll9zdGF0ZSE9PW90KXRoaXMuX3NldHRsZWRBdCh0Ll9zdGF0ZSxlLHQuX3Jlc3VsdCk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgaSl0aGlzLl9yZW1haW5pbmctLSx0aGlzLl9yZXN1bHRbZV09dDtlbHNlIGlmKHI9PT1kdCl7dmFyIG89bmV3IHIoeSk7QShvLHQsaSksdGhpcy5fd2lsbFNldHRsZUF0KG8sZSl9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQobmV3IHIoZnVuY3Rpb24oZSl7ZSh0KX0pLGUpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KG4odCksZSl9LFYucHJvdG90eXBlLl9zZXR0bGVkQXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucHJvbWlzZTtuLl9zdGF0ZT09PW90JiYodGhpcy5fcmVtYWluaW5nLS0sdD09PXN0P0wobixyKTp0aGlzLl9yZXN1bHRbZV09ciksMD09PXRoaXMuX3JlbWFpbmluZyYmUyhuLHRoaXMuX3Jlc3VsdCl9LFYucHJvdG90eXBlLl93aWxsU2V0dGxlQXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO3oodCx2b2lkIDAsZnVuY3Rpb24odCl7ci5fc2V0dGxlZEF0KGF0LGUsdCl9LGZ1bmN0aW9uKHQpe3IuX3NldHRsZWRBdChzdCxlLHQpfSl9O3ZhciBndD1xLHZ0PXtQcm9taXNlOmR0LHBvbHlmaWxsOmd0fTsiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChmdW5jdGlvbigpe3JldHVybiB2dH0pOiJ1bmRlZmluZWQiIT10eXBlb2YgciYmci5leHBvcnRzP3IuZXhwb3J0cz12dDoidW5kZWZpbmVkIiE9dHlwZW9mIHRoaXMmJih0aGlzLkVTNlByb21pc2U9dnQpLGd0KCl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGUoIl9wcm9jZXNzIiksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtfcHJvY2Vzczo1OX1dLDEyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49MDtyPm47bisrKWlmKGU9dC5jaGFyQ29kZUF0KG4pLCg5PmV8fGU+MTMpJiYzMiE9PWUmJjEzMyE9PWUmJjE2MCE9PWUmJjU3NjAhPT1lJiY2MTU4IT09ZSYmKDgxOTI+ZXx8ZT44MjA1KSYmODIzMiE9PWUmJjgyMzMhPT1lJiY4MjM5IT09ZSYmODI4NyE9PWUmJjgyODghPT1lJiYxMjI4OCE9PWUmJjY1Mjc5IT09ZSlyZXR1cm4hMTtyZXR1cm4hMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7aWYoInN0cmluZyI9PT1lKXt2YXIgcj10O2lmKHQ9K3QsMD09PXQmJm4ocikpcmV0dXJuITF9ZWxzZSBpZigibnVtYmVyIiE9PWUpcmV0dXJuITE7cmV0dXJuIDE+dC10fX0se31dLDEyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSl7dGhpcy5nbD10LHRoaXMudHlwZT1lLHRoaXMuaGFuZGxlPXIsdGhpcy5sZW5ndGg9bix0aGlzLnVzYWdlPWl9ZnVuY3Rpb24gaSh0LGUscixuLGksbyl7dmFyIGE9aS5sZW5ndGgqaS5CWVRFU19QRVJfRUxFTUVOVDtpZigwPm8pcmV0dXJuIHQuYnVmZmVyRGF0YShlLGksbiksYTtpZihhK28+cil0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSWYgcmVzaXppbmcgYnVmZmVyLCBtdXN0IG5vdCBzcGVjaWZ5IG9mZnNldCIpO3JldHVybiB0LmJ1ZmZlclN1YkRhdGEoZSxvLGkpLHJ9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj1sLm1hbGxvYyh0Lmxlbmd0aCxlKSxuPXQubGVuZ3RoLGk9MDtuPmk7KytpKXJbaV09dFtpXTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTEsbj1lLmxlbmd0aC0xO24+PTA7LS1uKXtpZihlW25dIT09cilyZXR1cm4hMTtyKj10W25dfXJldHVybiEwfWZ1bmN0aW9uIHModCxlLHIsaSl7aWYocj1yfHx0LkFSUkFZX0JVRkZFUixpPWl8fHQuRFlOQU1JQ19EUkFXLHIhPT10LkFSUkFZX0JVRkZFUiYmciE9PXQuRUxFTUVOVF9BUlJBWV9CVUZGRVIpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgdHlwZSBmb3Igd2ViZ2wgYnVmZmVyLCBtdXN0IGJlIGVpdGhlciBnbC5BUlJBWV9CVUZGRVIgb3IgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIiKTtpZihpIT09dC5EWU5BTUlDX0RSQVcmJmkhPT10LlNUQVRJQ19EUkFXJiZpIT09dC5TVFJFQU1fRFJBVyl0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSW52YWxpZCB1c2FnZSBmb3IgYnVmZmVyLCBtdXN0IGJlIGVpdGhlciBnbC5EWU5BTUlDX0RSQVcsIGdsLlNUQVRJQ19EUkFXIG9yIGdsLlNUUkVBTV9EUkFXIik7dmFyIG89dC5jcmVhdGVCdWZmZXIoKSxhPW5ldyBuKHQscixvLDAsaSk7cmV0dXJuIGEudXBkYXRlKGUpLGF9dmFyIGw9dCgidHlwZWRhcnJheS1wb29sIiksdT10KCJuZGFycmF5LW9wcyIpLGM9dCgibmRhcnJheSIpLGg9WyJ1aW50OCIsInVpbnQ4X2NsYW1wZWQiLCJ1aW50MTYiLCJ1aW50MzIiLCJpbnQ4IiwiaW50MTYiLCJpbnQzMiIsImZsb2F0MzIiXSxmPW4ucHJvdG90eXBlO2YuYmluZD1mdW5jdGlvbigpe3RoaXMuZ2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsdGhpcy5oYW5kbGUpfSxmLnVuYmluZD1mdW5jdGlvbigpe3RoaXMuZ2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsbnVsbCl9LGYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaGFuZGxlKX0sZi51cGRhdGU9ZnVuY3Rpb24odCxlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUmJihlPS0xKSx0aGlzLmJpbmQoKSwib2JqZWN0Ij09dHlwZW9mIHQmJiJ1bmRlZmluZWQiIT10eXBlb2YgdC5zaGFwZSl7dmFyIHI9dC5kdHlwZTtpZihoLmluZGV4T2Yocik8MCYmKHI9ImZsb2F0MzIiKSx0aGlzLnR5cGU9PT10aGlzLmdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSKXt2YXIgbj1nbC5nZXRFeHRlbnNpb24oIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKTtyPW4mJiJ1aW50MTYiIT09cj8idWludDMyIjoidWludDE2In1pZihyPT09dC5kdHlwZSYmYSh0LnNoYXBlLHQuc3RyaWRlKSkwPT09dC5vZmZzZXQmJnQuZGF0YS5sZW5ndGg9PT10LnNoYXBlWzBdP3RoaXMubGVuZ3RoPWkodGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LmRhdGEsZSk6dGhpcy5sZW5ndGg9aSh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQuZGF0YS5zdWJhcnJheSh0Lm9mZnNldCx0LnNoYXBlWzBdKSxlKTtlbHNle3ZhciBzPWwubWFsbG9jKHQuc2l6ZSxyKSxmPWMocyx0LnNoYXBlKTt1LmFzc2lnbihmLHQpLDA+ZT90aGlzLmxlbmd0aD1pKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UscyxlKTp0aGlzLmxlbmd0aD1pKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2Uscy5zdWJhcnJheSgwLHQuc2l6ZSksZSksbC5mcmVlKHMpfX1lbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBwO3A9dGhpcy50eXBlPT09dGhpcy5nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUj9vKHQsInVpbnQxNiIpOm8odCwiZmxvYXQzMiIpLDA+ZT90aGlzLmxlbmd0aD1pKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UscCxlKTp0aGlzLmxlbmd0aD1pKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UscC5zdWJhcnJheSgwLHQubGVuZ3RoKSxlKSxsLmZyZWUocCl9ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpdGhpcy5sZW5ndGg9aSh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQsZSk7ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIHQmJnZvaWQgMCE9PXQpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgZGF0YSB0eXBlIik7aWYoZT49MCl0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogQ2Fubm90IHNwZWNpZnkgb2Zmc2V0IHdoZW4gcmVzaXppbmcgYnVmZmVyIik7dD0wfHQsMD49dCYmKHQ9MSksdGhpcy5nbC5idWZmZXJEYXRhKHRoaXMudHlwZSwwfHQsdGhpcy51c2FnZSksdGhpcy5sZW5ndGg9dH19LGUuZXhwb3J0cz1zfSx7bmRhcnJheTo0NTYsIm5kYXJyYXktb3BzIjo0NTUsInR5cGVkYXJyYXktcG9vbCI6NDgxfV0sMTMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMucGxvdD10LHRoaXMuc2hhZGVyPWUsdGhpcy5idWZmZXI9cix0aGlzLmJvdW5kcz1bMS8wLDEvMCwtKDEvMCksLSgxLzApXSx0aGlzLm51bVBvaW50cz0wLHRoaXMuY29sb3I9WzAsMCwwLDFdfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj1vKHQuZ2wsbC52ZXJ0ZXgsbC5mcmFnbWVudCksaT1hKHQuZ2wpLHM9bmV3IG4odCxyLGkpO3JldHVybiBzLnVwZGF0ZShlKSx0LmFkZE9iamVjdChzKSxzfXZhciBvPXQoImdsLXNoYWRlciIpLGE9dCgiZ2wtYnVmZmVyIikscz10KCJ0eXBlZGFycmF5LXBvb2wiKSxsPXQoIi4vbGliL3NoYWRlcnMiKTtlLmV4cG9ydHM9aTt2YXIgdT1bWzEsMCwwLDEsMCwwXSxbMSwwLDAsLTEsMCwwXSxbLTEsMCwwLC0xLDAsMF0sWy0xLDAsMCwtMSwwLDBdLFstMSwwLDAsMSwwLDBdLFsxLDAsMCwxLDAsMF0sWzEsMCwtMSwwLDAsMV0sWzEsMCwtMSwwLDAsLTFdLFsxLDAsMSwwLDAsLTFdLFsxLDAsMSwwLDAsLTFdLFsxLDAsMSwwLDAsMV0sWzEsMCwtMSwwLDAsMV0sWy0xLDAsLTEsMCwwLDFdLFstMSwwLC0xLDAsMCwtMV0sWy0xLDAsMSwwLDAsLTFdLFstMSwwLDEsMCwwLC0xXSxbLTEsMCwxLDAsMCwxXSxbLTEsMCwtMSwwLDAsMV0sWzAsMSwxLDAsMCwwXSxbMCwxLC0xLDAsMCwwXSxbMCwtMSwtMSwwLDAsMF0sWzAsLTEsLTEsMCwwLDBdLFswLDEsMSwwLDAsMF0sWzAsLTEsMSwwLDAsMF0sWzAsMSwwLC0xLDEsMF0sWzAsMSwwLC0xLC0xLDBdLFswLDEsMCwxLC0xLDBdLFswLDEsMCwxLDEsMF0sWzAsMSwwLC0xLDEsMF0sWzAsMSwwLDEsLTEsMF0sWzAsLTEsMCwtMSwxLDBdLFswLC0xLDAsLTEsLTEsMF0sWzAsLTEsMCwxLC0xLDBdLFswLC0xLDAsMSwxLDBdLFswLC0xLDAsLTEsMSwwXSxbMCwtMSwwLDEsLTEsMF1dLGM9bi5wcm90b3R5cGU7Yy5kcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9WzEsMCwwLDAsMSwwLDAsMCwxXSxlPVsxLDFdO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMucGxvdCxuPXRoaXMuc2hhZGVyLGk9dGhpcy5idWZmZXIsbz10aGlzLmJvdW5kcyxhPXRoaXMubnVtUG9pbnRzO2lmKGEpe3ZhciBzPXIuZ2wsbD1yLmRhdGFCb3gsYz1yLnZpZXdCb3gsaD1yLnBpeGVsUmF0aW8sZj1vWzJdLW9bMF0scD1vWzNdLW9bMV0sZD1sWzJdLWxbMF0sbT1sWzNdLWxbMV07dFswXT0yKmYvZCx0WzRdPTIqcC9tLHRbNl09Mioob1swXS1sWzBdKS9kLTEsdFs3XT0yKihvWzFdLWxbMV0pL20tMTt2YXIgZz1jWzJdLWNbMF0sdj1jWzNdLWNbMV07ZVswXT0yKmgvZyxlWzFdPTIqaC92LGkuYmluZCgpLG4uYmluZCgpLG4udW5pZm9ybXMudmlld1RyYW5zZm9ybT10LG4udW5pZm9ybXMucGl4ZWxTY2FsZT1lLG4udW5pZm9ybXMuY29sb3I9dGhpcy5jb2xvcixuLmF0dHJpYnV0ZXMucG9zaXRpb24ucG9pbnRlcihzLkZMT0FULCExLDE2LDApLG4uYXR0cmlidXRlcy5waXhlbE9mZnNldC5wb2ludGVyKHMuRkxPQVQsITEsMTYsOCkscy5kcmF3QXJyYXlzKHMuVFJJQU5HTEVTLDAsYSp1Lmxlbmd0aCl9fX0oKSxjLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxjLnBpY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbH0sYy51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZSxyLG4saT10LnBvc2l0aW9uc3x8W10sbz10LmVycm9yc3x8W10sYT0xOyJsaW5lV2lkdGgiaW4gdCYmKGE9K3QubGluZVdpZHRoKTt2YXIgbD01OyJjYXBTaXplImluIHQmJihsPSt0LmNhcFNpemUpLHRoaXMuY29sb3I9KHQuY29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKTt2YXIgYz10aGlzLmJvdW5kcz1bMS8wLDEvMCwtKDEvMCksLSgxLzApXSxoPXRoaXMubnVtUG9pbnRzPWkubGVuZ3RoPj4xO2ZvcihlPTA7aD5lOysrZSlyPWlbMiplXSxuPWlbMiplKzFdLGNbMF09TWF0aC5taW4ocixjWzBdKSxjWzFdPU1hdGgubWluKG4sY1sxXSksY1syXT1NYXRoLm1heChyLGNbMl0pLGNbM109TWF0aC5tYXgobixjWzNdKTtjWzJdPT09Y1swXSYmKGNbMl0rPTEpLGNbM109PT1jWzFdJiYoY1szXSs9MSk7dmFyIGY9MS8oY1syXS1jWzBdKSxwPTEvKGNbM10tY1sxXSksZD1jWzBdLG09Y1sxXSxnPXMubWFsbG9jRmxvYXQzMihoKnUubGVuZ3RoKjQpLHY9MDtmb3IoZT0wO2g+ZTsrK2Upe3I9aVsyKmVdLG49aVsyKmUrMV07Zm9yKHZhciB5PW9bNCplXSxiPW9bNCplKzFdLHg9b1s0KmUrMl0sXz1vWzQqZSszXSx3PTA7dzx1Lmxlbmd0aDsrK3cpe3ZhciBNPXVbd10saz1NWzBdLEE9TVsxXTswPms/ayo9eTprPjAmJihrKj1iKSwwPkE/QSo9eDpBPjAmJihBKj1fKSxnW3YrK109Ziooci1kK2spLGdbdisrXT1wKihuLW0rQSksZ1t2KytdPWEqTVsyXSsobCthKSpNWzRdLGdbdisrXT1hKk1bM10rKGwrYSkqTVs1XX19dGhpcy5idWZmZXIudXBkYXRlKGcpLHMuZnJlZShnKX0sYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKSx0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpfX0seyIuL2xpYi9zaGFkZXJzIjoxMzEsImdsLWJ1ZmZlciI6MTI5LCJnbC1zaGFkZXIiOjIwOCwidHlwZWRhcnJheS1wb29sIjo0ODF9XSwxMzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e3ZlcnRleDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMyIHBpeGVsT2Zmc2V0O1xuXG51bmlmb3JtIG1hdDMgdmlld1RyYW5zZm9ybTtcbnVuaWZvcm0gdmVjMiBwaXhlbFNjYWxlO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgc2NyUG9zaXRpb24gPSB2aWV3VHJhbnNmb3JtICogdmVjMyhwb3NpdGlvbiwgMSk7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChcbiAgICBzY3JQb3NpdGlvbi54eSArIHNjclBvc2l0aW9uLnogKiBwaXhlbFNjYWxlICogcGl4ZWxPZmZzZXQsXG4gICAgMCxcbiAgICBzY3JQb3NpdGlvbi56KTtcbn1cbiIsZnJhZ21lbnQ6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogY29sb3IuYSwgY29sb3IuYSk7XG59XG4ifX0se31dLDEzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1uLHRoaXMuYnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLSgxLzApLC0oMS8wKSwtKDEvMCldXSx0aGlzLmNsaXBCb3VuZHM9W1stKDEvMCksLSgxLzApLC0oMS8wKV0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXSx0aGlzLmNhcFNpemU9WzEwLDEwLDEwXSx0aGlzLmxpbmVDb3VudD1bMCwwLDBdLHRoaXMubGluZU9mZnNldD1bMCwwLDBdLHRoaXMub3BhY2l0eT0xfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9MDszPnI7KytyKXRbMF1bcl09TWF0aC5taW4odFswXVtyXSxlW3JdKSx0WzFdW3JdPU1hdGgubWF4KHRbMV1bcl0sZVtyXSl9ZnVuY3Rpb24gbyh0LGUscixuKXtmb3IodmFyIGk9ZltuXSxvPTA7bzxpLmxlbmd0aDsrK28pe3ZhciBhPWlbb107dC5wdXNoKGVbMF0sZVsxXSxlWzJdLHJbMF0sclsxXSxyWzJdLHJbM10sYVswXSxhWzFdLGFbMl0pfXJldHVybiBpLmxlbmd0aH1mdW5jdGlvbiBhKHQpe3ZhciBlPXQuZ2wscj1zKGUpLGk9bChlLFt7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTo0LG9mZnNldDoxMixzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTozLG9mZnNldDoyOCxzdHJpZGU6NDB9XSksbz11KGUpO28uYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG8uYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0xLG8uYXR0cmlidXRlcy5vZmZzZXQubG9jYXRpb249Mjt2YXIgYT1uZXcgbihlLHIsaSxvKTtyZXR1cm4gYS51cGRhdGUodCksYX1lLmV4cG9ydHM9YTt2YXIgcz10KCJnbC1idWZmZXIiKSxsPXQoImdsLXZhbyIpLHU9dCgiLi9zaGFkZXJzL2luZGV4IiksYz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0saD1uLnByb3RvdHlwZTtoLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eT49MX0saC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eTwxfSxoLmRyYXdUcmFuc3BhcmVudD1oLmRyYXc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMuc2hhZGVyLnVuaWZvcm1zO3RoaXMuc2hhZGVyLmJpbmQoKTt2YXIgbj1yLnZpZXc9dC52aWV3fHxjLGk9ci5wcm9qZWN0aW9uPXQucHJvamVjdGlvbnx8YztyLm1vZGVsPXQubW9kZWx8fGMsci5jbGlwQm91bmRzPXRoaXMuY2xpcEJvdW5kcyxyLm9wYWNpdHk9dGhpcy5vcGFjaXR5O3ZhciBvPW5bMTJdLGE9blsxM10scz1uWzE0XSxsPW5bMTVdLHU9dGhpcy5waXhlbFJhdGlvKihpWzNdKm8raVs3XSphK2lbMTFdKnMraVsxNV0qbCkvZS5kcmF3aW5nQnVmZmVySGVpZ2h0O3RoaXMudmFvLmJpbmQoKTtmb3IodmFyIGg9MDszPmg7KytoKWUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoW2hdKSxyLmNhcFNpemU9dGhpcy5jYXBTaXplW2hdKnUsZS5kcmF3QXJyYXlzKGUuTElORVMsdGhpcy5saW5lT2Zmc2V0W2hdLHRoaXMubGluZUNvdW50W2hdKTt0aGlzLnZhby51bmJpbmQoKX07dmFyIGY9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IEFycmF5KDMpLGU9MDszPmU7KytlKXtmb3IodmFyIHI9W10sbj0xOzI+PW47KytuKWZvcih2YXIgaT0tMTsxPj1pO2krPTIpe3ZhciBvPShuK2UpJTMsYT1bMCwwLDBdO2Fbb109aSxyLnB1c2goYSl9dFtlXT1yfXJldHVybiB0fSgpO2gudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgsQXJyYXkuaXNBcnJheSh0aGlzLmxpbmVXaWR0aCl8fCh0aGlzLmxpbmVXaWR0aD1bdGhpcy5saW5lV2lkdGgsdGhpcy5saW5lV2lkdGgsdGhpcy5saW5lV2lkdGhdKSksImNhcFNpemUiaW4gdCYmKHRoaXMuY2FwU2l6ZT10LmNhcFNpemUsQXJyYXkuaXNBcnJheSh0aGlzLmNhcFNpemUpfHwodGhpcy5jYXBTaXplPVt0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplLHRoaXMuY2FwU2l6ZV0pKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSk7dmFyIGU9dC5jb2xvcnx8W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxyPXQucG9zaXRpb24sbj10LmVycm9yO2lmKEFycmF5LmlzQXJyYXkoZVswXSl8fChlPVtlLGUsZV0pLHImJm4pe3ZhciBhPVtdLHM9ci5sZW5ndGgsbD0wO3RoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstKDEvMCksLSgxLzApLC0oMS8wKV1dLHRoaXMubGluZUNvdW50PVswLDAsMF07Zm9yKHZhciB1PTA7Mz51OysrdSl7dGhpcy5saW5lT2Zmc2V0W3VdPWw7dDpmb3IodmFyIGM9MDtzPmM7KytjKXtmb3IodmFyIGg9cltjXSxmPTA7Mz5mOysrZilpZihpc05hTihoW2ZdKXx8IWlzRmluaXRlKGhbZl0pKWNvbnRpbnVlIHQ7dmFyIHA9bltjXSxkPWVbdV07aWYoQXJyYXkuaXNBcnJheShkWzBdKSYmKGQ9ZVtjXSksMz09PWQubGVuZ3RoJiYoZD1bZFswXSxkWzFdLGRbMl0sMV0pLCFpc05hTihwWzBdW3VdKSYmIWlzTmFOKHBbMV1bdV0pKXtpZihwWzBdW3VdPDApe3ZhciBtPWguc2xpY2UoKTttW3VdKz1wWzBdW3VdLGEucHVzaChoWzBdLGhbMV0saFsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwLG1bMF0sbVsxXSxtWzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDApLGkodGhpcy5ib3VuZHMsbSksbCs9MitvKGEsbSxkLHUpfWlmKHBbMV1bdV0+MCl7dmFyIG09aC5zbGljZSgpO21bdV0rPXBbMV1bdV0sYS5wdXNoKGhbMF0saFsxXSxoWzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDAsbVswXSxtWzFdLG1bMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCksaSh0aGlzLmJvdW5kcyxtKSxsKz0yK28oYSxtLGQsdSl9fX10aGlzLmxpbmVDb3VudFt1XT1sLXRoaXMubGluZU9mZnNldFt1XX10aGlzLmJ1ZmZlci51cGRhdGUoYSl9fSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzL2luZGV4IjoxMzMsImdsLWJ1ZmZlciI6MTI5LCJnbC12YW8iOjIzN31dLDEzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBvZmZzZXQ7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgY2FwU2l6ZTtcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzMgZnJhZ1Bvc2l0aW9uO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzQgd29ybGRQb3NpdGlvbiAgPSBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIHdvcmxkUG9zaXRpb24gICAgICAgPSAod29ybGRQb3NpdGlvbiAvIHdvcmxkUG9zaXRpb24udykgKyB2ZWM0KGNhcFNpemUgKiBvZmZzZXQsIDAuMCk7XG4gIGdsX1Bvc2l0aW9uICAgICAgICAgPSBwcm9qZWN0aW9uICogdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIGZyYWdDb2xvciAgICAgICAgICAgPSBjb2xvcjtcbiAgZnJhZ1Bvc2l0aW9uICAgICAgICA9IHBvc2l0aW9uO1xufSIsbz0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgZnJhZ1Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4oZnJhZ1Bvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgYW55KGdyZWF0ZXJUaGFuKGZyYWdQb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSBvcGFjaXR5ICogZnJhZ0NvbG9yO1xufSI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsaSxvLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJvZmZzZXQiLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifV0pfX0seyJnbC1zaGFkZXIiOjIwOH1dLDEzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXQuZ2V0UGFyYW1ldGVyKHQuRlJBTUVCVUZGRVJfQklORElORykscj10LmdldFBhcmFtZXRlcih0LlJFTkRFUkJVRkZFUl9CSU5ESU5HKSxuPXQuZ2V0UGFyYW1ldGVyKHQuVEVYVFVSRV9CSU5ESU5HXzJEKTtyZXR1cm5bZSxyLG5dfWZ1bmN0aW9uIGkodCxlKXt0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLGVbMF0pLHQuYmluZFJlbmRlcmJ1ZmZlcih0LlJFTkRFUkJVRkZFUixlWzFdKSx0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxlWzJdKX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dC5nZXRQYXJhbWV0ZXIoZS5NQVhfQ09MT1JfQVRUQUNITUVOVFNfV0VCR0wpO3k9bmV3IEFycmF5KHIrMSk7Zm9yKHZhciBuPTA7cj49bjsrK24pe2Zvcih2YXIgaT1uZXcgQXJyYXkociksbz0wO24+bzsrK28paVtvXT10LkNPTE9SX0FUVEFDSE1FTlQwK287Zm9yKHZhciBvPW47cj5vOysrbylpW29dPXQuTk9ORTt5W25dPWl9fWZ1bmN0aW9uIGEodCl7c3dpdGNoKHQpe2Nhc2UgZDp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgdW5zdXBwb3J0ZWQiKTtjYXNlIG06dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgYXR0YWNobWVudCIpO2Nhc2UgZzp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBkaW1lbnNpb25zIik7Y2FzZSB2OnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIG1pc3NpbmcgYXR0YWNobWVudCIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGZhaWxlZCBmb3IgdW5zcGVjaWZpZWQgcmVhc29uIil9fWZ1bmN0aW9uIHModCxlLHIsbixpLG8pe2lmKCFuKXJldHVybiBudWxsO3ZhciBhPXAodCxlLHIsaSxuKTtyZXR1cm4gYS5tYWdGaWx0ZXI9dC5ORUFSRVNULGEubWluRmlsdGVyPXQuTkVBUkVTVCxhLm1pcFNhbXBsZXM9MSxhLmJpbmQoKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKHQuRlJBTUVCVUZGRVIsbyx0LlRFWFRVUkVfMkQsYS5oYW5kbGUsMCksYX1mdW5jdGlvbiBsKHQsZSxyLG4saSl7dmFyIG89dC5jcmVhdGVSZW5kZXJidWZmZXIoKTtyZXR1cm4gdC5iaW5kUmVuZGVyYnVmZmVyKHQuUkVOREVSQlVGRkVSLG8pLHQucmVuZGVyYnVmZmVyU3RvcmFnZSh0LlJFTkRFUkJVRkZFUixuLGUsciksdC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0LkZSQU1FQlVGRkVSLGksdC5SRU5ERVJCVUZGRVIsbyksb31mdW5jdGlvbiB1KHQpe3ZhciBlPW4odC5nbCkscj10LmdsLG89dC5oYW5kbGU9ci5jcmVhdGVGcmFtZWJ1ZmZlcigpLHU9dC5fc2hhcGVbMF0sYz10Ll9zaGFwZVsxXSxoPXQuY29sb3IubGVuZ3RoLGY9dC5fZXh0LHA9dC5fdXNlU3RlbmNpbCxkPXQuX3VzZURlcHRoLG09dC5fY29sb3JUeXBlO3IuYmluZEZyYW1lYnVmZmVyKHIuRlJBTUVCVUZGRVIsbyk7Zm9yKHZhciBnPTA7aD5nOysrZyl0LmNvbG9yW2ddPXMocix1LGMsbSxyLlJHQkEsci5DT0xPUl9BVFRBQ0hNRU5UMCtnKTswPT09aD8odC5fY29sb3JfcmI9bChyLHUsYyxyLlJHQkE0LHIuQ09MT1JfQVRUQUNITUVOVDApLGYmJmYuZHJhd0J1ZmZlcnNXRUJHTCh5WzBdKSk6aD4xJiZmLmRyYXdCdWZmZXJzV0VCR0woeVtoXSk7dmFyIHY9ci5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKTt2P3A/dC5kZXB0aD1zKHIsdSxjLHYuVU5TSUdORURfSU5UXzI0XzhfV0VCR0wsci5ERVBUSF9TVEVOQ0lMLHIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTpkJiYodC5kZXB0aD1zKHIsdSxjLHIuVU5TSUdORURfU0hPUlQsci5ERVBUSF9DT01QT05FTlQsci5ERVBUSF9BVFRBQ0hNRU5UKSk6ZCYmcD90Ll9kZXB0aF9yYj1sKHIsdSxjLHIuREVQVEhfU1RFTkNJTCxyLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk6ZD90Ll9kZXB0aF9yYj1sKHIsdSxjLHIuREVQVEhfQ09NUE9ORU5UMTYsci5ERVBUSF9BVFRBQ0hNRU5UKTpwJiYodC5fZGVwdGhfcmI9bChyLHUsYyxyLlNURU5DSUxfSU5ERVgsci5TVEVOQ0lMX0FUVEFDSE1FTlQpKTt2YXIgYj1yLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoci5GUkFNRUJVRkZFUik7aWYoYiE9PXIuRlJBTUVCVUZGRVJfQ09NUExFVEUpe3QuX2Rlc3Ryb3llZD0hMCxyLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLG51bGwpLHIuZGVsZXRlRnJhbWVidWZmZXIodC5oYW5kbGUpLHQuaGFuZGxlPW51bGwsdC5kZXB0aCYmKHQuZGVwdGguZGlzcG9zZSgpLHQuZGVwdGg9bnVsbCksdC5fZGVwdGhfcmImJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0Ll9kZXB0aF9yYiksdC5fZGVwdGhfcmI9bnVsbCk7Zm9yKHZhciBnPTA7Zzx0LmNvbG9yLmxlbmd0aDsrK2cpdC5jb2xvcltnXS5kaXNwb3NlKCksdC5jb2xvcltnXT1udWxsO3QuX2NvbG9yX3JiJiYoci5kZWxldGVSZW5kZXJidWZmZXIodC5fY29sb3JfcmIpLHQuX2NvbG9yX3JiPW51bGwpLGkocixlKSxhKGIpfWkocixlKX1mdW5jdGlvbiBjKHQsZSxyLG4saSxvLGEscyl7dGhpcy5nbD10LHRoaXMuX3NoYXBlPVswfGUsMHxyXSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZXh0PXMsdGhpcy5jb2xvcj1uZXcgQXJyYXkoaSk7Zm9yKHZhciBsPTA7aT5sOysrbCl0aGlzLmNvbG9yW2xdPW51bGw7dGhpcy5fY29sb3JfcmI9bnVsbCx0aGlzLmRlcHRoPW51bGwsdGhpcy5fZGVwdGhfcmI9bnVsbCx0aGlzLl9jb2xvclR5cGU9bix0aGlzLl91c2VEZXB0aD1vLHRoaXMuX3VzZVN0ZW5jaWw9YTt2YXIgYz10aGlzLGg9WzB8ZSwwfHJdO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGgsezA6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLndpZHRoPXR9fSwxOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5oZWlnaHQ9dH19fSksdGhpcy5fc2hhcGVWZWN0b3I9aCx1KHRoaXMpfWZ1bmN0aW9uIGgodCxlLHIpe2lmKHQuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ2FuJ3QgcmVzaXplIGRlc3Ryb3llZCBGQk8iKTtpZih0Ll9zaGFwZVswXSE9PWV8fHQuX3NoYXBlWzFdIT09cil7dmFyIG89dC5nbCxzPW8uZ2V0UGFyYW1ldGVyKG8uTUFYX1JFTkRFUkJVRkZFUl9TSVpFKTtpZigwPmV8fGU+c3x8MD5yfHxyPnMpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENhbid0IHJlc2l6ZSBGQk8sIGludmFsaWQgZGltZW5zaW9ucyIpO3QuX3NoYXBlWzBdPWUsdC5fc2hhcGVbMV09cjtmb3IodmFyIGw9bihvKSx1PTA7dTx0LmNvbG9yLmxlbmd0aDsrK3UpdC5jb2xvclt1XS5zaGFwZT10Ll9zaGFwZTt0Ll9jb2xvcl9yYiYmKG8uYmluZFJlbmRlcmJ1ZmZlcihvLlJFTkRFUkJVRkZFUix0Ll9jb2xvcl9yYiksby5yZW5kZXJidWZmZXJTdG9yYWdlKG8uUkVOREVSQlVGRkVSLG8uUkdCQTQsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pKSx0LmRlcHRoJiYodC5kZXB0aC5zaGFwZT10Ll9zaGFwZSksdC5fZGVwdGhfcmImJihvLmJpbmRSZW5kZXJidWZmZXIoby5SRU5ERVJCVUZGRVIsdC5fZGVwdGhfcmIpLHQuX3VzZURlcHRoJiZ0Ll91c2VTdGVuY2lsP28ucmVuZGVyYnVmZmVyU3RvcmFnZShvLlJFTkRFUkJVRkZFUixvLkRFUFRIX1NURU5DSUwsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pOnQuX3VzZURlcHRoP28ucmVuZGVyYnVmZmVyU3RvcmFnZShvLlJFTkRFUkJVRkZFUixvLkRFUFRIX0NPTVBPTkVOVDE2LHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKTp0Ll91c2VTdGVuY2lsJiZvLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uoby5SRU5ERVJCVUZGRVIsby5TVEVOQ0lMX0lOREVYLHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKSksby5iaW5kRnJhbWVidWZmZXIoby5GUkFNRUJVRkZFUix0LmhhbmRsZSk7dmFyIGM9by5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKG8uRlJBTUVCVUZGRVIpO2MhPT1vLkZSQU1FQlVGRkVSX0NPTVBMRVRFJiYodC5kaXNwb3NlKCksaShvLGwpLGEoYykpLGkobyxsKX19ZnVuY3Rpb24gZih0LGUscixuKXtkfHwoZD10LkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVELG09dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQsZz10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyx2PXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQpO3ZhciBpPXQuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKTtpZigheSYmaSYmbyh0LGkpLEFycmF5LmlzQXJyYXkoZSkmJihuPXIscj0wfGVbMV0sZT0wfGVbMF0pLCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogTWlzc2luZyBzaGFwZSBwYXJhbWV0ZXIiKTt2YXIgYT10LmdldFBhcmFtZXRlcih0Lk1BWF9SRU5ERVJCVUZGRVJfU0laRSk7aWYoMD5lfHxlPmF8fDA+cnx8cj5hKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBQYXJhbWV0ZXJzIGFyZSB0b28gbGFyZ2UgZm9yIEZCTyIpO249bnx8e307dmFyIHM9MTtpZigiY29sb3IiaW4gbil7aWYocz1NYXRoLm1heCgwfG4uY29sb3IsMCksMD5zKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBNdXN0IHNwZWNpZnkgYSBub25uZWdhdGl2ZSBudW1iZXIgb2YgY29sb3JzIik7aWYocz4xKXtpZighaSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogTXVsdGlwbGUgZHJhdyBidWZmZXIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQiKTtpZihzPnQuZ2V0UGFyYW1ldGVyKGkuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0ICIrcysiIGRyYXcgYnVmZmVycyIpOwp9fXZhciBsPXQuVU5TSUdORURfQllURSx1PXQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdCIpO2lmKG4uZmxvYXQmJnM+MCl7aWYoIXUpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCBmbG9hdGluZyBwb2ludCB0ZXh0dXJlcyIpO2w9dC5GTE9BVH1lbHNlIG4ucHJlZmVyRmxvYXQmJnM+MCYmdSYmKGw9dC5GTE9BVCk7dmFyIGg9ITA7ImRlcHRoImluIG4mJihoPSEhbi5kZXB0aCk7dmFyIGY9ITE7cmV0dXJuInN0ZW5jaWwiaW4gbiYmKGY9ISFuLnN0ZW5jaWwpLG5ldyBjKHQsZSxyLGwscyxoLGYsaSl9dmFyIHA9dCgiZ2wtdGV4dHVyZTJkIik7ZS5leHBvcnRzPWY7dmFyIGQsbSxnLHYseT1udWxsLGI9Yy5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYix7c2hhcGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/WzAsMF06dGhpcy5fc2hhcGVWZWN0b3J9LHNldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpfHwodD1bMHx0LDB8dF0pLDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogU2hhcGUgdmVjdG9yIG11c3QgYmUgbGVuZ3RoIDIiKTt2YXIgZT0wfHRbMF0scj0wfHRbMV07cmV0dXJuIGgodGhpcyxlLHIpLFtlLHJdfSxlbnVtZXJhYmxlOiExfSx3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZD8wOnRoaXMuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9MHx0LGgodGhpcyx0LHRoaXMuX3NoYXBlWzFdKSx0fSxlbnVtZXJhYmxlOiExfSxoZWlnaHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/MDp0aGlzLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0PTB8dCxoKHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH0sZW51bWVyYWJsZTohMX19KSxiLmJpbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVzdHJveWVkKXt2YXIgdD10aGlzLmdsO3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsdGhpcy5oYW5kbGUpLHQudmlld3BvcnQoMCwwLHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKX19LGIuZGlzcG9zZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3RoaXMuX2Rlc3Ryb3llZD0hMDt2YXIgdD10aGlzLmdsO3QuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5oYW5kbGUpLHRoaXMuaGFuZGxlPW51bGwsdGhpcy5kZXB0aCYmKHRoaXMuZGVwdGguZGlzcG9zZSgpLHRoaXMuZGVwdGg9bnVsbCksdGhpcy5fZGVwdGhfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9kZXB0aF9yYiksdGhpcy5fZGVwdGhfcmI9bnVsbCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmNvbG9yLmxlbmd0aDsrK2UpdGhpcy5jb2xvcltlXS5kaXNwb3NlKCksdGhpcy5jb2xvcltlXT1udWxsO3RoaXMuX2NvbG9yX3JiJiYodC5kZWxldGVSZW5kZXJidWZmZXIodGhpcy5fY29sb3JfcmIpLHRoaXMuX2NvbG9yX3JiPW51bGwpfX19LHsiZ2wtdGV4dHVyZTJkIjoyMzN9XSwxMzU6W2Z1bmN0aW9uKHQsZSxyKXtyLmxpbmVWZXJ0ZXg9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgaW52ZXJzZV8xXzAoZmxvYXQgbSkge1xuICByZXR1cm4gMS4wIC8gbTtcbn1cblxubWF0MiBpbnZlcnNlXzFfMChtYXQyIG0pIHtcbiAgcmV0dXJuIG1hdDIobVsxXVsxXSwtbVswXVsxXSxcbiAgICAgICAgICAgICAtbVsxXVswXSwgbVswXVswXSkgLyAobVswXVswXSptWzFdWzFdIC0gbVswXVsxXSptWzFdWzBdKTtcbn1cblxubWF0MyBpbnZlcnNlXzFfMChtYXQzIG0pIHtcbiAgZmxvYXQgYTAwID0gbVswXVswXSwgYTAxID0gbVswXVsxXSwgYTAyID0gbVswXVsyXTtcbiAgZmxvYXQgYTEwID0gbVsxXVswXSwgYTExID0gbVsxXVsxXSwgYTEyID0gbVsxXVsyXTtcbiAgZmxvYXQgYTIwID0gbVsyXVswXSwgYTIxID0gbVsyXVsxXSwgYTIyID0gbVsyXVsyXTtcblxuICBmbG9hdCBiMDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjE7XG4gIGZsb2F0IGIxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjA7XG4gIGZsb2F0IGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMDtcblxuICBmbG9hdCBkZXQgPSBhMDAgKiBiMDEgKyBhMDEgKiBiMTEgKyBhMDIgKiBiMjE7XG5cbiAgcmV0dXJuIG1hdDMoYjAxLCAoLWEyMiAqIGEwMSArIGEwMiAqIGEyMSksIChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpLFxuICAgICAgICAgICAgICBiMTEsIChhMjIgKiBhMDAgLSBhMDIgKiBhMjApLCAoLWExMiAqIGEwMCArIGEwMiAqIGExMCksXG4gICAgICAgICAgICAgIGIyMSwgKC1hMjEgKiBhMDAgKyBhMDEgKiBhMjApLCAoYTExICogYTAwIC0gYTAxICogYTEwKSkgLyBkZXQ7XG59XG5cbm1hdDQgaW52ZXJzZV8xXzAobWF0NCBtKSB7XG4gIGZsb2F0XG4gICAgICBhMDAgPSBtWzBdWzBdLCBhMDEgPSBtWzBdWzFdLCBhMDIgPSBtWzBdWzJdLCBhMDMgPSBtWzBdWzNdLFxuICAgICAgYTEwID0gbVsxXVswXSwgYTExID0gbVsxXVsxXSwgYTEyID0gbVsxXVsyXSwgYTEzID0gbVsxXVszXSxcbiAgICAgIGEyMCA9IG1bMl1bMF0sIGEyMSA9IG1bMl1bMV0sIGEyMiA9IG1bMl1bMl0sIGEyMyA9IG1bMl1bM10sXG4gICAgICBhMzAgPSBtWzNdWzBdLCBhMzEgPSBtWzNdWzFdLCBhMzIgPSBtWzNdWzJdLCBhMzMgPSBtWzNdWzNdLFxuXG4gICAgICBiMDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTAsXG4gICAgICBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXG4gICAgICBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTAsXG4gICAgICBiMDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTEsXG4gICAgICBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXG4gICAgICBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTIsXG4gICAgICBiMDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzAsXG4gICAgICBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXG4gICAgICBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzAsXG4gICAgICBiMDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzEsXG4gICAgICBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXG4gICAgICBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzIsXG5cbiAgICAgIGRldCA9IGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcblxuICByZXR1cm4gbWF0NChcbiAgICAgIGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSxcbiAgICAgIGEwMiAqIGIxMCAtIGEwMSAqIGIxMSAtIGEwMyAqIGIwOSxcbiAgICAgIGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMyxcbiAgICAgIGEyMiAqIGIwNCAtIGEyMSAqIGIwNSAtIGEyMyAqIGIwMyxcbiAgICAgIGExMiAqIGIwOCAtIGExMCAqIGIxMSAtIGExMyAqIGIwNyxcbiAgICAgIGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNyxcbiAgICAgIGEzMiAqIGIwMiAtIGEzMCAqIGIwNSAtIGEzMyAqIGIwMSxcbiAgICAgIGEyMCAqIGIwNSAtIGEyMiAqIGIwMiArIGEyMyAqIGIwMSxcbiAgICAgIGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNixcbiAgICAgIGEwMSAqIGIwOCAtIGEwMCAqIGIxMCAtIGEwMyAqIGIwNixcbiAgICAgIGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCxcbiAgICAgIGEyMSAqIGIwMiAtIGEyMCAqIGIwNCAtIGEyMyAqIGIwMCxcbiAgICAgIGExMSAqIGIwNyAtIGExMCAqIGIwOSAtIGExMiAqIGIwNixcbiAgICAgIGEwMCAqIGIwOSAtIGEwMSAqIGIwNyArIGEwMiAqIGIwNixcbiAgICAgIGEzMSAqIGIwMSAtIGEzMCAqIGIwMyAtIGEzMiAqIGIwMCxcbiAgICAgIGEyMCAqIGIwMyAtIGEyMSAqIGIwMSArIGEyMiAqIGIwMCkgLyBkZXQ7XG59XG5cblxuXG5hdHRyaWJ1dGUgdmVjMiBhLCBkO1xuXG51bmlmb3JtIG1hdDMgbWF0cml4O1xudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xudW5pZm9ybSBmbG9hdCB3aWR0aDtcblxudmFyeWluZyB2ZWMyIGRpcmVjdGlvbjtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIGRpciA9IChtYXRyaXggKiB2ZWMzKGQsIDApKS54eTtcbiAgdmVjMyBiYXNlID0gbWF0cml4ICogdmVjMyhhLCAxKTtcbiAgdmVjMiBuID0gMC41ICogd2lkdGggKlxuICAgIG5vcm1hbGl6ZShzY3JlZW5TaGFwZS55eCAqIHZlYzIoZGlyLnksIC1kaXIueCkpIC8gc2NyZWVuU2hhcGUueHk7XG4gIHZlYzIgdGFuZ2VudCA9IG5vcm1hbGl6ZShzY3JlZW5TaGFwZS54eSAqIGRpcik7XG4gIGlmKGRpci54IDwgMC4wIHx8IChkaXIueCA9PSAwLjAgJiYgZGlyLnkgPCAwLjApKSB7XG4gICAgZGlyZWN0aW9uID0gLXRhbmdlbnQ7XG4gIH0gZWxzZSB7XG4gICAgZGlyZWN0aW9uID0gdGFuZ2VudDtcbiAgfVxuICBnbF9Qb3NpdGlvbiA9IHZlYzQoYmFzZS54eS9iYXNlLnogKyBuLCAwLCAxKTtcbn1cbiIsci5saW5lRnJhZ21lbnQ9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xudW5pZm9ybSBzYW1wbGVyMkQgZGFzaFBhdHRlcm47XG51bmlmb3JtIGZsb2F0IGRhc2hMZW5ndGg7XG5cbnZhcnlpbmcgdmVjMiBkaXJlY3Rpb247XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgdCA9IGZyYWN0KGRvdChkaXJlY3Rpb24sIGdsX0ZyYWdDb29yZC54eSkgLyBkYXNoTGVuZ3RoKTtcbiAgdmVjNCBwY29sb3IgPSBjb2xvciAqIHRleHR1cmUyRChkYXNoUGF0dGVybiwgdmVjMih0LCAwLjApKS5yO1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBjb2xvci5yZ2IgKiBwY29sb3IuYSwgcGNvbG9yLmEpO1xufVxuIixyLm1pdHJlVmVydGV4PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHA7XG5cbnVuaWZvcm0gbWF0MyAgbWF0cml4O1xudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xudW5pZm9ybSBmbG9hdCByYWRpdXM7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBwcCA9IG1hdHJpeCAqIHZlYzMocCwgMSk7XG4gIGdsX1Bvc2l0aW9uICA9IHZlYzQocHAueHksIDAsIHBwLnopO1xuICBnbF9Qb2ludFNpemUgPSByYWRpdXM7XG59XG4iLHIubWl0cmVGcmFnbWVudD0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYobGVuZ3RoKGdsX1BvaW50Q29vcmQueHkgLSAwLjUpID4gMC4yNSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IsIGNvbG9yLmEpO1xufVxuIixyLnBpY2tWZXJ0ZXg9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgYSwgZDtcbmF0dHJpYnV0ZSB2ZWM0IHBpY2swLCBwaWNrMTtcblxudW5pZm9ybSBtYXQzIG1hdHJpeDtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gZmxvYXQgd2lkdGg7XG5cbnZhcnlpbmcgdmVjNCBwaWNrQSwgcGlja0I7XG5cbmZsb2F0IGludmVyc2VfMV8wKGZsb2F0IG0pIHtcbiAgcmV0dXJuIDEuMCAvIG07XG59XG5cbm1hdDIgaW52ZXJzZV8xXzAobWF0MiBtKSB7XG4gIHJldHVybiBtYXQyKG1bMV1bMV0sLW1bMF1bMV0sXG4gICAgICAgICAgICAgLW1bMV1bMF0sIG1bMF1bMF0pIC8gKG1bMF1bMF0qbVsxXVsxXSAtIG1bMF1bMV0qbVsxXVswXSk7XG59XG5cbm1hdDMgaW52ZXJzZV8xXzAobWF0MyBtKSB7XG4gIGZsb2F0IGEwMCA9IG1bMF1bMF0sIGEwMSA9IG1bMF1bMV0sIGEwMiA9IG1bMF1bMl07XG4gIGZsb2F0IGExMCA9IG1bMV1bMF0sIGExMSA9IG1bMV1bMV0sIGExMiA9IG1bMV1bMl07XG4gIGZsb2F0IGEyMCA9IG1bMl1bMF0sIGEyMSA9IG1bMl1bMV0sIGEyMiA9IG1bMl1bMl07XG5cbiAgZmxvYXQgYjAxID0gYTIyICogYTExIC0gYTEyICogYTIxO1xuICBmbG9hdCBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwO1xuICBmbG9hdCBiMjEgPSBhMjEgKiBhMTAgLSBhMTEgKiBhMjA7XG5cbiAgZmxvYXQgZGV0ID0gYTAwICogYjAxICsgYTAxICogYjExICsgYTAyICogYjIxO1xuXG4gIHJldHVybiBtYXQzKGIwMSwgKC1hMjIgKiBhMDEgKyBhMDIgKiBhMjEpLCAoYTEyICogYTAxIC0gYTAyICogYTExKSxcbiAgICAgICAgICAgICAgYjExLCAoYTIyICogYTAwIC0gYTAyICogYTIwKSwgKC1hMTIgKiBhMDAgKyBhMDIgKiBhMTApLFxuICAgICAgICAgICAgICBiMjEsICgtYTIxICogYTAwICsgYTAxICogYTIwKSwgKGExMSAqIGEwMCAtIGEwMSAqIGExMCkpIC8gZGV0O1xufVxuXG5tYXQ0IGludmVyc2VfMV8wKG1hdDQgbSkge1xuICBmbG9hdFxuICAgICAgYTAwID0gbVswXVswXSwgYTAxID0gbVswXVsxXSwgYTAyID0gbVswXVsyXSwgYTAzID0gbVswXVszXSxcbiAgICAgIGExMCA9IG1bMV1bMF0sIGExMSA9IG1bMV1bMV0sIGExMiA9IG1bMV1bMl0sIGExMyA9IG1bMV1bM10sXG4gICAgICBhMjAgPSBtWzJdWzBdLCBhMjEgPSBtWzJdWzFdLCBhMjIgPSBtWzJdWzJdLCBhMjMgPSBtWzJdWzNdLFxuICAgICAgYTMwID0gbVszXVswXSwgYTMxID0gbVszXVsxXSwgYTMyID0gbVszXVsyXSwgYTMzID0gbVszXVszXSxcblxuICAgICAgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwLFxuICAgICAgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwLFxuICAgICAgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwLFxuICAgICAgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExLFxuICAgICAgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExLFxuICAgICAgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyLFxuICAgICAgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwLFxuICAgICAgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwLFxuICAgICAgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwLFxuICAgICAgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxLFxuICAgICAgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxLFxuICAgICAgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyLFxuXG4gICAgICBkZXQgPSBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XG5cbiAgcmV0dXJuIG1hdDQoXG4gICAgICBhMTEgKiBiMTEgLSBhMTIgKiBiMTAgKyBhMTMgKiBiMDksXG4gICAgICBhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDksXG4gICAgICBhMzEgKiBiMDUgLSBhMzIgKiBiMDQgKyBhMzMgKiBiMDMsXG4gICAgICBhMjIgKiBiMDQgLSBhMjEgKiBiMDUgLSBhMjMgKiBiMDMsXG4gICAgICBhMTIgKiBiMDggLSBhMTAgKiBiMTEgLSBhMTMgKiBiMDcsXG4gICAgICBhMDAgKiBiMTEgLSBhMDIgKiBiMDggKyBhMDMgKiBiMDcsXG4gICAgICBhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEsXG4gICAgICBhMjAgKiBiMDUgLSBhMjIgKiBiMDIgKyBhMjMgKiBiMDEsXG4gICAgICBhMTAgKiBiMTAgLSBhMTEgKiBiMDggKyBhMTMgKiBiMDYsXG4gICAgICBhMDEgKiBiMDggLSBhMDAgKiBiMTAgLSBhMDMgKiBiMDYsXG4gICAgICBhMzAgKiBiMDQgLSBhMzEgKiBiMDIgKyBhMzMgKiBiMDAsXG4gICAgICBhMjEgKiBiMDIgLSBhMjAgKiBiMDQgLSBhMjMgKiBiMDAsXG4gICAgICBhMTEgKiBiMDcgLSBhMTAgKiBiMDkgLSBhMTIgKiBiMDYsXG4gICAgICBhMDAgKiBiMDkgLSBhMDEgKiBiMDcgKyBhMDIgKiBiMDYsXG4gICAgICBhMzEgKiBiMDEgLSBhMzAgKiBiMDMgLSBhMzIgKiBiMDAsXG4gICAgICBhMjAgKiBiMDMgLSBhMjEgKiBiMDEgKyBhMjIgKiBiMDApIC8gZGV0O1xufVxuXG5cblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGJhc2UgPSBtYXRyaXggKiB2ZWMzKGEsIDEpO1xuICB2ZWMyIG4gPSB3aWR0aCAqXG4gICAgbm9ybWFsaXplKHNjcmVlblNoYXBlLnl4ICogdmVjMihkLnksIC1kLngpKSAvIHNjcmVlblNoYXBlLnh5O1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQoYmFzZS54eS9iYXNlLnogKyBuLCAwLCAxKTtcbiAgcGlja0EgPSBwaWNrMDtcbiAgcGlja0IgPSBwaWNrMTtcbn1cbiIsci5waWNrRnJhZ21lbnQ9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZhcnlpbmcgdmVjNCBwaWNrQSwgcGlja0I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBmcmFnSWQgPSB2ZWM0KHBpY2tBLnh5eiwgMC4wKTtcbiAgaWYocGlja0IudyA+IHBpY2tBLncpIHtcbiAgICBmcmFnSWQueHl6ID0gcGlja0IueHl6O1xuICB9XG5cbiAgZnJhZ0lkICs9IHBpY2tPZmZzZXQ7XG5cbiAgZnJhZ0lkLnkgKz0gZmxvb3IoZnJhZ0lkLnggLyAyNTYuMCk7XG4gIGZyYWdJZC54IC09IGZsb29yKGZyYWdJZC54IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZnJhZ0lkLnogKz0gZmxvb3IoZnJhZ0lkLnkgLyAyNTYuMCk7XG4gIGZyYWdJZC55IC09IGZsb29yKGZyYWdJZC55IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZnJhZ0lkLncgKz0gZmxvb3IoZnJhZ0lkLnogLyAyNTYuMCk7XG4gIGZyYWdJZC56IC09IGZsb29yKGZyYWdJZC56IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0lkIC8gMjU1LjA7XG59XG4iLHIuZmlsbFZlcnRleD0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBhLCBkO1xuXG51bmlmb3JtIG1hdDMgbWF0cml4O1xudW5pZm9ybSB2ZWMyIHByb2plY3RBeGlzO1xudW5pZm9ybSBmbG9hdCBwcm9qZWN0VmFsdWU7XG51bmlmb3JtIGZsb2F0IGRlcHRoO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgYmFzZSA9IG1hdHJpeCAqIHZlYzMoYSwgMSk7XG4gIHZlYzIgcCA9IGJhc2UueHkgLyBiYXNlLno7XG4gIGlmKGQueSA8IDAuMCB8fCAoZC55ID09IDAuMCAmJiBkLnggPCAwLjApKSB7XG4gICAgaWYoZG90KHAsIHByb2plY3RBeGlzKSA8IHByb2plY3RWYWx1ZSkge1xuICAgICAgcCA9IHAgKiAoMS4wIC0gYWJzKHByb2plY3RBeGlzKSkgKyBwcm9qZWN0QXhpcyAqIHByb2plY3RWYWx1ZTtcbiAgICB9XG4gIH1cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHAsIGRlcHRoLCAxKTtcbn1cbiIsci5maWxsRnJhZ21lbnQ9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogY29sb3IuYSwgY29sb3IuYSk7XG59XG4ifSx7fV0sMTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLG8sYSxzKXt0aGlzLnBsb3Q9dCx0aGlzLmRhc2hQYXR0ZXJuPWUsdGhpcy5saW5lQnVmZmVyPXIsdGhpcy5waWNrQnVmZmVyPW4sdGhpcy5saW5lU2hhZGVyPWksdGhpcy5taXRyZVNoYWRlcj1vLHRoaXMuZmlsbFNoYWRlcj1hLHRoaXMucGlja1NoYWRlcj1zLHRoaXMudXNpbmdEYXNoZXM9ITEsdGhpcy5ib3VuZHM9WzEvMCwxLzAsLSgxLzApLC0oMS8wKV0sdGhpcy53aWR0aD0xLHRoaXMuY29sb3I9WzAsMCwxLDFdLHRoaXMuZmlsbD1bITEsITEsITEsITFdLHRoaXMuZmlsbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZGF0YT1udWxsLHRoaXMubnVtUG9pbnRzPTAsdGhpcy52ZXJ0Q291bnQ9MCx0aGlzLnBpY2tPZmZzZXQ9MCx0aGlzLmxvZEJ1ZmZlcj1bXX1mdW5jdGlvbiBpKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPXQuZ2wsaT1zKHIpLG89cyhyKSx1PWwocixbMSwxXSksYz1hKHIsaC5saW5lVmVydGV4LGgubGluZUZyYWdtZW50KSxmPWEocixoLm1pdHJlVmVydGV4LGgubWl0cmVGcmFnbWVudCkscD1hKHIsaC5maWxsVmVydGV4LGguZmlsbEZyYWdtZW50KSxkPWEocixoLnBpY2tWZXJ0ZXgsaC5waWNrRnJhZ21lbnQpLG09bmV3IG4odCx1LGksbyxjLGYscCxkKTtyZXR1cm4gdC5hZGRPYmplY3QobSksbS51cGRhdGUoZSksbX1lLmV4cG9ydHM9bzt2YXIgYT10KCJnbC1zaGFkZXIiKSxzPXQoImdsLWJ1ZmZlciIpLGw9dCgiZ2wtdGV4dHVyZTJkIiksdT10KCJuZGFycmF5IiksYz10KCJ0eXBlZGFycmF5LXBvb2wiKSxoPXQoIi4vbGliL3NoYWRlcnMiKSxmPW4ucHJvdG90eXBlO2YuZHJhdz1mdW5jdGlvbigpe3ZhciB0PVsxLDAsMCwwLDEsMCwwLDAsMV0sZT1bMCwwXSxyPVsxLDBdLG49Wy0xLDBdLGk9WzAsMV0sbz1bMCwtMV07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wbG90LHM9dGhpcy5jb2xvcixsPXRoaXMud2lkdGgsdT0odGhpcy5udW1Qb2ludHMsdGhpcy5ib3VuZHMpLGM9dGhpcy52ZXJ0Q291bnQ7aWYoYyl7dmFyIGg9YS5nbCxmPWEudmlld0JveCxwPWEuZGF0YUJveCxkPWEucGl4ZWxSYXRpbyxtPXVbMl0tdVswXSxnPXVbM10tdVsxXSx2PXBbMl0tcFswXSx5PXBbM10tcFsxXSxiPWZbMl0tZlswXSx4PWZbM10tZlsxXTt0WzBdPTIqbS92LHRbNF09MipnL3ksdFs2XT0yKih1WzBdLXBbMF0pL3YtMSx0WzddPTIqKHVbMV0tcFsxXSkveS0xLGVbMF09YixlWzFdPXg7dmFyIF89dGhpcy5saW5lQnVmZmVyO18uYmluZCgpO3ZhciB3PXRoaXMuZmlsbDtpZih3WzBdfHx3WzFdfHx3WzJdfHx3WzNdKXt2YXIgTT10aGlzLmZpbGxTaGFkZXI7TS5iaW5kKCk7dmFyIGs9TS51bmlmb3JtcztrLm1hdHJpeD10LGsuZGVwdGg9YS5uZXh0RGVwdGhWYWx1ZSgpO3ZhciBBPU0uYXR0cmlidXRlcztBLmEucG9pbnRlcihoLkZMT0FULCExLDE2LDApLEEuZC5wb2ludGVyKGguRkxPQVQsITEsMTYsOCksaC5kZXB0aE1hc2soITApLGguZW5hYmxlKGguREVQVEhfVEVTVCk7dmFyIFQ9dGhpcy5maWxsQ29sb3I7d1swXSYmKGsuY29sb3I9VFswXSxrLnByb2plY3RBeGlzPW4say5wcm9qZWN0VmFsdWU9MSxoLmRyYXdBcnJheXMoaC5UUklBTkdMRVMsMCxjKSksd1sxXSYmKGsuY29sb3I9VFsxXSxrLnByb2plY3RBeGlzPW8say5wcm9qZWN0VmFsdWU9MSxoLmRyYXdBcnJheXMoaC5UUklBTkdMRVMsMCxjKSksd1syXSYmKGsuY29sb3I9VFsyXSxrLnByb2plY3RBeGlzPXIsay5wcm9qZWN0VmFsdWU9MSxoLmRyYXdBcnJheXMoaC5UUklBTkdMRVMsMCxjKSksd1szXSYmKGsuY29sb3I9VFszXSxrLnByb2plY3RBeGlzPWksay5wcm9qZWN0VmFsdWU9MSxoLmRyYXdBcnJheXMoaC5UUklBTkdMRVMsMCxjKSksaC5kZXB0aE1hc2soITEpLGguZGlzYWJsZShoLkRFUFRIX1RFU1QpfXZhciBFPXRoaXMubGluZVNoYWRlcjtFLmJpbmQoKTt2YXIgUz1FLnVuaWZvcm1zO1MubWF0cml4PXQsUy5jb2xvcj1zLFMud2lkdGg9bCpkLFMuc2NyZWVuU2hhcGU9ZSxTLmRhc2hQYXR0ZXJuPXRoaXMuZGFzaFBhdHRlcm4uYmluZCgpLFMuZGFzaExlbmd0aD10aGlzLmRhc2hMZW5ndGgqZDt2YXIgTD1FLmF0dHJpYnV0ZXM7aWYoTC5hLnBvaW50ZXIoaC5GTE9BVCwhMSwxNiwwKSxMLmQucG9pbnRlcihoLkZMT0FULCExLDE2LDgpLGguZHJhd0FycmF5cyhoLlRSSUFOR0xFUywwLGMpLGw+MiYmIXRoaXMudXNpbmdEYXNoZXMpe3ZhciB6PXRoaXMubWl0cmVTaGFkZXI7ei5iaW5kKCk7dmFyIEk9ei51bmlmb3JtcztJLm1hdHJpeD10LEkuY29sb3I9cyxJLnNjcmVlblNoYXBlPWUsSS5yYWRpdXM9bCpkLHouYXR0cmlidXRlcy5wLnBvaW50ZXIoaC5GTE9BVCwhMSw0OCwwKSxoLmRyYXdBcnJheXMoaC5QT0lOVFMsMCxjLzN8MCl9fX19KCksZi5kcmF3UGljaz1mdW5jdGlvbigpe3ZhciB0PVsxLDAsMCwwLDEsMCwwLDAsMV0sZT1bMCwwXSxyPVswLDAsMCwwXTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9dGhpcy5wbG90LG89dGhpcy5waWNrU2hhZGVyLGE9dGhpcy5saW5lQnVmZmVyLHM9dGhpcy5waWNrQnVmZmVyLGw9dGhpcy53aWR0aCx1PXRoaXMubnVtUG9pbnRzLGM9dGhpcy5ib3VuZHMsaD10aGlzLnZlcnRDb3VudCxmPWkuZ2wscD1pLnZpZXdCb3gsZD1pLmRhdGFCb3gsbT1pLnBpY2tQaXhlbFJhdGlvLGc9Y1syXS1jWzBdLHY9Y1szXS1jWzFdLHk9ZFsyXS1kWzBdLGI9ZFszXS1kWzFdLHg9cFsyXS1wWzBdLF89cFszXS1wWzFdO2lmKHRoaXMucGlja09mZnNldD1uLCFoKXJldHVybiBuK3U7dFswXT0yKmcveSx0WzRdPTIqdi9iLHRbNl09MiooY1swXS1kWzBdKS95LTEsdFs3XT0yKihjWzFdLWRbMV0pL2ItMSxlWzBdPXgsZVsxXT1fLHJbMF09MjU1Jm4sclsxXT1uPj4+OCYyNTUsclsyXT1uPj4+MTYmMjU1LHJbM109bj4+PjI0LG8uYmluZCgpO3ZhciB3PW8udW5pZm9ybXM7dy5tYXRyaXg9dCx3LndpZHRoPWwqbSx3LnBpY2tPZmZzZXQ9cix3LnNjcmVlblNoYXBlPWU7dmFyIE09by5hdHRyaWJ1dGVzO3JldHVybiBhLmJpbmQoKSxNLmEucG9pbnRlcihmLkZMT0FULCExLDE2LDApLE0uZC5wb2ludGVyKGYuRkxPQVQsITEsMTYsOCkscy5iaW5kKCksTS5waWNrMC5wb2ludGVyKGYuVU5TSUdORURfQllURSwhMSw4LDApLE0ucGljazEucG9pbnRlcihmLlVOU0lHTkVEX0JZVEUsITEsOCw0KSxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsMCxoKSxuK3V9fSgpLGYucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5waWNrT2Zmc2V0LGk9dGhpcy5udW1Qb2ludHM7aWYobj5yfHxyPj1uK2kpcmV0dXJuIG51bGw7dmFyIG89ci1uLGE9dGhpcy5kYXRhO3JldHVybntvYmplY3Q6dGhpcyxwb2ludElkOm8sZGF0YUNvb3JkOlthWzIqb10sYVsyKm8rMV1dfX0sZi51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLnBsb3QuZ2w7ISF0LmNvbm5lY3RHYXBzO3RoaXMuY29sb3I9KHQuY29sb3J8fFswLDAsMSwxXSkuc2xpY2UoKSx0aGlzLndpZHRoPSsodC53aWR0aHx8MSksdGhpcy5maWxsPSh0LmZpbGx8fFshMSwhMSwhMSwhMV0pLnNsaWNlKCksdGhpcy5maWxsQ29sb3I9aSh0LmZpbGxDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pO2Zvcih2YXIgcj10LmRhc2hlc3x8WzFdLG49MCxvPTA7bzxyLmxlbmd0aDsrK28pbis9cltvXTtmb3IodmFyIGE9Yy5tYWxsb2NVaW50OChuKSxzPTAsaD0yNTUsbz0wO288ci5sZW5ndGg7KytvKXtmb3IodmFyIGY9MDtmPHJbb107KytmKWFbcysrXT1oO2hePTI1NX10aGlzLmRhc2hQYXR0ZXJuLmRpc3Bvc2UoKSx0aGlzLnVzaW5nRGFzaGVzPXIubGVuZ3RoPjEsdGhpcy5kYXNoUGF0dGVybj1sKGUsdShhLFtuLDEsNF0sWzEsMCwwXSkpLHRoaXMuZGFzaFBhdHRlcm4ubWluRmlsdGVyPWUuTkVBUkVTVCx0aGlzLmRhc2hQYXR0ZXJuLm1hZ0ZpbHRlcj1lLk5FQVJFU1QsdGhpcy5kYXNoTGVuZ3RoPW4sYy5mcmVlKGEpO3ZhciBwPXQucG9zaXRpb25zO3RoaXMuZGF0YT1wO3ZhciBkPXRoaXMuYm91bmRzO2RbMF09ZFsxXT0xLzAsZFsyXT1kWzNdPS0oMS8wKTt2YXIgbT10aGlzLm51bVBvaW50cz1wLmxlbmd0aD4+PjE7aWYoMCE9PW0pe2Zvcih2YXIgbz0wO20+bzsrK28pe3ZhciBnPXBbMipvXSx2PXBbMipvKzFdO2lzTmFOKGcpfHxpc05hTih2KXx8KGRbMF09TWF0aC5taW4oZFswXSxnKSxkWzFdPU1hdGgubWluKGRbMV0sdiksZFsyXT1NYXRoLm1heChkWzJdLGcpLGRbM109TWF0aC5tYXgoZFszXSx2KSl9ZFswXT09PWRbMl0mJihkWzJdKz0xKSxkWzNdPT09ZFsxXSYmKGRbM10rPTEpO2Zvcih2YXIgeT1jLm1hbGxvY0Zsb2F0MzIoMjQqKG0tMSkpLGI9Yy5tYWxsb2NVaW50MzIoMTIqKG0tMSkpLHg9eS5sZW5ndGgsXz1iLmxlbmd0aCxzPW0sdz0wO3M+MTspe3ZhciBNPS0tcyxnPXBbMipzXSx2PXBbMipzKzFdLGs9TS0xLEE9cFsyKmtdLFQ9cFsyKmsrMV07aWYoIShpc05hTihnKXx8aXNOYU4odil8fGlzTmFOKEEpfHxpc05hTihUKSkpe3crPTEsZz0oZy1kWzBdKS8oZFsyXS1kWzBdKSx2PSh2LWRbMV0pLyhkWzNdLWRbMV0pLEE9KEEtZFswXSkvKGRbMl0tZFswXSksVD0oVC1kWzFdKS8oZFszXS1kWzFdKTt2YXIgRT1BLWcsUz1ULXYsTD1NfDE8PDI0LHo9TS0xLEk9TSxQPU0tMXwxPDwyNDt5Wy0teF09LVMseVstLXhdPS1FLHlbLS14XT12LHlbLS14XT1nLGJbLS1fXT1MLGJbLS1fXT16LHlbLS14XT1TLHlbLS14XT1FLHlbLS14XT1ULHlbLS14XT1BLGJbLS1fXT1JLGJbLS1fXT1QLHlbLS14XT0tUyx5Wy0teF09LUUseVstLXhdPVQseVstLXhdPUEsYlstLV9dPUksYlstLV9dPVAseVstLXhdPVMseVstLXhdPUUseVstLXhdPVQseVstLXhdPUEsYlstLV9dPUksYlstLV9dPVAseVstLXhdPS1TLHlbLS14XT0tRSx5Wy0teF09dix5Wy0teF09ZyxiWy0tX109TCxiWy0tX109eix5Wy0teF09Uyx5Wy0teF09RSx5Wy0teF09dix5Wy0teF09ZyxiWy0tX109TCxiWy0tX109en19dGhpcy52ZXJ0Q291bnQ9Nip3LHRoaXMubGluZUJ1ZmZlci51cGRhdGUoeS5zdWJhcnJheSh4KSksdGhpcy5waWNrQnVmZmVyLnVwZGF0ZShiLnN1YmFycmF5KF8pKSxjLmZyZWUoeSksYy5mcmVlKGIpfX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKSx0aGlzLmxpbmVCdWZmZXIuZGlzcG9zZSgpLHRoaXMucGlja0J1ZmZlci5kaXNwb3NlKCksdGhpcy5saW5lU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm1pdHJlU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmZpbGxTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5kYXNoUGF0dGVybi5kaXNwb3NlKCl9fSx7Ii4vbGliL3NoYWRlcnMiOjEzNSwiZ2wtYnVmZmVyIjoxMjksImdsLXNoYWRlciI6MjA4LCJnbC10ZXh0dXJlMmQiOjIzMyxuZGFycmF5OjQ1NiwidHlwZWRhcnJheS1wb29sIjo0ODF9XSwxMzc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBuZXh0UG9zaXRpb247XG5hdHRyaWJ1dGUgZmxvYXQgYXJjTGVuZ3RoLCBsaW5lV2lkdGg7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcblxudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMzIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0IHBpeGVsQXJjTGVuZ3RoO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzQgcHJvamVjdGVkID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIHZlYzQgdGFuZ2VudENsaXAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChuZXh0UG9zaXRpb24gLSBwb3NpdGlvbiwgMC4wKTtcbiAgdmVjMiB0YW5nZW50ID0gbm9ybWFsaXplKHNjcmVlblNoYXBlICogdGFuZ2VudENsaXAueHkpO1xuICB2ZWMyIG9mZnNldCA9IDAuNSAqIHBpeGVsUmF0aW8gKiBsaW5lV2lkdGggKiB2ZWMyKHRhbmdlbnQueSwgLXRhbmdlbnQueCkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocHJvamVjdGVkLnh5ICsgcHJvamVjdGVkLncgKiBvZmZzZXQsIHByb2plY3RlZC56dyk7XG5cbiAgd29ybGRQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICBwaXhlbEFyY0xlbmd0aCA9IGFyY0xlbmd0aDtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG59XG4iLG89InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMzICAgICAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hUZXh0dXJlO1xudW5pZm9ybSBmbG9hdCAgICAgZGFzaFNjYWxlO1xudW5pZm9ybSBmbG9hdCAgICAgb3BhY2l0eTtcblxudmFyeWluZyB2ZWMzICAgIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0ICAgcGl4ZWxBcmNMZW5ndGg7XG52YXJ5aW5nIHZlYzQgICAgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbih3b3JsZFBvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgYW55KGdyZWF0ZXJUaGFuKHdvcmxkUG9zaXRpb24sIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZmxvYXQgZGFzaFdlaWdodCA9IHRleHR1cmUyRChkYXNoVGV4dHVyZSwgdmVjMihkYXNoU2NhbGUgKiBwaXhlbEFyY0xlbmd0aCwgMCkpLnI7XG4gIGlmKGRhc2hXZWlnaHQgPCAwLjUpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvciAqIG9wYWNpdHk7XG59XG4iLGE9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuI2RlZmluZSBGTE9BVF9NQVggIDEuNzAxNDExODRlMzhcbiNkZWZpbmUgRkxPQVRfTUlOICAxLjE3NTQ5NDM1ZS0zOFxuXG5sb3dwIHZlYzQgZW5jb2RlX2Zsb2F0XzFfMChoaWdocCBmbG9hdCB2KSB7XG4gIGhpZ2hwIGZsb2F0IGF2ID0gYWJzKHYpO1xuXG4gIC8vSGFuZGxlIHNwZWNpYWwgY2FzZXNcbiAgaWYoYXYgPCBGTE9BVF9NSU4pIHtcbiAgICByZXR1cm4gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuICB9IGVsc2UgaWYodiA+IEZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDEyNy4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH0gZWxzZSBpZih2IDwgLUZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDI1NS4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH1cblxuICBoaWdocCB2ZWM0IGMgPSB2ZWM0KDAsMCwwLDApO1xuXG4gIC8vQ29tcHV0ZSBleHBvbmVudCBhbmQgbWFudGlzc2FcbiAgaGlnaHAgZmxvYXQgZSA9IGZsb29yKGxvZzIoYXYpKTtcbiAgaGlnaHAgZmxvYXQgbSA9IGF2ICogcG93KDIuMCwgLWUpIC0gMS4wO1xuICBcbiAgLy9VbnBhY2sgbWFudGlzc2FcbiAgY1sxXSA9IGZsb29yKDEyOC4wICogbSk7XG4gIG0gLT0gY1sxXSAvIDEyOC4wO1xuICBjWzJdID0gZmxvb3IoMzI3NjguMCAqIG0pO1xuICBtIC09IGNbMl0gLyAzMjc2OC4wO1xuICBjWzNdID0gZmxvb3IoODM4ODYwOC4wICogbSk7XG4gIFxuICAvL1VucGFjayBleHBvbmVudFxuICBoaWdocCBmbG9hdCBlYmlhcyA9IGUgKyAxMjcuMDtcbiAgY1swXSA9IGZsb29yKGViaWFzIC8gMi4wKTtcbiAgZWJpYXMgLT0gY1swXSAqIDIuMDtcbiAgY1sxXSArPSBmbG9vcihlYmlhcykgKiAxMjguMDsgXG5cbiAgLy9VbnBhY2sgc2lnbiBiaXRcbiAgY1swXSArPSAxMjguMCAqIHN0ZXAoMC4wLCAtdik7XG5cbiAgLy9TY2FsZSBiYWNrIHRvIHJhbmdlXG4gIHJldHVybiBjIC8gMjU1LjA7XG59XG5cblxuXG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzMgd29ybGRQb3NpdGlvbjtcbnZhcnlpbmcgZmxvYXQgcGl4ZWxBcmNMZW5ndGg7XG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbih3b3JsZFBvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgYW55KGdyZWF0ZXJUaGFuKHdvcmxkUG9zaXRpb24sIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQvMjU1LjAsIGVuY29kZV9mbG9hdF8xXzAocGl4ZWxBcmNMZW5ndGgpLnh5eik7XG59IixzPVt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToibmV4dFBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImFyY0xlbmd0aCIsdHlwZToiZmxvYXQifSx7bmFtZToibGluZVdpZHRoIix0eXBlOiJmbG9hdCJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9XTtyLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbih0LGksbyxudWxsLHMpfSxyLmNyZWF0ZVBpY2tTaGFkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCxpLGEsbnVsbCxzKX19LHsiZ2wtc2hhZGVyIjoyMDh9XSwxMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj0wLG49MDszPm47KytuKXt2YXIgaT10W25dLWVbbl07cis9aSppfXJldHVybiBNYXRoLnNxcnQocil9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0scj0wOzM+cjsrK3IpZVswXVtyXT1NYXRoLm1heCh0WzBdW3JdLGVbMF1bcl0pLGVbMV1bcl09TWF0aC5taW4odFsxXVtyXSxlWzFdW3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBvKHQsZSxyLG4pe3RoaXMuYXJjTGVuZ3RoPXQsdGhpcy5wb3NpdGlvbj1lLHRoaXMuaW5kZXg9cix0aGlzLmRhdGFDb29yZGluYXRlPW59ZnVuY3Rpb24gYSh0LGUscixuLGksbyl7dGhpcy5nbD10LHRoaXMuc2hhZGVyPWUsdGhpcy5waWNrU2hhZGVyPXIsdGhpcy5idWZmZXI9bix0aGlzLnZhbz1pLHRoaXMuY2xpcEJvdW5kcz1bWy0oMS8wKSwtKDEvMCksLSgxLzApXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnBvaW50cz1bXSx0aGlzLmFyY0xlbmd0aD1bXSx0aGlzLnZlcnRleENvdW50PTAsdGhpcy5ib3VuZHM9W1swLDAsMF0sWzAsMCwwXV0sdGhpcy5waWNrSWQ9MCx0aGlzLmxpbmVXaWR0aD0xLHRoaXMudGV4dHVyZT1vLHRoaXMuZGFzaFNjYWxlPTEsdGhpcy5vcGFjaXR5PTEsdGhpcy5kaXJ0eT0hMCx0aGlzLnBpeGVsUmF0aW89MX1mdW5jdGlvbiBzKHQpe3ZhciBlPXQuZ2x8fHQuc2NlbmUmJnQuc2NlbmUuZ2wscj1tKGUpO3IuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHIuYXR0cmlidXRlcy5uZXh0UG9zaXRpb24ubG9jYXRpb249MSxyLmF0dHJpYnV0ZXMuYXJjTGVuZ3RoLmxvY2F0aW9uPTIsci5hdHRyaWJ1dGVzLmxpbmVXaWR0aC5sb2NhdGlvbj0zLHIuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj00O3ZhciBuPWcoZSk7bi5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsbi5hdHRyaWJ1dGVzLm5leHRQb3NpdGlvbi5sb2NhdGlvbj0xLG4uYXR0cmlidXRlcy5hcmNMZW5ndGgubG9jYXRpb249MixuLmF0dHJpYnV0ZXMubGluZVdpZHRoLmxvY2F0aW9uPTMsbi5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTQ7Zm9yKHZhciBpPWwoZSksbz11KGUsW3tidWZmZXI6aSxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjQ4fSx7YnVmZmVyOmksc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6NDh9LHtidWZmZXI6aSxzaXplOjEsb2Zmc2V0OjI0LHN0cmlkZTo0OH0se2J1ZmZlcjppLHNpemU6MSxvZmZzZXQ6Mjgsc3RyaWRlOjQ4fSx7YnVmZmVyOmksc2l6ZTo0LG9mZnNldDozMixzdHJpZGU6NDh9XSkscz1wKG5ldyBBcnJheSgxMDI0KSxbMjU2LDEsNF0pLGg9MDsxMDI0Pmg7KytoKXMuZGF0YVtoXT0yNTU7dmFyIGY9YyhlLHMpO2Yud3JhcD1lLlJFUEVBVDt2YXIgZD1uZXcgYShlLHIsbixpLG8sZik7cmV0dXJuIGQudXBkYXRlKHQpLGR9ZS5leHBvcnRzPXM7dmFyIGw9dCgiZ2wtYnVmZmVyIiksdT10KCJnbC12YW8iKSxjPXQoImdsLXRleHR1cmUyZCIpLGg9dCgiZ2xzbC1yZWFkLWZsb2F0IiksZj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLHA9dCgibmRhcnJheSIpLGQ9dCgiLi9saWIvc2hhZGVycyIpLG09ZC5jcmVhdGVTaGFkZXIsZz1kLmNyZWF0ZVBpY2tTaGFkZXIsdj1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0seT1hLnByb3RvdHlwZTt5LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LHkuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj0xfSx5LnBpY2tTbG90cz0xLHkuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0seS5kcmF3VHJhbnNwYXJlbnQ9eS5kcmF3PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlcixuPXRoaXMudmFvO3IuYmluZCgpLHIudW5pZm9ybXM9e21vZGVsOnQubW9kZWx8fHYsdmlldzp0LnZpZXd8fHYscHJvamVjdGlvbjp0LnByb2plY3Rpb258fHYsY2xpcEJvdW5kczppKHRoaXMuY2xpcEJvdW5kcyksZGFzaFRleHR1cmU6dGhpcy50ZXh0dXJlLmJpbmQoKSxkYXNoU2NhbGU6dGhpcy5kYXNoU2NhbGUvdGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHNjcmVlblNoYXBlOltlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfSxuLmJpbmQoKSxuLmRyYXcoZS5UUklBTkdMRV9TVFJJUCx0aGlzLnZlcnRleENvdW50KX0seS5kcmF3UGljaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5waWNrU2hhZGVyLG49dGhpcy52YW87ci5iaW5kKCksci51bmlmb3Jtcz17bW9kZWw6dC5tb2RlbHx8dix2aWV3OnQudmlld3x8dixwcm9qZWN0aW9uOnQucHJvamVjdGlvbnx8dixwaWNrSWQ6dGhpcy5waWNrSWQsY2xpcEJvdW5kczppKHRoaXMuY2xpcEJvdW5kcyksc2NyZWVuU2hhcGU6W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0scGl4ZWxSYXRpbzp0aGlzLnBpeGVsUmF0aW99LG4uYmluZCgpLG4uZHJhdyhlLlRSSUFOR0xFX1NUUklQLHRoaXMudmVydGV4Q291bnQpfSx5LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMuZGlydHk9ITA7dmFyIGk9ISF0LmNvbm5lY3RHYXBzOyJkYXNoU2NhbGUiaW4gdCYmKHRoaXMuZGFzaFNjYWxlPXQuZGFzaFNjYWxlKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PSt0Lm9wYWNpdHkpO3ZhciBvPXQucG9zaXRpb258fHQucG9zaXRpb25zO2lmKG8pe3ZhciBhPXQuY29sb3J8fHQuY29sb3JzfHxbMCwwLDAsMV0scz10LmxpbmVXaWR0aHx8MSxsPVtdLHU9W10sYz1bXSxoPTAsZD0wLG09W1sxLzAsMS8wLDEvMF0sWy0oMS8wKSwtKDEvMCksLSgxLzApXV0sZz0hMTt0OmZvcihlPTE7ZTxvLmxlbmd0aDsrK2Upe3ZhciB2PW9bZS0xXSx5PW9bZV07Zm9yKHUucHVzaChoKSxjLnB1c2godi5zbGljZSgpKSxyPTA7Mz5yOysrcil7aWYoaXNOYU4odltyXSl8fGlzTmFOKHlbcl0pfHwhaXNGaW5pdGUodltyXSl8fCFpc0Zpbml0ZSh5W3JdKSl7aWYoIWkmJmwubGVuZ3RoPjApe2Zvcih2YXIgYj0wOzI0PmI7KytiKWwucHVzaChsW2wubGVuZ3RoLTEyXSk7ZCs9MixnPSEwfWNvbnRpbnVlIHR9bVswXVtyXT1NYXRoLm1pbihtWzBdW3JdLHZbcl0seVtyXSksbVsxXVtyXT1NYXRoLm1heChtWzFdW3JdLHZbcl0seVtyXSl9dmFyIHgsXztBcnJheS5pc0FycmF5KGFbMF0pPyh4PWFbZS0xXSxfPWFbZV0pOng9Xz1hLDM9PT14Lmxlbmd0aCYmKHg9W3hbMF0seFsxXSx4WzJdLDFdKSwzPT09Xy5sZW5ndGgmJihfPVtfWzBdLF9bMV0sX1syXSwxXSk7dmFyIHc7dz1BcnJheS5pc0FycmF5KHMpP3NbZS0xXTpzO3ZhciBNPWg7aWYoaCs9bih2LHkpLGcpe2ZvcihyPTA7Mj5yOysrcilsLnB1c2godlswXSx2WzFdLHZbMl0seVswXSx5WzFdLHlbMl0sTSx3LHhbMF0seFsxXSx4WzJdLHhbM10pO2QrPTIsZz0hMX1sLnB1c2godlswXSx2WzFdLHZbMl0seVswXSx5WzFdLHlbMl0sTSx3LHhbMF0seFsxXSx4WzJdLHhbM10sdlswXSx2WzFdLHZbMl0seVswXSx5WzFdLHlbMl0sTSwtdyx4WzBdLHhbMV0seFsyXSx4WzNdLHlbMF0seVsxXSx5WzJdLHZbMF0sdlsxXSx2WzJdLGgsLXcsX1swXSxfWzFdLF9bMl0sX1szXSx5WzBdLHlbMV0seVsyXSx2WzBdLHZbMV0sdlsyXSxoLHcsX1swXSxfWzFdLF9bMl0sX1szXSksZCs9NH1pZih0aGlzLmJ1ZmZlci51cGRhdGUobCksdS5wdXNoKGgpLGMucHVzaChvW28ubGVuZ3RoLTFdLnNsaWNlKCkpLHRoaXMuYm91bmRzPW0sdGhpcy52ZXJ0ZXhDb3VudD1kLHRoaXMucG9pbnRzPWMsdGhpcy5hcmNMZW5ndGg9dSwiZGFzaGVzImluIHQpe3ZhciBrPXQuZGFzaGVzLEE9ay5zbGljZSgpO2ZvcihBLnVuc2hpZnQoMCksZT0xO2U8QS5sZW5ndGg7KytlKUFbZV09QVtlLTFdK0FbZV07dmFyIFQ9cChuZXcgQXJyYXkoMTAyNCksWzI1NiwxLDRdKTtmb3IoZT0wOzI1Nj5lOysrZSl7Zm9yKHI9MDs0PnI7KytyKVQuc2V0KGUsMCxyLDApOzEmZi5sZShBLEFbQS5sZW5ndGgtMV0qZS8yNTUpP1Quc2V0KGUsMCwwLDApOlQuc2V0KGUsMCwwLDI1NSl9dGhpcy50ZXh0dXJlLnNldFBpeGVscyhUKX19fSx5LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKX0seS5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT1oKHQudmFsdWVbMF0sdC52YWx1ZVsxXSx0LnZhbHVlWzJdLDApLHI9Zi5sZSh0aGlzLmFyY0xlbmd0aCxlKTtpZigwPnIpcmV0dXJuIG51bGw7aWYocj09PXRoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xKXJldHVybiBuZXcgbyh0aGlzLmFyY0xlbmd0aFt0aGlzLmFyY0xlbmd0aC5sZW5ndGgtMV0sdGhpcy5wb2ludHNbdGhpcy5wb2ludHMubGVuZ3RoLTFdLnNsaWNlKCkscik7Zm9yKHZhciBuPXRoaXMucG9pbnRzW3JdLGk9dGhpcy5wb2ludHNbTWF0aC5taW4ocisxLHRoaXMucG9pbnRzLmxlbmd0aC0xKV0sYT0oZS10aGlzLmFyY0xlbmd0aFtyXSkvKHRoaXMuYXJjTGVuZ3RoW3IrMV0tdGhpcy5hcmNMZW5ndGhbcl0pLHM9MS1hLGw9WzAsMCwwXSx1PTA7Mz51OysrdSlsW3VdPXMqblt1XSthKmlbdV07dmFyIGM9TWF0aC5taW4oLjU+YT9yOnIrMSx0aGlzLnBvaW50cy5sZW5ndGgtMSk7cmV0dXJuIG5ldyBvKGUsbCxjLHRoaXMucG9pbnRzW2NdKX19LHsiLi9saWIvc2hhZGVycyI6MTM3LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTM5LCJnbC1idWZmZXIiOjEyOSwiZ2wtdGV4dHVyZTJkIjoyMzMsImdsLXZhbyI6MjM3LCJnbHNsLXJlYWQtZmxvYXQiOjE0MCxuZGFycmF5OjQ1Nn1dLDEzOTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMl1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIyfV0sMTQwOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscixuKXtyZXR1cm4gaVswXT1uLGlbMV09cixpWzJdPWUsaVszXT10LG9bMF19ZS5leHBvcnRzPW47dmFyIGk9bmV3IFVpbnQ4QXJyYXkoNCksbz1uZXcgRmxvYXQzMkFycmF5KGkuYnVmZmVyKX0se31dLDE0MTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sbz1lWzNdLGE9ZVs0XSxzPWVbNV0sbD1lWzZdLHU9ZVs3XSxjPWVbOF0saD1jKmEtcyp1LGY9LWMqbytzKmwscD11Km8tYSpsLGQ9cipoK24qZitpKnA7cmV0dXJuIGQ/KGQ9MS9kLHRbMF09aCpkLHRbMV09KC1jKm4raSp1KSpkLHRbMl09KHMqbi1pKmEpKmQsdFszXT1mKmQsdFs0XT0oYypyLWkqbCkqZCx0WzVdPSgtcypyK2kqbykqZCx0WzZdPXAqZCx0WzddPSgtdSpyK24qbCkqZCx0WzhdPShhKnItbipvKSpkLHQpOm51bGx9ZS5leHBvcnRzPW59LHt9XSwxNDI6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlWzldPXRbOV0sZVsxMF09dFsxMF0sZVsxMV09dFsxMV0sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0sZX1lLmV4cG9ydHM9bn0se31dLDE0MzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9ZS5leHBvcnRzPW59LHt9XSwxNDQ6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM10sbz10WzRdLGE9dFs1XSxzPXRbNl0sbD10WzddLHU9dFs4XSxjPXRbOV0saD10WzEwXSxmPXRbMTFdLHA9dFsxMl0sZD10WzEzXSxtPXRbMTRdLGc9dFsxNV0sdj1lKmEtcipvLHk9ZSpzLW4qbyxiPWUqbC1pKm8seD1yKnMtbiphLF89cipsLWkqYSx3PW4qbC1pKnMsTT11KmQtYypwLGs9dSptLWgqcCxBPXUqZy1mKnAsVD1jKm0taCpkLEU9YypnLWYqZCxTPWgqZy1mKm07cmV0dXJuIHYqUy15KkUrYipUK3gqQS1fKmsrdypNfWUuZXhwb3J0cz1ufSx7fV0sMTQ1OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPWVbM10sYT1yK3Iscz1uK24sbD1pK2ksdT1yKmEsYz1uKmEsaD1uKnMsZj1pKmEscD1pKnMsZD1pKmwsbT1vKmEsZz1vKnMsdj1vKmw7cmV0dXJuIHRbMF09MS1oLWQsdFsxXT1jK3YsdFsyXT1mLWcsdFszXT0wLHRbNF09Yy12LHRbNV09MS11LWQsdFs2XT1wK20sdFs3XT0wLHRbOF09ZitnLHRbOV09cC1tLHRbMTBdPTEtdS1oLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fWUuZXhwb3J0cz1ufSx7fV0sMTQ2OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sbz1lWzJdLGE9ZVszXSxzPW4rbixsPWkraSx1PW8rbyxjPW4qcyxoPW4qbCxmPW4qdSxwPWkqbCxkPWkqdSxtPW8qdSxnPWEqcyx2PWEqbCx5PWEqdTtyZXR1cm4gdFswXT0xLShwK20pLHRbMV09aCt5LHRbMl09Zi12LHRbM109MCx0WzRdPWgteSx0WzVdPTEtKGMrbSksdFs2XT1kK2csdFs3XT0wLHRbOF09Zit2LHRbOV09ZC1nLHRbMTBdPTEtKGMrcCksdFsxMV09MCx0WzEyXT1yWzBdLHRbMTNdPXJbMV0sdFsxNF09clsyXSx0WzE1XT0xLHR9ZS5leHBvcnRzPW59LHt9XSwxNDc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH1lLmV4cG9ydHM9bn0se31dLDE0ODpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sbz1lWzNdLGE9ZVs0XSxzPWVbNV0sbD1lWzZdLHU9ZVs3XSxjPWVbOF0saD1lWzldLGY9ZVsxMF0scD1lWzExXSxkPWVbMTJdLG09ZVsxM10sZz1lWzE0XSx2PWVbMTVdLHk9cipzLW4qYSxiPXIqbC1pKmEseD1yKnUtbyphLF89bipsLWkqcyx3PW4qdS1vKnMsTT1pKnUtbypsLGs9YyptLWgqZCxBPWMqZy1mKmQsVD1jKnYtcCpkLEU9aCpnLWYqbSxTPWgqdi1wKm0sTD1mKnYtcCpnLHo9eSpMLWIqUyt4KkUrXypULXcqQStNKms7cmV0dXJuIHo/KHo9MS96LHRbMF09KHMqTC1sKlMrdSpFKSp6LHRbMV09KGkqUy1uKkwtbypFKSp6LHRbMl09KG0qTS1nKncrdipfKSp6LHRbM109KGYqdy1oKk0tcCpfKSp6LHRbNF09KGwqVC1hKkwtdSpBKSp6LHRbNV09KHIqTC1pKlQrbypBKSp6LHRbNl09KGcqeC1kKk0tdipiKSp6LHRbN109KGMqTS1mKngrcCpiKSp6LHRbOF09KGEqUy1zKlQrdSprKSp6LHRbOV09KG4qVC1yKlMtbyprKSp6LHRbMTBdPShkKnctbSp4K3YqeSkqeix0WzExXT0oaCp4LWMqdy1wKnkpKnosdFsxMl09KHMqQS1hKkUtbCprKSp6LHRbMTNdPShyKkUtbipBK2kqaykqeix0WzE0XT0obSpiLWQqXy1nKnkpKnosdFsxNV09KGMqXy1oKmIrZip5KSp6LHQpOm51bGx9ZS5leHBvcnRzPW59LHt9XSwxNDk6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBvLGEscyxsLHUsYyxoLGYscCxkLG09ZVswXSxnPWVbMV0sdj1lWzJdLHk9blswXSxiPW5bMV0seD1uWzJdLF89clswXSx3PXJbMV0sTT1yWzJdO3JldHVybiBNYXRoLmFicyhtLV8pPDFlLTYmJk1hdGguYWJzKGctdyk8MWUtNiYmTWF0aC5hYnModi1NKTwxZS02P2kodCk6KGg9bS1fLGY9Zy13LHA9di1NLGQ9MS9NYXRoLnNxcnQoaCpoK2YqZitwKnApLGgqPWQsZio9ZCxwKj1kLG89YipwLXgqZixhPXgqaC15KnAscz15KmYtYipoLGQ9TWF0aC5zcXJ0KG8qbythKmErcypzKSxkPyhkPTEvZCxvKj1kLGEqPWQscyo9ZCk6KG89MCxhPTAscz0wKSxsPWYqcy1wKmEsdT1wKm8taCpzLGM9aCphLWYqbyxkPU1hdGguc3FydChsKmwrdSp1K2MqYyksZD8oZD0xL2QsbCo9ZCx1Kj1kLGMqPWQpOihsPTAsdT0wLGM9MCksdFswXT1vLHRbMV09bCx0WzJdPWgsdFszXT0wLHRbNF09YSx0WzVdPXUsdFs2XT1mLHRbN109MCx0WzhdPXMsdFs5XT1jLHRbMTBdPXAsdFsxMV09MCx0WzEyXT0tKG8qbSthKmcrcyp2KSx0WzEzXT0tKGwqbSt1KmcrYyp2KSx0WzE0XT0tKGgqbStmKmcrcCp2KSx0WzE1XT0xLHQpfXZhciBpPXQoIi4vaWRlbnRpdHkiKTtlLmV4cG9ydHM9bn0seyIuL2lkZW50aXR5IjoxNDd9XSwxNTA6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxvPWVbMl0sYT1lWzNdLHM9ZVs0XSxsPWVbNV0sdT1lWzZdLGM9ZVs3XSxoPWVbOF0sZj1lWzldLHA9ZVsxMF0sZD1lWzExXSxtPWVbMTJdLGc9ZVsxM10sdj1lWzE0XSx5PWVbMTVdLGI9clswXSx4PXJbMV0sXz1yWzJdLHc9clszXTtyZXR1cm4gdFswXT1iKm4reCpzK18qaCt3Km0sdFsxXT1iKmkreCpsK18qZit3KmcsdFsyXT1iKm8reCp1K18qcCt3KnYsdFszXT1iKmEreCpjK18qZCt3KnksYj1yWzRdLHg9cls1XSxfPXJbNl0sdz1yWzddLHRbNF09YipuK3gqcytfKmgrdyptLHRbNV09YippK3gqbCtfKmYrdypnLHRbNl09YipvK3gqdStfKnArdyp2LHRbN109YiphK3gqYytfKmQrdyp5LGI9cls4XSx4PXJbOV0sXz1yWzEwXSx3PXJbMTFdLHRbOF09YipuK3gqcytfKmgrdyptLHRbOV09YippK3gqbCtfKmYrdypnLHRbMTBdPWIqbyt4KnUrXypwK3cqdix0WzExXT1iKmEreCpjK18qZCt3KnksYj1yWzEyXSx4PXJbMTNdLF89clsxNF0sdz1yWzE1XSx0WzEyXT1iKm4reCpzK18qaCt3Km0sdFsxM109YippK3gqbCtfKmYrdypnLHRbMTRdPWIqbyt4KnUrXypwK3cqdix0WzE1XT1iKmEreCpjK18qZCt3KnksdH1lLmV4cG9ydHM9bn0se31dLDE1MTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbixpKXt2YXIgbz0xL01hdGgudGFuKGUvMiksYT0xLyhuLWkpO3JldHVybiB0WzBdPW8vcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1vLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0oaStuKSphLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT0yKmkqbiphLHRbMTVdPTAsdH1lLmV4cG9ydHM9bn0se31dLDE1MjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGksbyxhLHMsbCx1LGMsaCxmLHAsZCxtLGcsdix5LGIseCxfLHcsTSxrLEEsVCxFLFM9blswXSxMPW5bMV0sej1uWzJdLEk9TWF0aC5zcXJ0KFMqUytMKkwreip6KTtyZXR1cm4gTWF0aC5hYnMoSSk8MWUtNj9udWxsOihJPTEvSSxTKj1JLEwqPUkseio9SSxpPU1hdGguc2luKHIpLG89TWF0aC5jb3MociksYT0xLW8scz1lWzBdLGw9ZVsxXSx1PWVbMl0sYz1lWzNdLGg9ZVs0XSxmPWVbNV0scD1lWzZdLGQ9ZVs3XSxtPWVbOF0sZz1lWzldLHY9ZVsxMF0seT1lWzExXSxiPVMqUyphK28seD1MKlMqYSt6KmksXz16KlMqYS1MKmksdz1TKkwqYS16KmksTT1MKkwqYStvLGs9eipMKmErUyppLEE9Uyp6KmErTCppLFQ9TCp6KmEtUyppLEU9eip6KmErbyx0WzBdPXMqYitoKngrbSpfLHRbMV09bCpiK2YqeCtnKl8sdFsyXT11KmIrcCp4K3YqXyx0WzNdPWMqYitkKngreSpfLHRbNF09cyp3K2gqTSttKmssdFs1XT1sKncrZipNK2cqayx0WzZdPXUqdytwKk0rdiprLHRbN109Yyp3K2QqTSt5KmssdFs4XT1zKkEraCpUK20qRSx0WzldPWwqQStmKlQrZypFLHRbMTBdPXUqQStwKlQrdipFLHRbMTFdPWMqQStkKlQreSpFLGUhPT10JiYodFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHQpfWUuZXhwb3J0cz1ufSx7fV0sMTUzOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxvPWVbNF0sYT1lWzVdLHM9ZVs2XSxsPWVbN10sdT1lWzhdLGM9ZVs5XSxoPWVbMTBdLGY9ZVsxMV07cmV0dXJuIGUhPT10JiYodFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKSx0WzRdPW8qaSt1Km4sdFs1XT1hKmkrYypuLHRbNl09cyppK2gqbix0WzddPWwqaStmKm4sdFs4XT11KmktbypuLHRbOV09YyppLWEqbix0WzEwXT1oKmktcypuLHRbMTFdPWYqaS1sKm4sdH1lLmV4cG9ydHM9bn0se31dLDE1NDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3Mociksbz1lWzBdLGE9ZVsxXSxzPWVbMl0sbD1lWzNdLHU9ZVs4XSxjPWVbOV0saD1lWzEwXSxmPWVbMTFdO3JldHVybiBlIT09dCYmKHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFswXT1vKmktdSpuLHRbMV09YSppLWMqbix0WzJdPXMqaS1oKm4sdFszXT1sKmktZipuLHRbOF09bypuK3UqaSx0WzldPWEqbitjKmksdFsxMF09cypuK2gqaSx0WzExXT1sKm4rZippLHR9ZS5leHBvcnRzPW59LHt9XSwxNTU6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLG89ZVswXSxhPWVbMV0scz1lWzJdLGw9ZVszXSx1PWVbNF0sYz1lWzVdLGg9ZVs2XSxmPWVbN107cmV0dXJuIGUhPT10JiYodFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFswXT1vKmkrdSpuLHRbMV09YSppK2Mqbix0WzJdPXMqaStoKm4sdFszXT1sKmkrZipuLHRbNF09dSppLW8qbix0WzVdPWMqaS1hKm4sdFs2XT1oKmktcypuLHRbN109ZippLWwqbix0fWUuZXhwb3J0cz1ufSx7fV0sMTU2OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49clswXSxpPXJbMV0sbz1yWzJdO3JldHVybiB0WzBdPWVbMF0qbix0WzFdPWVbMV0qbix0WzJdPWVbMl0qbix0WzNdPWVbM10qbix0WzRdPWVbNF0qaSx0WzVdPWVbNV0qaSx0WzZdPWVbNl0qaSx0WzddPWVbN10qaSx0WzhdPWVbOF0qbyx0WzldPWVbOV0qbyx0WzEwXT1lWzEwXSpvLHRbMTFdPWVbMTFdKm8sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdH1lLmV4cG9ydHM9bn0se31dLDE1NzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuLGksbyxhLHMsbCx1LGMsaCxmLHAsZCxtPXJbMF0sZz1yWzFdLHY9clsyXTtyZXR1cm4gZT09PXQ/KHRbMTJdPWVbMF0qbStlWzRdKmcrZVs4XSp2K2VbMTJdLHRbMTNdPWVbMV0qbStlWzVdKmcrZVs5XSp2K2VbMTNdLHRbMTRdPWVbMl0qbStlWzZdKmcrZVsxMF0qditlWzE0XSx0WzE1XT1lWzNdKm0rZVs3XSpnK2VbMTFdKnYrZVsxNV0pOihuPWVbMF0saT1lWzFdLG89ZVsyXSxhPWVbM10scz1lWzRdLGw9ZVs1XSx1PWVbNl0sYz1lWzddLGg9ZVs4XSxmPWVbOV0scD1lWzEwXSxkPWVbMTFdLHRbMF09bix0WzFdPWksdFsyXT1vLHRbM109YSx0WzRdPXMsdFs1XT1sLHRbNl09dSx0WzddPWMsdFs4XT1oLHRbOV09Zix0WzEwXT1wLHRbMTFdPWQsdFsxMl09biptK3MqZytoKnYrZVsxMl0sdFsxM109aSptK2wqZytmKnYrZVsxM10sdFsxNF09byptK3UqZytwKnYrZVsxNF0sdFsxNV09YSptK2MqZytkKnYrZVsxNV0pLHR9ZS5leHBvcnRzPW59LHt9XSwxNTg6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7aWYodD09PWUpe3ZhciByPWVbMV0sbj1lWzJdLGk9ZVszXSxvPWVbNl0sYT1lWzddLHM9ZVsxMV07dFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09cix0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPW4sdFs5XT1vLHRbMTFdPWVbMTRdLHRbMTJdPWksdFsxM109YSx0WzE0XT1zfWVsc2UgdFswXT1lWzBdLHRbMV09ZVs0XSx0WzJdPWVbOF0sdFszXT1lWzEyXSx0WzRdPWVbMV0sdFs1XT1lWzVdLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09ZVsyXSx0WzldPWVbNl0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxNF0sdFsxMl09ZVszXSx0WzEzXT1lWzddLHRbMTRdPWVbMTFdLHRbMTVdPWVbMTVdO3JldHVybiB0fWUuZXhwb3J0cz1ufSx7fV0sMTU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9WzAsMCwwLDBdLG49MDs0Pm47KytuKWZvcih2YXIgaT0wOzQ+aTsrK2kpcltpXSs9dFs0Km4raV0qZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBpKHQsZSxyLGksbyl7Zm9yKHZhciBhPW4oaSxuKHIsbihlLFt0WzBdLHRbMV0sdFsyXSwxXSkpKSxzPTA7Mz5zOysrcylhW3NdLz1hWzNdO3JldHVyblsuNSpvWzBdKigxK2FbMF0pLC41Km9bMV0qKDEtYVsxXSldfWZ1bmN0aW9uIG8odCxlKXtpZigyPT09dC5sZW5ndGgpe2Zvcih2YXIgcj0wLG49MCxpPTA7Mj5pOysraSlyKz1NYXRoLnBvdyhlW2ldLXRbMF1baV0sMiksbis9TWF0aC5wb3coZVtpXS10WzFdW2ldLDIpO3JldHVybiByPU1hdGguc3FydChyKSxuPU1hdGguc3FydChuKSwxZS02PnIrbj9bMSwwXTpbbi8ocituKSxyLyhuK3IpXX1pZigzPT09dC5sZW5ndGgpe3ZhciBvPVswLDBdO3JldHVybiB1KHRbMF0sdFsxXSx0WzJdLGUsbyksbCh0LG8pfXJldHVybltdfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9WzAsMCwwXSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0sbz1lW25dLGE9MDszPmE7KythKXJbYV0rPW8qaVthXTtyZXR1cm4gcn1mdW5jdGlvbiBzKHQsZSxyLG4scyxsKXtpZigxPT09dC5sZW5ndGgpcmV0dXJuWzAsdFswXS5zbGljZSgpXTtmb3IodmFyIHU9bmV3IEFycmF5KHQubGVuZ3RoKSxjPTA7Yzx0Lmxlbmd0aDsrK2MpdVtjXT1pKHRbY10scixuLHMsbCk7Zm9yKHZhciBoPTAsZj0xLzAsYz0wO2M8dS5sZW5ndGg7KytjKXtmb3IodmFyIHA9MCxkPTA7Mj5kOysrZClwKz1NYXRoLnBvdyh1W2NdW2RdLWVbZF0sMik7Zj5wJiYoZj1wLGg9Yyl9Zm9yKHZhciBtPW8odSxlKSxnPTAsYz0wOzM+YzsrK2Mpe2lmKG1bY108LS4wMDF8fG1bY10+MS4wMDAxKXJldHVybiBudWxsO2crPW1bY119cmV0dXJuIE1hdGguYWJzKGctMSk+LjAwMT9udWxsOltoLGEodCxtKSxtXX12YXIgbD10KCJiYXJ5Y2VudHJpYyIpLHU9dCgicG9seXRvcGUtY2xvc2VzdC1wb2ludC9saWIvY2xvc2VzdF9wb2ludF8yZC5qcyIpO2UuZXhwb3J0cz1zfSx7YmFyeWNlbnRyaWM6MTYyLCJwb2x5dG9wZS1jbG9zZXN0LXBvaW50L2xpYi9jbG9zZXN0X3BvaW50XzJkLmpzIjoxNjR9XSwxNjA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbm9ybWFsO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiB1djtcblxudW5pZm9ybSBtYXQ0IG1vZGVsXG4gICAgICAgICAgICwgdmlld1xuICAgICAgICAgICAsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb25cbiAgICAgICAgICAgLCBsaWdodFBvc2l0aW9uO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2RhdGE7XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzQgbV9wb3NpdGlvbiAgPSBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIHZlYzQgdF9wb3NpdGlvbiAgPSB2aWV3ICogbV9wb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gICAgICA9IHByb2plY3Rpb24gKiB0X3Bvc2l0aW9uO1xuICBmX2NvbG9yICAgICAgICAgID0gY29sb3I7XG4gIGZfbm9ybWFsICAgICAgICAgPSBub3JtYWw7XG4gIGZfZGF0YSAgICAgICAgICAgPSBwb3NpdGlvbjtcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uICAgLSBwb3NpdGlvbjtcbiAgZl9saWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSBwb3NpdGlvbjtcbiAgZl91diAgICAgICAgICAgICA9IHV2O1xufSIsaT0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbl8yXzAoZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5cblxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXJfMV8xKFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcbiAgZmxvYXQgcm91Z2huZXNzLFxuICBmbG9hdCBmcmVzbmVsKSB7XG5cbiAgZmxvYXQgVmRvdE4gPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuXG4gIC8vSGFsZiBhbmdsZSB2ZWN0b3JcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XG5cbiAgLy9HZW9tZXRyaWMgdGVybVxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBMZG90SCA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XG4gIGZsb2F0IEcgPSBtaW4oMS4wLCBtaW4oRzEsIEcyKSk7XG4gIFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXG4gIGZsb2F0IEQgPSBiZWNrbWFubkRpc3RyaWJ1dGlvbl8yXzAoTmRvdEgsIHJvdWdobmVzcyk7XG5cbiAgLy9GcmVzbmVsIHRlcm1cbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XG5cbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcbn1cblxuXG5cbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3NcbiAgICAgICAgICAgICwgZnJlc25lbFxuICAgICAgICAgICAgLCBrYW1iaWVudFxuICAgICAgICAgICAgLCBrZGlmZnVzZVxuICAgICAgICAgICAgLCBrc3BlY3VsYXJcbiAgICAgICAgICAgICwgb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKGZfZGF0YSwgY2xpcEJvdW5kc1swXSkpIHx8IFxuICAgICBhbnkoZ3JlYXRlclRoYW4oZl9kYXRhLCBjbGlwQm91bmRzWzFdKSkpIHtcbiAgICBkaXNjYXJkO1xuICB9XG5cbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZl9leWVEaXJlY3Rpb24pO1xuICBcbiAgaWYoIWdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBjb29rVG9ycmFuY2VTcGVjdWxhcl8xXzEoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKTtcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBvcGFjaXR5O1xufSIsbz0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgdXY7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzMgZl9kYXRhO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgZl9jb2xvciA9IGNvbG9yO1xuICBmX2RhdGEgID0gcG9zaXRpb247XG4gIGZfdXYgICAgPSB1djtcbn0iLGE9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMyBmX2RhdGE7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4oZl9kYXRhLCBjbGlwQm91bmRzWzBdKSkgfHwgXG4gICAgIGFueShncmVhdGVyVGhhbihmX2RhdGEsIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cblxuICBnbF9GcmFnQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpICogb3BhY2l0eTtcbn0iLHM9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuYXR0cmlidXRlIGZsb2F0IHBvaW50U2l6ZTtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKHBvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgXG4gICAgIGFueShncmVhdGVyVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIH1cbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuICBmX2NvbG9yID0gY29sb3I7XG4gIGZfdXYgPSB1djtcbn0iLGw9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHBvaW50UiA9IGdsX1BvaW50Q29vcmQueHkgLSB2ZWMyKDAuNSwwLjUpO1xuICBpZihkb3QocG9pbnRSLCBwb2ludFIpID4gMC4yNSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KSAqIG9wYWNpdHk7XG59Iix1PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICBmX2lkICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uO1xufSIsYz0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzMgIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4oZl9wb3NpdGlvbiwgY2xpcEJvdW5kc1swXSkpIHx8IFxuICAgICBhbnkoZ3JlYXRlclRoYW4oZl9wb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgZl9pZC54eXopO1xufSIsaD0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyAgcG9zaXRpb247XG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xuYXR0cmlidXRlIHZlYzQgIGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSB8fCBcbiAgICAgYW55KGdyZWF0ZXJUaGFuKHBvc2l0aW9uLCBjbGlwQm91bmRzWzFdKSkpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH0gZWxzZSB7XG4gICAgZ2xfUG9zaXRpb24gID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuICB9XG4gIGZfaWQgICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICAgPSBwb3NpdGlvbjtcbn0iLGY9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xufSIscD0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzMgY29udG91ckNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29udG91ckNvbG9yLDEpO1xufVxuIjsKci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6bixmcmFnbWVudDppLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifV19LHIud2lyZVNoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifV19LHIucG9pbnRTaGFkZXI9e3ZlcnRleDpzLGZyYWdtZW50OmwsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn0se25hbWU6InBvaW50U2l6ZSIsdHlwZToiZmxvYXQifV19LHIucGlja1NoYWRlcj17dmVydGV4OnUsZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV19LHIucG9pbnRQaWNrU2hhZGVyPXt2ZXJ0ZXg6aCxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJwb2ludFNpemUiLHR5cGU6ImZsb2F0In0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In1dfSxyLmNvbnRvdXJTaGFkZXI9e3ZlcnRleDpmLGZyYWdtZW50OnAsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn1dfX0se31dLDE2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxvLGEscyxsLHUsYyxoLGYscCxkLG0sZyx2LHksYix4LF8sdyxNLGssQSxUKXt0aGlzLmdsPXQsdGhpcy5jZWxscz1bXSx0aGlzLnBvc2l0aW9ucz1bXSx0aGlzLmludGVuc2l0eT1bXSx0aGlzLnRleHR1cmU9ZSx0aGlzLmRpcnR5PSEwLHRoaXMudHJpU2hhZGVyPXIsdGhpcy5saW5lU2hhZGVyPW4sdGhpcy5wb2ludFNoYWRlcj1pLHRoaXMucGlja1NoYWRlcj1vLHRoaXMucG9pbnRQaWNrU2hhZGVyPWEsdGhpcy5jb250b3VyU2hhZGVyPXMsdGhpcy50cmlhbmdsZVBvc2l0aW9ucz1sLHRoaXMudHJpYW5nbGVDb2xvcnM9Yyx0aGlzLnRyaWFuZ2xlTm9ybWFscz1mLHRoaXMudHJpYW5nbGVVVnM9aCx0aGlzLnRyaWFuZ2xlSWRzPXUsdGhpcy50cmlhbmdsZVZBTz1wLHRoaXMudHJpYW5nbGVDb3VudD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy5lZGdlUG9zaXRpb25zPWQsdGhpcy5lZGdlQ29sb3JzPWcsdGhpcy5lZGdlVVZzPXYsdGhpcy5lZGdlSWRzPW0sdGhpcy5lZGdlVkFPPXksdGhpcy5lZGdlQ291bnQ9MCx0aGlzLnBvaW50UG9zaXRpb25zPWIsdGhpcy5wb2ludENvbG9ycz1fLHRoaXMucG9pbnRVVnM9dyx0aGlzLnBvaW50U2l6ZXM9TSx0aGlzLnBvaW50SWRzPXgsdGhpcy5wb2ludFZBTz1rLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29udG91ckxpbmVXaWR0aD0xLHRoaXMuY29udG91clBvc2l0aW9ucz1BLHRoaXMuY29udG91clZBTz1ULHRoaXMuY29udG91ckNvdW50PTAsdGhpcy5jb250b3VyQ29sb3I9WzAsMCwwXSx0aGlzLmNvbnRvdXJFbmFibGU9ITAsdGhpcy5waWNrSWQ9MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLSgxLzApLC0oMS8wKSwtKDEvMCldXSx0aGlzLmNsaXBCb3VuZHM9W1stKDEvMCksLSgxLzApLC0oMS8wKV0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saWdodFBvc2l0aW9uPVsxZTUsMWU1LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy5vcGFjaXR5PTEsdGhpcy5fbW9kZWw9aix0aGlzLl92aWV3PWosdGhpcy5fcHJvamVjdGlvbj1qLHRoaXMuX3Jlc29sdXRpb249WzEsMV19ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9ayh7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6InJnYmEifSkscj1uZXcgVWludDhBcnJheSgxMDI0KSxuPTA7MjU2Pm47KytuKXtmb3IodmFyIGk9ZVtuXSxvPTA7Mz5vOysrbylyWzQqbitvXT1pW29dO3JbNCpuKzNdPTI1NSppWzNdfXJldHVybiBNKHIsWzI1NiwyNTYsNF0sWzQsMCwxXSl9ZnVuY3Rpb24gbyh0LGUscil7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxpPTA7ZT5pOysraSluW2ldPTA7Zm9yKHZhciBvPXQubGVuZ3RoLGk9MDtvPmk7KytpKWZvcih2YXIgYT10W2ldLHM9MDtzPGEubGVuZ3RoOysrcyluW2Fbc11dPXJbaV07cmV0dXJuIG59ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO2U+bjsrK24pcltuXT10W25dWzJdO3JldHVybiByfWZ1bmN0aW9uIHModCl7dmFyIGU9Zyh0LEwpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTQsZX1mdW5jdGlvbiBsKHQpe3ZhciBlPWcodCx6KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsZX1mdW5jdGlvbiB1KHQpe3ZhciBlPWcodCxJKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsZS5hdHRyaWJ1dGVzLnBvaW50U2l6ZS5sb2NhdGlvbj00LGV9ZnVuY3Rpb24gYyh0KXt2YXIgZT1nKHQsUCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLGV9ZnVuY3Rpb24gaCh0KXt2YXIgZT1nKHQsQyk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy5wb2ludFNpemUubG9jYXRpb249NCxlfWZ1bmN0aW9uIGYodCl7dmFyIGU9Zyh0LFIpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlfWZ1bmN0aW9uIHAodCl7dmFyIGU9dC5nbCxyPXMoZSksaT1sKGUpLG89dShlKSxhPWMoZSkscD1oKGUpLGQ9ZihlKSxtPWIoZSxNKG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7bS5nZW5lcmF0ZU1pcG1hcCgpLG0ubWluRmlsdGVyPWUuTElORUFSX01JUE1BUF9MSU5FQVIsbS5tYWdGaWx0ZXI9ZS5MSU5FQVI7dmFyIGc9dihlKSx4PXYoZSksXz12KGUpLHc9dihlKSxrPXYoZSksQT15KGUsW3tidWZmZXI6Zyx0eXBlOmUuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmssdHlwZTplLlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6eCx0eXBlOmUuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOl8sdHlwZTplLkZMT0FULHNpemU6Mn0se2J1ZmZlcjp3LHR5cGU6ZS5GTE9BVCxzaXplOjN9XSksVD12KGUpLEU9dihlKSxTPXYoZSksTD12KGUpLHo9eShlLFt7YnVmZmVyOlQsdHlwZTplLkZMT0FULHNpemU6M30se2J1ZmZlcjpMLHR5cGU6ZS5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOkUsdHlwZTplLkZMT0FULHNpemU6NH0se2J1ZmZlcjpTLHR5cGU6ZS5GTE9BVCxzaXplOjJ9XSksST12KGUpLFA9dihlKSxDPXYoZSksUj12KGUpLGo9dihlKSxEPXkoZSxbe2J1ZmZlcjpJLHR5cGU6ZS5GTE9BVCxzaXplOjN9LHtidWZmZXI6aix0eXBlOmUuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpQLHR5cGU6ZS5GTE9BVCxzaXplOjR9LHtidWZmZXI6Qyx0eXBlOmUuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOlIsdHlwZTplLkZMT0FULHNpemU6MX1dKSxPPXYoZSksRj15KGUsW3tidWZmZXI6Tyx0eXBlOmUuRkxPQVQsc2l6ZTozfV0pLE49bmV3IG4oZSxtLHIsaSxvLGEscCxkLGcsayx4LF8sdyxBLFQsTCxFLFMseixJLGosUCxDLFIsRCxPLEYpO3JldHVybiBOLnVwZGF0ZSh0KSxOfXZhciBkPTFlLTYsbT0xZS02LGc9dCgiZ2wtc2hhZGVyIiksdj10KCJnbC1idWZmZXIiKSx5PXQoImdsLXZhbyIpLGI9dCgiZ2wtdGV4dHVyZTJkIikseD10KCJub3JtYWxzIiksXz10KCJnbC1tYXQ0L211bHRpcGx5Iiksdz10KCJnbC1tYXQ0L2ludmVydCIpLE09dCgibmRhcnJheSIpLGs9dCgiY29sb3JtYXAiKSxBPXQoInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIiksVD10KCJ0eXBlZGFycmF5LXBvb2wiKSxFPXQoIi4vbGliL3NoYWRlcnMiKSxTPXQoIi4vbGliL2Nsb3Nlc3QtcG9pbnQiKSxMPUUubWVzaFNoYWRlcix6PUUud2lyZVNoYWRlcixJPUUucG9pbnRTaGFkZXIsUD1FLnBpY2tTaGFkZXIsQz1FLnBvaW50UGlja1NoYWRlcixSPUUuY29udG91clNoYWRlcixqPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxEPW4ucHJvdG90eXBlO0QuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj0xfSxELmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LEQucGlja1Nsb3RzPTEsRC5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSxELmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZighdHx8IXRoaXMuY29udG91ckVuYWJsZSlyZXR1cm4gdm9pZCh0aGlzLmNvbnRvdXJDb3VudD0wKTtmb3IodmFyIGU9QSh0aGlzLmNlbGxzLHRoaXMuaW50ZW5zaXR5LHQuaW50ZW5zaXR5KSxyPWUuY2VsbHMsbj1lLnZlcnRleElkcyxpPWUudmVydGV4V2VpZ2h0cyxvPXIubGVuZ3RoLGE9VC5tYWxsb2NGbG9hdDMyKDYqbykscz0wLGw9MDtvPmw7KytsKWZvcih2YXIgdT1yW2xdLGM9MDsyPmM7KytjKXt2YXIgaD11WzBdOzI9PT11Lmxlbmd0aCYmKGg9dVtjXSk7Zm9yKHZhciBmPW5baF1bMF0scD1uW2hdWzFdLGQ9aVtoXSxtPTEtZCxnPXRoaXMucG9zaXRpb25zW2ZdLHY9dGhpcy5wb3NpdGlvbnNbcF0seT0wOzM+eTsrK3kpYVtzKytdPWQqZ1t5XSttKnZbeV19dGhpcy5jb250b3VyQ291bnQ9cy8zfDAsdGhpcy5jb250b3VyUG9zaXRpb25zLnVwZGF0ZShhLnN1YmFycmF5KDAscykpLFQuZnJlZShhKX0sRC51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMuZGlydHk9ITAsImNvbnRvdXJFbmFibGUiaW4gdCYmKHRoaXMuY29udG91ckVuYWJsZT10LmNvbnRvdXJFbmFibGUpLCJjb250b3VyQ29sb3IiaW4gdCYmKHRoaXMuY29udG91ckNvbG9yPXQuY29udG91ckNvbG9yKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksImxpZ2h0UG9zaXRpb24iaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSwiYW1iaWVudCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSwiZGlmZnVzZSJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSwic3BlY3VsYXIiaW4gdCYmKHRoaXMuc3BlY3VsYXJMaWdodD10LnNwZWN1bGFyKSwicm91Z2huZXNzImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksImZyZXNuZWwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9YihlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoaSh0LmNvbG9ybWFwKSksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwKCkpO3ZhciByPXQuY2VsbHMsbj10LnBvc2l0aW9ucztpZihuJiZyKXt2YXIgcz1bXSxsPVtdLHU9W10sYz1bXSxoPVtdLGY9W10scD1bXSxnPVtdLHY9W10seT1bXSxfPVtdLHc9W10sTT1bXSxrPVtdO3RoaXMuY2VsbHM9cix0aGlzLnBvc2l0aW9ucz1uO3ZhciBBPXQudmVydGV4Tm9ybWFscyxUPXQuY2VsbE5vcm1hbHMsRT12b2lkIDA9PT10LnZlcnRleE5vcm1hbHNFcHNpbG9uP2Q6dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbixTPXZvaWQgMD09PXQuZmFjZU5vcm1hbHNFcHNpbG9uP206dC5mYWNlTm9ybWFsc0Vwc2lsb247dC51c2VGYWNldE5vcm1hbHMmJiFUJiYoVD14LmZhY2VOb3JtYWxzKHIsbixTKSksVHx8QXx8KEE9eC52ZXJ0ZXhOb3JtYWxzKHIsbixFKSk7dmFyIEw9dC52ZXJ0ZXhDb2xvcnMsej10LmNlbGxDb2xvcnMsST10Lm1lc2hDb2xvcnx8WzEsMSwxLDFdLFA9dC52ZXJ0ZXhVVnMsQz10LnZlcnRleEludGVuc2l0eSxSPXQuY2VsbFVWcyxqPXQuY2VsbEludGVuc2l0eSxEPTEvMCxPPS0oMS8wKTtpZighUCYmIVIpaWYoQylmb3IodmFyIEY9MDtGPEMubGVuZ3RoOysrRil7dmFyIE49Q1tGXTtEPU1hdGgubWluKEQsTiksTz1NYXRoLm1heChPLE4pfWVsc2UgaWYoailmb3IodmFyIEY9MDtGPGoubGVuZ3RoOysrRil7dmFyIE49altGXTtEPU1hdGgubWluKEQsTiksTz1NYXRoLm1heChPLE4pfWVsc2UgZm9yKHZhciBGPTA7RjxuLmxlbmd0aDsrK0Ype3ZhciBOPW5bRl1bMl07RD1NYXRoLm1pbihELE4pLE89TWF0aC5tYXgoTyxOKX1DP3RoaXMuaW50ZW5zaXR5PUM6aj90aGlzLmludGVuc2l0eT1vKHIsbi5sZW5ndGgsaik6dGhpcy5pbnRlbnNpdHk9YShuKTt2YXIgQj10LnBvaW50U2l6ZXMsVT10LnBvaW50U2l6ZXx8MTt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLSgxLzApLC0oMS8wKSwtKDEvMCldXTtmb3IodmFyIEY9MDtGPG4ubGVuZ3RoOysrRilmb3IodmFyIFY9bltGXSxxPTA7Mz5xOysrcSkhaXNOYU4oVltxXSkmJmlzRmluaXRlKFZbcV0pJiYodGhpcy5ib3VuZHNbMF1bcV09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1bcV0sVltxXSksdGhpcy5ib3VuZHNbMV1bcV09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1bcV0sVltxXSkpO3ZhciBHPTAsSD0wLFg9MDt0OmZvcih2YXIgRj0wO0Y8ci5sZW5ndGg7KytGKXt2YXIgWT1yW0ZdO3N3aXRjaChZLmxlbmd0aCl7Y2FzZSAxOmZvcih2YXIgVz1ZWzBdLFY9bltXXSxxPTA7Mz5xOysrcSlpZihpc05hTihWW3FdKXx8IWlzRmluaXRlKFZbcV0pKWNvbnRpbnVlIHQ7eS5wdXNoKFZbMF0sVlsxXSxWWzJdKTt2YXIgWjtaPUw/TFtXXTp6P3pbRl06SSwzPT09Wi5sZW5ndGg/Xy5wdXNoKFpbMF0sWlsxXSxaWzJdLDEpOl8ucHVzaChaWzBdLFpbMV0sWlsyXSxaWzNdKTt2YXIgUTtRPVA/UFtXXTpDP1soQ1tXXS1EKS8oTy1EKSwwXTpSP1JbRl06aj9bKGpbRl0tRCkvKE8tRCksMF06WyhWWzJdLUQpLyhPLUQpLDBdLHcucHVzaChRWzBdLFFbMV0pLEI/TS5wdXNoKEJbV10pOk0ucHVzaChVKSxrLnB1c2goRiksWCs9MTticmVhaztjYXNlIDI6Zm9yKHZhciBxPTA7Mj5xOysrcSlmb3IodmFyIFc9WVtxXSxWPW5bV10sSz0wOzM+SzsrK0spaWYoaXNOYU4oVltLXSl8fCFpc0Zpbml0ZShWW0tdKSljb250aW51ZSB0O2Zvcih2YXIgcT0wOzI+cTsrK3Epe3ZhciBXPVlbcV0sVj1uW1ddO2YucHVzaChWWzBdLFZbMV0sVlsyXSk7dmFyIFo7Wj1MP0xbV106ej96W0ZdOkksMz09PVoubGVuZ3RoP3AucHVzaChaWzBdLFpbMV0sWlsyXSwxKTpwLnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSk7dmFyIFE7UT1QP1BbV106Qz9bKENbV10tRCkvKE8tRCksMF06Uj9SW0ZdOmo/WyhqW0ZdLUQpLyhPLUQpLDBdOlsoVlsyXS1EKS8oTy1EKSwwXSxnLnB1c2goUVswXSxRWzFdKSx2LnB1c2goRil9SCs9MTticmVhaztjYXNlIDM6Zm9yKHZhciBxPTA7Mz5xOysrcSlmb3IodmFyIFc9WVtxXSxWPW5bV10sSz0wOzM+SzsrK0spaWYoaXNOYU4oVltLXSl8fCFpc0Zpbml0ZShWW0tdKSljb250aW51ZSB0O2Zvcih2YXIgcT0wOzM+cTsrK3Epe3ZhciBXPVlbcV0sVj1uW1ddO3MucHVzaChWWzBdLFZbMV0sVlsyXSk7dmFyIFo7Wj1MP0xbV106ej96W0ZdOkksMz09PVoubGVuZ3RoP2wucHVzaChaWzBdLFpbMV0sWlsyXSwxKTpsLnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSk7dmFyIFE7UT1QP1BbV106Qz9bKENbV10tRCkvKE8tRCksMF06Uj9SW0ZdOmo/WyhqW0ZdLUQpLyhPLUQpLDBdOlsoVlsyXS1EKS8oTy1EKSwwXSxjLnB1c2goUVswXSxRWzFdKTt2YXIgSjtKPUE/QVtXXTpUW0ZdLHUucHVzaChKWzBdLEpbMV0sSlsyXSksaC5wdXNoKEYpfUcrPTF9fXRoaXMucG9pbnRDb3VudD1YLHRoaXMuZWRnZUNvdW50PUgsdGhpcy50cmlhbmdsZUNvdW50PUcsdGhpcy5wb2ludFBvc2l0aW9ucy51cGRhdGUoeSksdGhpcy5wb2ludENvbG9ycy51cGRhdGUoXyksdGhpcy5wb2ludFVWcy51cGRhdGUodyksdGhpcy5wb2ludFNpemVzLnVwZGF0ZShNKSx0aGlzLnBvaW50SWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoaykpLHRoaXMuZWRnZVBvc2l0aW9ucy51cGRhdGUoZiksdGhpcy5lZGdlQ29sb3JzLnVwZGF0ZShwKSx0aGlzLmVkZ2VVVnMudXBkYXRlKGcpLHRoaXMuZWRnZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KHYpKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLnVwZGF0ZShzKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLnVwZGF0ZShsKSx0aGlzLnRyaWFuZ2xlVVZzLnVwZGF0ZShjKSx0aGlzLnRyaWFuZ2xlTm9ybWFscy51cGRhdGUodSksdGhpcy50cmlhbmdsZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KGgpKX19LEQuZHJhd1RyYW5zcGFyZW50PUQuZHJhdz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8aixuPXQudmlld3x8aixpPXQucHJvamVjdGlvbnx8aixvPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLGE9MDszPmE7KythKW9bMF1bYV09TWF0aC5tYXgob1swXVthXSx0aGlzLmNsaXBCb3VuZHNbMF1bYV0pLG9bMV1bYV09TWF0aC5taW4ob1sxXVthXSx0aGlzLmNsaXBCb3VuZHNbMV1bYV0pO3ZhciBzPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczpvLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LGNvbnRvdXJDb2xvcjp0aGlzLmNvbnRvdXJDb2xvcix0ZXh0dXJlOjB9O3RoaXMudGV4dHVyZS5iaW5kKDApO3ZhciBsPW5ldyBBcnJheSgxNik7XyhsLHMudmlldyxzLm1vZGVsKSxfKGwscy5wcm9qZWN0aW9uLGwpLHcobCxsKTtmb3IodmFyIGE9MDszPmE7KythKXMuZXllUG9zaXRpb25bYV09bFsxMithXS9sWzE1XTtmb3IodmFyIHU9bFsxNV0sYT0wOzM+YTsrK2EpdSs9dGhpcy5saWdodFBvc2l0aW9uW2FdKmxbNCphKzNdO2Zvcih2YXIgYT0wOzM+YTsrK2Epe2Zvcih2YXIgYz1sWzEyK2FdLGg9MDszPmg7KytoKWMrPWxbNCpoK2FdKnRoaXMubGlnaHRQb3NpdGlvbltoXTtzLmxpZ2h0UG9zaXRpb25bYV09Yy91fWlmKHRoaXMudHJpYW5nbGVDb3VudD4wKXt2YXIgZj10aGlzLnRyaVNoYWRlcjtmLmJpbmQoKSxmLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCl9aWYodGhpcy5lZGdlQ291bnQ+MCYmdGhpcy5saW5lV2lkdGg+MCl7dmFyIGY9dGhpcy5saW5lU2hhZGVyO2YuYmluZCgpLGYudW5pZm9ybXM9cyx0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKX1pZih0aGlzLnBvaW50Q291bnQ+MCl7dmFyIGY9dGhpcy5wb2ludFNoYWRlcjtmLmJpbmQoKSxmLnVuaWZvcm1zPXMsdGhpcy5wb2ludFZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSx0aGlzLnBvaW50VkFPLnVuYmluZCgpfWlmKHRoaXMuY29udG91ckVuYWJsZSYmdGhpcy5jb250b3VyQ291bnQ+MCYmdGhpcy5jb250b3VyTGluZVdpZHRoPjApe3ZhciBmPXRoaXMuY29udG91clNoYWRlcjtmLmJpbmQoKSxmLnVuaWZvcm1zPXMsdGhpcy5jb250b3VyVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLHRoaXMuY29udG91ckNvdW50KSx0aGlzLmNvbnRvdXJWQU8udW5iaW5kKCl9fSxELmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxqLG49dC52aWV3fHxqLGk9dC5wcm9qZWN0aW9ufHxqLG89W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sYT0wOzM+YTsrK2Epb1swXVthXT1NYXRoLm1heChvWzBdW2FdLHRoaXMuY2xpcEJvdW5kc1swXVthXSksb1sxXVthXT1NYXRoLm1pbihvWzFdW2FdLHRoaXMuY2xpcEJvdW5kc1sxXVthXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGkpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxjbGlwQm91bmRzOm8scGlja0lkOnRoaXMucGlja0lkLzI1NX0sbD10aGlzLnBpY2tTaGFkZXI7aWYobC5iaW5kKCksbC51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVDb3VudD4wJiYodGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCkpLHRoaXMuZWRnZUNvdW50PjAmJih0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSksdGhpcy5wb2ludENvdW50PjApe3ZhciBsPXRoaXMucG9pbnRQaWNrU2hhZGVyO2wuYmluZCgpLGwudW5pZm9ybXM9cyx0aGlzLnBvaW50VkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLHRoaXMucG9pbnRWQU8udW5iaW5kKCl9fSxELnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO2Zvcih2YXIgZT10LnZhbHVlWzBdKzI1Nip0LnZhbHVlWzFdKzY1NTM2KnQudmFsdWVbMl0scj10aGlzLmNlbGxzW2VdLG49dGhpcy5wb3NpdGlvbnMsaT1uZXcgQXJyYXkoci5sZW5ndGgpLG89MDtvPHIubGVuZ3RoOysrbylpW29dPW5bcltvXV07dmFyIGE9UyhpLFt0LmNvb3JkWzBdLHRoaXMuX3Jlc29sdXRpb25bMV0tdC5jb29yZFsxXV0sdGhpcy5fbW9kZWwsdGhpcy5fdmlldyx0aGlzLl9wcm9qZWN0aW9uLHRoaXMuX3Jlc29sdXRpb24pO2lmKCFhKXJldHVybiBudWxsO2Zvcih2YXIgcz1hWzJdLGw9MCxvPTA7bzxyLmxlbmd0aDsrK28pbCs9c1tvXSp0aGlzLmludGVuc2l0eVtyW29dXTtyZXR1cm57cG9zaXRpb246YVsxXSxpbmRleDpyW2FbMF1dLGNlbGw6cixjZWxsSWQ6ZSxpbnRlbnNpdHk6bCxkYXRhQ29vcmRpbmF0ZTp0aGlzLnBvc2l0aW9uc1tyW2FbMF1dXX19LEQuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudGV4dHVyZS5kaXNwb3NlKCksdGhpcy50cmlTaGFkZXIuZGlzcG9zZSgpLHRoaXMubGluZVNoYWRlci5kaXNwb3NlKCksdGhpcy5wb2ludFNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvaW50UGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVZBTy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUNvbG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVVWcy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZU5vcm1hbHMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVJZHMuZGlzcG9zZSgpLHRoaXMuZWRnZVZBTy5kaXNwb3NlKCksdGhpcy5lZGdlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLmVkZ2VDb2xvcnMuZGlzcG9zZSgpLHRoaXMuZWRnZVVWcy5kaXNwb3NlKCksdGhpcy5lZGdlSWRzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VkFPLmRpc3Bvc2UoKSx0aGlzLnBvaW50UG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnBvaW50Q29sb3JzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VVZzLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2l6ZXMuZGlzcG9zZSgpLHRoaXMucG9pbnRJZHMuZGlzcG9zZSgpLHRoaXMuY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5jb250b3VyUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJTaGFkZXIuZGlzcG9zZSgpfSxlLmV4cG9ydHM9cH0seyIuL2xpYi9jbG9zZXN0LXBvaW50IjoxNTksIi4vbGliL3NoYWRlcnMiOjE2MCxjb2xvcm1hcDoxMTEsImdsLWJ1ZmZlciI6MTI5LCJnbC1tYXQ0L2ludmVydCI6MTQ4LCJnbC1tYXQ0L211bHRpcGx5IjoxNTAsImdsLXNoYWRlciI6MjA4LCJnbC10ZXh0dXJlMmQiOjIzMywiZ2wtdmFvIjoyMzcsbmRhcnJheTo0NTYsbm9ybWFsczoxNjMsInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIjoxNjUsInR5cGVkYXJyYXktcG9vbCI6NDgxfV0sMTYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7KytyKWUrPXRbcl07cmV0dXJuIGV9ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxpPW5ldyBBcnJheShyKzEpLGE9MDtyPmE7KythKXtmb3IodmFyIHM9bmV3IEFycmF5KHIrMSksbD0wO3I+PWw7KytsKXNbbF09dFtsXVthXTtpW2FdPXN9aVtyXT1uZXcgQXJyYXkocisxKTtmb3IodmFyIGE9MDtyPj1hOysrYSlpW3JdW2FdPTE7Zm9yKHZhciB1PW5ldyBBcnJheShyKzEpLGE9MDtyPmE7KythKXVbYV09ZVthXTt1W3JdPTE7dmFyIGM9byhpLHUpLGg9bihjW3IrMV0pOzA9PT1oJiYoaD0xKTtmb3IodmFyIGY9bmV3IEFycmF5KHIrMSksYT0wO3I+PWE7KythKWZbYV09bihjW2FdKS9oO3JldHVybiBmfWUuZXhwb3J0cz1pO3ZhciBvPXQoInJvYnVzdC1saW5lYXItc29sdmUiKX0seyJyb2J1c3QtbGluZWFyLXNvbHZlIjo0NTl9XSwxNjM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj0xZS02LGk9MWUtNjtyLnZlcnRleE5vcm1hbHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgaT1lLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPXZvaWQgMD09PXI/bjpyLHM9MDtpPnM7KytzKW9bc109WzAsMCwwXTtmb3IodmFyIHM9MDtzPHQubGVuZ3RoOysrcylmb3IodmFyIGw9dFtzXSx1PTAsYz1sW2wubGVuZ3RoLTFdLGg9bFswXSxmPTA7ZjxsLmxlbmd0aDsrK2Ype3U9YyxjPWgsaD1sWyhmKzEpJWwubGVuZ3RoXTtmb3IodmFyIHA9ZVt1XSxkPWVbY10sbT1lW2hdLGc9bmV3IEFycmF5KDMpLHY9MCx5PW5ldyBBcnJheSgzKSxiPTAseD0wOzM+eDsrK3gpZ1t4XT1wW3hdLWRbeF0sdis9Z1t4XSpnW3hdLHlbeF09bVt4XS1kW3hdLGIrPXlbeF0qeVt4XTtpZih2KmI+YSlmb3IodmFyIF89b1tjXSx3PTEvTWF0aC5zcXJ0KHYqYikseD0wOzM+eDsrK3gpe3ZhciBNPSh4KzEpJTMsaz0oeCsyKSUzO19beF0rPXcqKHlbTV0qZ1trXS15W2tdKmdbTV0pfX1mb3IodmFyIHM9MDtpPnM7KytzKXtmb3IodmFyIF89b1tzXSxBPTAseD0wOzM+eDsrK3gpQSs9X1t4XSpfW3hdO2lmKEE+YSlmb3IodmFyIHc9MS9NYXRoLnNxcnQoQSkseD0wOzM+eDsrK3gpX1t4XSo9dztlbHNlIGZvcih2YXIgeD0wOzM+eDsrK3gpX1t4XT0wfXJldHVybiBvfSxyLmZhY2VOb3JtYWxzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgsbz1uZXcgQXJyYXkobiksYT12b2lkIDA9PT1yP2k6cixzPTA7bj5zOysrcyl7Zm9yKHZhciBsPXRbc10sdT1uZXcgQXJyYXkoMyksYz0wOzM+YzsrK2MpdVtjXT1lW2xbY11dO2Zvcih2YXIgaD1uZXcgQXJyYXkoMyksZj1uZXcgQXJyYXkoMyksYz0wOzM+YzsrK2MpaFtjXT11WzFdW2NdLXVbMF1bY10sZltjXT11WzJdW2NdLXVbMF1bY107Zm9yKHZhciBwPW5ldyBBcnJheSgzKSxkPTAsYz0wOzM+YzsrK2Mpe3ZhciBtPShjKzEpJTMsZz0oYysyKSUzO3BbY109aFttXSpmW2ddLWhbZ10qZlttXSxkKz1wW2NdKnBbY119ZD1kPmE/MS9NYXRoLnNxcnQoZCk6MDtmb3IodmFyIGM9MDszPmM7KytjKXBbY10qPWQ7b1tzXT1wfXJldHVybiBvfX0se31dLDE2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4scyl7aS5sZW5ndGg8bi5sZW5ndGgmJihpPW5ldyBGbG9hdDY0QXJyYXkobi5sZW5ndGgpLG89bmV3IEZsb2F0NjRBcnJheShuLmxlbmd0aCksYT1uZXcgRmxvYXQ2NEFycmF5KG4ubGVuZ3RoKSk7Zm9yKHZhciBsPTA7bDxuLmxlbmd0aDsrK2wpaVtsXT10W2xdLW5bbF0sb1tsXT1lW2xdLXRbbF0sYVtsXT1yW2xdLXRbbF07Zm9yKHZhciB1PTAsYz0wLGg9MCxmPTAscD0wLGQ9MCxsPTA7bDxuLmxlbmd0aDsrK2wpe3ZhciBtPW9bbF0sZz1hW2xdLHY9aVtsXTt1Kz1tKm0sYys9bSpnLGgrPWcqZyxmKz12Km0scCs9dipnLGQrPXYqdn12YXIgeSxiPU1hdGguYWJzKHUqaC1jKmMpLHg9YypwLWgqZixfPWMqZi11KnA7aWYoYj49eCtfKWlmKDA+eCkwPl8mJjA+Zj8oXz0wLC1mPj11Pyh4PTEseT11KzIqZitkKTooeD0tZi91LHk9Zip4K2QpKTooeD0wLHA+PTA/KF89MCx5PWQpOi1wPj1oPyhfPTEseT1oKzIqcCtkKTooXz0tcC9oLHk9cCpfK2QpKTtlbHNlIGlmKDA+XylfPTAsZj49MD8oeD0wLHk9ZCk6LWY+PXU/KHg9MSx5PXUrMipmK2QpOih4PS1mL3UseT1mKngrZCk7ZWxzZXt2YXIgdz0xL2I7eCo9dyxfKj13LHk9eCoodSp4K2MqXysyKmYpK18qKGMqeCtoKl8rMipwKStkfWVsc2V7dmFyIE0sayxBLFQ7MD54PyhNPWMrZixrPWgrcCxrPk0/KEE9ay1NLFQ9dS0yKmMraCxBPj1UPyh4PTEsXz0wLHk9dSsyKmYrZCk6KHg9QS9ULF89MS14LHk9eCoodSp4K2MqXysyKmYpK18qKGMqeCtoKl8rMipwKStkKSk6KHg9MCwwPj1rPyhfPTEseT1oKzIqcCtkKTpwPj0wPyhfPTAseT1kKTooXz0tcC9oLHk9cCpfK2QpKSk6MD5fPyhNPWMrcCxrPXUrZixrPk0/KEE9ay1NLFQ9dS0yKmMraCxBPj1UPyhfPTEseD0wLHk9aCsyKnArZCk6KF89QS9ULHg9MS1fLHk9eCoodSp4K2MqXysyKmYpK18qKGMqeCtoKl8rMipwKStkKSk6KF89MCwwPj1rPyh4PTEseT11KzIqZitkKTpmPj0wPyh4PTAseT1kKTooeD0tZi91LHk9Zip4K2QpKSk6KEE9aCtwLWMtZiwwPj1BPyh4PTAsXz0xLHk9aCsyKnArZCk6KFQ9dS0yKmMraCxBPj1UPyh4PTEsXz0wLHk9dSsyKmYrZCk6KHg9QS9ULF89MS14LHk9eCoodSp4K2MqXysyKmYpK18qKGMqeCtoKl8rMipwKStkKSkpfWZvcih2YXIgRT0xLXgtXyxsPTA7bDxuLmxlbmd0aDsrK2wpc1tsXT1FKnRbbF0reCplW2xdK18qcltsXTtyZXR1cm4gMD55PzA6eX12YXIgaT1uZXcgRmxvYXQ2NEFycmF5KDQpLG89bmV3IEZsb2F0NjRBcnJheSg0KSxhPW5ldyBGbG9hdDY0QXJyYXkoNCk7ZS5leHBvcnRzPW59LHt9XSwxNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG49MDtlPm47KytuKXI9MHxNYXRoLm1heChyLHRbbl0ubGVuZ3RoKTtyZXR1cm4gci0xfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1oLm1hbGxvY1VpbnQ4KHIpLGk9MDtyPmk7KytpKW5baV09dFtpXTxlfDA7cmV0dXJuIG59ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUqKGUrMSkvMipyfDAsaT1oLm1hbGxvY1VpbnQzMigyKm4pLG89MCxhPTA7cj5hOysrYSlmb3IodmFyIHM9dFthXSxlPXMubGVuZ3RoLGw9MDtlPmw7KytsKWZvcih2YXIgdT0wO2w+dTsrK3Upe3ZhciBwPXNbdV0sZD1zW2xdO2lbbysrXT0wfE1hdGgubWluKHAsZCksaVtvKytdPTB8TWF0aC5tYXgocCxkKX12YXIgbT1vLzJ8MDtmKGMoaSxbbSwyXSkpO2Zvcih2YXIgZz0yLGE9MjtvPmE7YSs9MilpW2EtMl09PT1pW2FdJiZpW2EtMV09PT1pW2ErMV18fChpW2crK109aVthXSxpW2crK109aVthKzFdKTtyZXR1cm4gYyhpLFtnLzJ8MCwyXSl9ZnVuY3Rpb24gYSh0LGUscixuKXtmb3IodmFyIGk9dC5kYXRhLG89dC5zaGFwZVswXSxhPWgubWFsbG9jRG91YmxlKG8pLHM9MCxsPTA7bz5sOysrbCl7dmFyIHU9aVsyKmxdLGY9aVsyKmwrMV07aWYoclt1XSE9PXJbZl0pe3ZhciBwPWVbdV0sZD1lW2ZdO2lbMipzXT11LGlbMipzKzFdPWYsYVtzKytdPShkLW4pLyhkLXApfX1yZXR1cm4gdC5zaGFwZVswXT1zLGMoYSxbc10pfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1oLm1hbGxvY0ludDMyKDIqZSksbj10LnNoYXBlWzBdLGk9dC5kYXRhO3JbMF09MDtmb3IodmFyIG89MCxhPTA7bj5hOysrYSl7dmFyIHM9aVsyKmFdO2lmKHMhPT1vKXtmb3IoclsyKm8rMV09YTsrK288czspclsyKm9dPWEsclsyKm8rMV09YTtyWzIqb109YX19Zm9yKHJbMipvKzFdPW47KytvPGU7KXJbMipvXT1yWzIqbysxXT1uO3JldHVybiByfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPTB8dC5zaGFwZVswXSxyPXQuZGF0YSxuPW5ldyBBcnJheShlKSxpPTA7ZT5pOysraSluW2ldPVtyWzIqaV0sclsyKmkrMV1dO3JldHVybiBufWZ1bmN0aW9uIHUodCxlLHIsdSl7cj1yfHwwLCJ1bmRlZmluZWQiPT10eXBlb2YgdSYmKHU9bih0KSk7dmFyIGM9dC5sZW5ndGg7aWYoMD09PWN8fDE+dSlyZXR1cm57Y2VsbHM6W10sdmVydGV4SWRzOltdLHZlcnRleFdlaWdodHM6W119O3ZhciBmPWkoZSwrciksZD1vKHQsdSksbT1hKGQsZSxmLCtyKSxnPXMoZCwwfGUubGVuZ3RoKSx2PXAodSkodCxkLmRhdGEsZyxmKSx5PWwoZCksYj1bXS5zbGljZS5jYWxsKG0uZGF0YSwwLG0uc2hhcGVbMF0pO3JldHVybiBoLmZyZWUoZiksaC5mcmVlKGQuZGF0YSksaC5mcmVlKG0uZGF0YSksaC5mcmVlKGcpLHtjZWxsczp2LHZlcnRleElkczp5LHZlcnRleFdlaWdodHM6Yn19ZS5leHBvcnRzPXU7dmFyIGM9dCgibmRhcnJheSIpLGg9dCgidHlwZWRhcnJheS1wb29sIiksZj10KCJuZGFycmF5LXNvcnQiKSxwPXQoIi4vbGliL2NvZGVnZW4iKX0seyIuL2xpYi9jb2RlZ2VuIjoxNjYsbmRhcnJheTo0NTYsIm5kYXJyYXktc29ydCI6MTY5LCJ0eXBlZGFycmF5LXBvb2wiOjQ4MX1dLDE2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUodCl7aWYoISh0Lmxlbmd0aDw9MCkpe3UucHVzaCgiUi5wdXNoKCIpO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7KytlKXt2YXIgcj10W2VdO2U+MCYmdS5wdXNoKCIsIiksdS5wdXNoKCJbIik7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl07bj4wJiZ1LnB1c2goIiwiKSx1LnB1c2goIkIoQyxFLGNbIixpWzBdLCJdLGNbIixpWzFdLCJdKSIpfXUucHVzaCgiXSIpfXUucHVzaCgiKTsiKX19dmFyIHI9MCxuPW5ldyBBcnJheSh0KzEpO25bMF09W1tdXTtmb3IodmFyIGk9MTt0Pj1pOysraSlmb3IodmFyIHM9bltpXT1hKGkpLGw9MDtsPHMubGVuZ3RoOysrbClyPU1hdGgubWF4KHIsc1tpXS5sZW5ndGgpO2Zvcih2YXIgdT1bImZ1bmN0aW9uIEIoQyxFLGksail7IiwidmFyIGE9TWF0aC5taW4oaSxqKXwwLGI9TWF0aC5tYXgoaSxqKXwwLGw9Q1syKmFdLGg9Q1syKmErMV07Iiwid2hpbGUobDxoKXsiLCJ2YXIgbT0obCtoKT4+MSx2PUVbMiptKzFdOyIsImlmKHY9PT1iKXtyZXR1cm4gbX0iLCJpZihiPHYpe2g9bX1lbHNle2w9bSsxfSIsIn0iLCJyZXR1cm4gbDsiLCJ9OyIsImZ1bmN0aW9uIGdldENvbnRvdXIiLHQsImQoRixFLEMsUyl7IiwidmFyIG49Ri5sZW5ndGgsUj1bXTsiLCJmb3IodmFyIGk9MDtpPG47KytpKXt2YXIgYz1GW2ldLGw9Yy5sZW5ndGg7Il0saT10KzE7aT4xOy0taSl7dCsxPmkmJnUucHVzaCgiZWxzZSAiKSx1LnB1c2goImlmKGw9PT0iLGksIil7Iik7Zm9yKHZhciBjPVtdLGw9MDtpPmw7KytsKWMucHVzaCgiKFNbY1siK2wrIl1dPDwiK2wrIikiKTt1LnB1c2goInZhciBNPSIsYy5qb2luKCIrIiksIjtpZihNPT09MHx8TT09PSIsKDE8PGkpLTEsIil7Y29udGludWV9c3dpdGNoKE0peyIpO2Zvcih2YXIgcz1uW2ktMV0sbD0wO2w8cy5sZW5ndGg7KytsKXUucHVzaCgiY2FzZSAiLGwsIjoiKSxlKHNbbF0pLHUucHVzaCgiYnJlYWs7Iik7dS5wdXNoKCJ9fSIpfXUucHVzaCgifXJldHVybiBSO307cmV0dXJuIGdldENvbnRvdXIiLHQsImQiKTt2YXIgaD1uZXcgRnVuY3Rpb24oInBvb2wiLHUuam9pbigiIikpO3JldHVybiBoKG8pfWZ1bmN0aW9uIGkodCl7dmFyIGU9c1t0XTtyZXR1cm4gZXx8KGU9c1t0XT1uKHQpKSxlfWUuZXhwb3J0cz1pO3ZhciBvPXQoInR5cGVkYXJyYXktcG9vbCIpLGE9dCgibWFyY2hpbmctc2ltcGxleC10YWJsZSIpLHM9e319LHsibWFyY2hpbmctc2ltcGxleC10YWJsZSI6MTY3LCJ0eXBlZGFycmF5LXBvb2wiOjQ4MX1dLDE2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KHQpLGk9MDt0Pmk7KytpKW5baV09MCxpPT09ZSYmKG5baV0rPS41KSxpPT09ciYmKG5baV0rPS41KTtyZXR1cm4gbn1mdW5jdGlvbiBpKHQsZSl7aWYoMD09PWV8fGU9PT0oMTw8dCsxKS0xKXJldHVybltdO2Zvcih2YXIgcj1bXSxpPVtdLG89MDt0Pj1vOysrbylpZihlJjE8PG8pe3IucHVzaChuKHQsby0xLG8tMSkpLGkucHVzaChudWxsKTtmb3IodmFyIHM9MDt0Pj1zOysrcyl+ZSYxPDxzJiYoci5wdXNoKG4odCxvLTEscy0xKSksaS5wdXNoKFtvLHNdKSl9dmFyIGw9YShyKSx1PVtdO3Q6Zm9yKHZhciBvPTA7bzxsLmxlbmd0aDsrK28pe2Zvcih2YXIgYz1sW29dLGg9W10scz0wO3M8Yy5sZW5ndGg7KytzKXtpZighaVtjW3NdXSljb250aW51ZSB0O2gucHVzaChpW2Nbc11dLnNsaWNlKCkpfXUucHVzaChoKX1yZXR1cm4gdX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT0xPDx0KzEscj1uZXcgQXJyYXkoZSksbj0wO2U+bjsrK24pcltuXT1pKHQsbik7cmV0dXJuIHJ9ZS5leHBvcnRzPW87dmFyIGE9dCgiY29udmV4LWh1bGwiKX0seyJjb252ZXgtaHVsbCI6MTEzfV0sMTY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7c3dpdGNoKHQpe2Nhc2UidWludDgiOnJldHVybltsLm1hbGxvY1VpbnQ4LGwuZnJlZVVpbnQ4XTtjYXNlInVpbnQxNiI6cmV0dXJuW2wubWFsbG9jVWludDE2LGwuZnJlZVVpbnQxNl07Y2FzZSJ1aW50MzIiOnJldHVybltsLm1hbGxvY1VpbnQzMixsLmZyZWVVaW50MzJdO2Nhc2UiaW50OCI6cmV0dXJuW2wubWFsbG9jSW50OCxsLmZyZWVJbnQ4XTtjYXNlImludDE2IjpyZXR1cm5bbC5tYWxsb2NJbnQxNixsLmZyZWVJbnQxNl07Y2FzZSJpbnQzMiI6cmV0dXJuW2wubWFsbG9jSW50MzIsbC5mcmVlSW50MzJdO2Nhc2UiZmxvYXQzMiI6cmV0dXJuW2wubWFsbG9jRmxvYXQsbC5mcmVlRmxvYXRdO2Nhc2UiZmxvYXQ2NCI6cmV0dXJuW2wubWFsbG9jRG91YmxlLGwuZnJlZURvdWJsZV07ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9W10scj0wO3Q+cjsrK3IpZS5wdXNoKCJzIityKTtmb3IodmFyIHI9MDt0PnI7KytyKWUucHVzaCgibiIrcik7Zm9yKHZhciByPTE7dD5yOysrcillLnB1c2goImQiK3IpO2Zvcih2YXIgcj0xO3Q+cjsrK3IpZS5wdXNoKCJlIityKTtmb3IodmFyIHI9MTt0PnI7KytyKWUucHVzaCgiZiIrcik7cmV0dXJuIGV9ZnVuY3Rpb24gbyh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuZ2V0KCIsdCwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl0iXS5qb2luKCIiKX1mdW5jdGlvbiBvKHQscil7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuc2V0KCIsdCwiLCIsciwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl09IixyXS5qb2luKCIiKX12YXIgYT1bIid1c2Ugc3RyaWN0JyJdLHM9WyJuZGFycmF5SW5zZXJ0aW9uU29ydCIsdC5qb2luKCJkIiksZV0uam9pbigiIiksbD1bImxlZnQiLCJyaWdodCIsImRhdGEiLCJvZmZzZXQiXS5jb25jYXQoaSh0Lmxlbmd0aCkpLHU9bihlKSxjPVsiaSxqLGNwdHIscHRyPWxlZnQqczArb2Zmc2V0Il07aWYodC5sZW5ndGg+MSl7Zm9yKHZhciBoPVtdLGY9MTtmPHQubGVuZ3RoOysrZiljLnB1c2goImkiK2YpLGgucHVzaCgibiIrZik7dT9jLnB1c2goInNjcmF0Y2g9bWFsbG9jKCIraC5qb2luKCIqIikrIikiKTpjLnB1c2goInNjcmF0Y2g9bmV3IEFycmF5KCIraC5qb2luKCIqIikrIikiKSxjLnB1c2goImRwdHIiLCJzcHRyIiwiYSIsImIiKX1lbHNlIGMucHVzaCgic2NyYXRjaCIpO2lmKGEucHVzaChbImZ1bmN0aW9uICIscywiKCIsbC5qb2luKCIsIiksIil7dmFyICIsYy5qb2luKCIsIildLmpvaW4oIiIpLCJmb3IoaT1sZWZ0KzE7aTw9cmlnaHQ7KytpKXsiLCJqPWk7cHRyKz1zMCIsImNwdHI9cHRyIiksdC5sZW5ndGg+MSl7YS5wdXNoKCJkcHRyPTA7c3B0cj1wdHIiKTtmb3IodmFyIGY9dC5sZW5ndGgtMTtmPj0wOy0tZil7dmFyIHA9dFtmXTswIT09cCYmYS5wdXNoKFsiZm9yKGkiLHAsIj0wO2kiLHAsIjxuIixwLCI7KytpIixwLCIpeyJdLmpvaW4oIiIpKX1hLnB1c2goInNjcmF0Y2hbZHB0cisrXT0iLHIoInNwdHIiKSk7Zm9yKHZhciBmPTA7Zjx0Lmxlbmd0aDsrK2Ype3ZhciBwPXRbZl07MCE9PXAmJmEucHVzaCgic3B0cis9ZCIrcCwifSIpfWEucHVzaCgiX19nOndoaWxlKGotLT5sZWZ0KXsiLCJkcHRyPTAiLCJzcHRyPWNwdHItczAiKTtmb3IodmFyIGY9MTtmPHQubGVuZ3RoOysrZikxPT09ZiYmYS5wdXNoKCJfX2w6IiksYS5wdXNoKFsiZm9yKGkiLGYsIj0wO2kiLGYsIjxuIixmLCI7KytpIixmLCIpeyJdLmpvaW4oIiIpKTthLnB1c2goWyJhPSIscigic3B0ciIpLCJcbmI9c2NyYXRjaFtkcHRyXVxuaWYoYTxiKXticmVhayBfX2d9XG5pZihhPmIpe2JyZWFrIF9fbH0iXS5qb2luKCIiKSk7Zm9yKHZhciBmPXQubGVuZ3RoLTE7Zj49MTstLWYpYS5wdXNoKCJzcHRyKz1lIitmLCJkcHRyKz1mIitmLCJ9Iik7YS5wdXNoKCJkcHRyPWNwdHI7c3B0cj1jcHRyLXMwIik7Zm9yKHZhciBmPXQubGVuZ3RoLTE7Zj49MDstLWYpe3ZhciBwPXRbZl07MCE9PXAmJmEucHVzaChbImZvcihpIixwLCI9MDtpIixwLCI8biIscCwiOysraSIscCwiKXsiXS5qb2luKCIiKSl9YS5wdXNoKG8oImRwdHIiLHIoInNwdHIiKSkpO2Zvcih2YXIgZj0wO2Y8dC5sZW5ndGg7KytmKXt2YXIgcD10W2ZdOzAhPT1wJiZhLnB1c2goWyJkcHRyKz1kIixwLCI7c3B0cis9ZCIscF0uam9pbigiIiksIn0iKX1hLnB1c2goImNwdHItPXMwXG59IiksYS5wdXNoKCJkcHRyPWNwdHI7c3B0cj0wIik7Zm9yKHZhciBmPXQubGVuZ3RoLTE7Zj49MDstLWYpe3ZhciBwPXRbZl07MCE9PXAmJmEucHVzaChbImZvcihpIixwLCI9MDtpIixwLCI8biIscCwiOysraSIscCwiKXsiXS5qb2luKCIiKSl9YS5wdXNoKG8oImRwdHIiLCJzY3JhdGNoW3NwdHIrK10iKSk7Zm9yKHZhciBmPTA7Zjx0Lmxlbmd0aDsrK2Ype3ZhciBwPXRbZl07MCE9PXAmJmEucHVzaCgiZHB0cis9ZCIrcCwifSIpfX1lbHNlIGEucHVzaCgic2NyYXRjaD0iK3IoInB0ciIpLCJ3aGlsZSgoai0tPmxlZnQpJiYoIityKCJjcHRyLXMwIikrIj5zY3JhdGNoKSl7IixvKCJjcHRyIixyKCJjcHRyLXMwIikpLCJjcHRyLT1zMCIsIn0iLG8oImNwdHIiLCJzY3JhdGNoIikpO2lmKGEucHVzaCgifSIpLHQubGVuZ3RoPjEmJnUmJmEucHVzaCgiZnJlZShzY3JhdGNoKSIpLGEucHVzaCgifSByZXR1cm4gIitzKSx1KXt2YXIgZD1uZXcgRnVuY3Rpb24oIm1hbGxvYyIsImZyZWUiLGEuam9pbigiXG4iKSk7cmV0dXJuIGQodVswXSx1WzFdKX12YXIgZD1uZXcgRnVuY3Rpb24oYS5qb2luKCJcbiIpKTtyZXR1cm4gZCgpfWZ1bmN0aW9uIGEodCxlLHIpe2Z1bmN0aW9uIG8odCl7cmV0dXJuWyIob2Zmc2V0KyIsdCwiKnMwKSJdLmpvaW4oIiIpfWZ1bmN0aW9uIGEodCl7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuZ2V0KCIsdCwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl0iXS5qb2luKCIiKX1mdW5jdGlvbiBzKHQscil7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuc2V0KCIsdCwiLCIsciwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl09IixyXS5qb2luKCIiKX1mdW5jdGlvbiBsKGUscixuKXtpZigxPT09ZS5sZW5ndGgpXy5wdXNoKCJwdHIwPSIrbyhlWzBdKSk7ZWxzZSBmb3IodmFyIGk9MDtpPGUubGVuZ3RoOysraSlfLnB1c2goWyJiX3B0ciIsaSwiPXMwKiIsZVtpXV0uam9pbigiIikpO3ImJl8ucHVzaCgicGl2b3RfcHRyPTAiKSxfLnB1c2goInB0cl9zaGlmdD1vZmZzZXQiKTtmb3IodmFyIGk9dC5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dFtpXTswIT09YSYmXy5wdXNoKFsiZm9yKGkiLGEsIj0wO2kiLGEsIjxuIixhLCI7KytpIixhLCIpeyJdLmpvaW4oIiIpKX1pZihlLmxlbmd0aD4xKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKV8ucHVzaChbInB0ciIsaSwiPWJfcHRyIixpLCIrcHRyX3NoaWZ0Il0uam9pbigiIikpO18ucHVzaChuKSxyJiZfLnB1c2goIisrcGl2b3RfcHRyIik7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDsrK2kpe3ZhciBhPXRbaV07MCE9PWEmJihlLmxlbmd0aD4xP18ucHVzaCgicHRyX3NoaWZ0Kz1kIithKTpfLnB1c2goInB0cjArPWQiK2EpLF8ucHVzaCgifSIpKX19ZnVuY3Rpb24gYyhlLHIsbixpKXtpZigxPT09ci5sZW5ndGgpXy5wdXNoKCJwdHIwPSIrbyhyWzBdKSk7ZWxzZXtmb3IodmFyIGE9MDthPHIubGVuZ3RoOysrYSlfLnB1c2goWyJiX3B0ciIsYSwiPXMwKiIsclthXV0uam9pbigiIikpO18ucHVzaCgicHRyX3NoaWZ0PW9mZnNldCIpfW4mJl8ucHVzaCgicGl2b3RfcHRyPTAiKSxlJiZfLnB1c2goZSsiOiIpO2Zvcih2YXIgYT0xO2E8dC5sZW5ndGg7KythKV8ucHVzaChbImZvcihpIixhLCI9MDtpIixhLCI8biIsYSwiOysraSIsYSwiKXsiXS5qb2luKCIiKSk7aWYoci5sZW5ndGg+MSlmb3IodmFyIGE9MDthPHIubGVuZ3RoOysrYSlfLnB1c2goWyJwdHIiLGEsIj1iX3B0ciIsYSwiK3B0cl9zaGlmdCJdLmpvaW4oIiIpKTtfLnB1c2goaSk7Zm9yKHZhciBhPXQubGVuZ3RoLTE7YT49MTstLWEpbiYmXy5wdXNoKCJwaXZvdF9wdHIrPWYiK2EpLHIubGVuZ3RoPjE/Xy5wdXNoKCJwdHJfc2hpZnQrPWUiK2EpOl8ucHVzaCgicHRyMCs9ZSIrYSksXy5wdXNoKCJ9Iil9ZnVuY3Rpb24gaCgpe3QubGVuZ3RoPjEmJmsmJl8ucHVzaCgiZnJlZShwaXZvdDEpIiwiZnJlZShwaXZvdDIpIil9ZnVuY3Rpb24gZihlLHIpe3ZhciBuPSJlbCIrZSxpPSJlbCIrcjtpZih0Lmxlbmd0aD4xKXt2YXIgcz0iX19sIisgKytBO2MocyxbbixpXSwhMSxbImNvbXA9IixhKCJwdHIwIiksIi0iLGEoInB0cjEiKSwiXG4iLCJpZihjb21wPjApe3RtcDA9IixuLCI7IixuLCI9IixpLCI7IixpLCI9dG1wMDticmVhayAiLHMsIn1cbiIsImlmKGNvbXA8MCl7YnJlYWsgIixzLCJ9Il0uam9pbigiIikpfWVsc2UgXy5wdXNoKFsiaWYoIixhKG8obikpLCI+IixhKG8oaSkpLCIpe3RtcDA9IixuLCI7IixuLCI9IixpLCI7IixpLCI9dG1wMH0iXS5qb2luKCIiKSl9ZnVuY3Rpb24gcChlLHIpe3QubGVuZ3RoPjE/bChbZSxyXSwhMSxzKCJwdHIwIixhKCJwdHIxIikpKTpfLnB1c2gocyhvKGUpLGEobyhyKSkpKX1mdW5jdGlvbiBkKGUscixuKXtpZih0Lmxlbmd0aD4xKXt2YXIgaT0iX19sIisgKytBO2MoaSxbcl0sITAsW2UsIj0iLGEoInB0cjAiKSwiLXBpdm90IixuLCJbcGl2b3RfcHRyXVxuIiwiaWYoIixlLCIhPT0wKXticmVhayAiLGksIn0iXS5qb2luKCIiKSl9ZWxzZSBfLnB1c2goW2UsIj0iLGEobyhyKSksIi1waXZvdCIsbl0uam9pbigiIikpfWZ1bmN0aW9uIG0oZSxyKXt0Lmxlbmd0aD4xP2woW2Uscl0sITEsWyJ0bXA9IixhKCJwdHIwIiksIlxuIixzKCJwdHIwIixhKCJwdHIxIikpLCJcbiIscygicHRyMSIsInRtcCIpXS5qb2luKCIiKSk6Xy5wdXNoKFsicHRyMD0iLG8oZSksIlxuIiwicHRyMT0iLG8ociksIlxuIiwidG1wPSIsYSgicHRyMCIpLCJcbiIscygicHRyMCIsYSgicHRyMSIpKSwiXG4iLHMoInB0cjEiLCJ0bXAiKV0uam9pbigiIikpfWZ1bmN0aW9uIGcoZSxyLG4pe3QubGVuZ3RoPjE/KGwoW2UscixuXSwhMSxbInRtcD0iLGEoInB0cjAiKSwiXG4iLHMoInB0cjAiLGEoInB0cjEiKSksIlxuIixzKCJwdHIxIixhKCJwdHIyIikpLCJcbiIscygicHRyMiIsInRtcCIpXS5qb2luKCIiKSksXy5wdXNoKCIrKyIrciwiLS0iK24pKTpfLnB1c2goWyJwdHIwPSIsbyhlKSwiXG4iLCJwdHIxPSIsbyhyKSwiXG4iLCJwdHIyPSIsbyhuKSwiXG4iLCIrKyIsciwiXG4iLCItLSIsbiwiXG4iLCJ0bXA9IixhKCJwdHIwIiksIlxuIixzKCJwdHIwIixhKCJwdHIxIikpLCJcbiIscygicHRyMSIsYSgicHRyMiIpKSwiXG4iLHMoInB0cjIiLCJ0bXAiKV0uam9pbigiIikpfWZ1bmN0aW9uIHYodCxlKXttKHQsZSksXy5wdXNoKCItLSIrZSl9ZnVuY3Rpb24geShlLHIsbil7dC5sZW5ndGg+MT9sKFtlLHJdLCEwLFtzKCJwdHIwIixhKCJwdHIxIikpLCJcbiIscygicHRyMSIsWyJwaXZvdCIsbiwiW3Bpdm90X3B0cl0iXS5qb2luKCIiKSldLmpvaW4oIiIpKTpfLnB1c2gocyhvKGUpLGEobyhyKSkpLHMobyhyKSwicGl2b3QiK24pKX1mdW5jdGlvbiBiKGUscil7Xy5wdXNoKFsiaWYoKCIsciwiLSIsZSwiKTw9Iix1LCIpe1xuIiwiaW5zZXJ0aW9uU29ydCgiLGUsIiwiLHIsIixkYXRhLG9mZnNldCwiLGkodC5sZW5ndGgpLmpvaW4oIiwiKSwiKVxuIiwifWVsc2V7XG4iLHcsIigiLGUsIiwiLHIsIixkYXRhLG9mZnNldCwiLGkodC5sZW5ndGgpLmpvaW4oIiwiKSwiKVxuIiwifSJdLmpvaW4oIiIpKX1mdW5jdGlvbiB4KGUscixuKXt0Lmxlbmd0aD4xPyhfLnB1c2goWyJfX2wiLCsrQSwiOndoaWxlKHRydWUpeyJdLmpvaW4oIiIpKSxsKFtlXSwhMCxbImlmKCIsYSgicHRyMCIpLCIhPT1waXZvdCIsciwiW3Bpdm90X3B0cl0pe2JyZWFrIF9fbCIsQSwifSJdLmpvaW4oIiIpKSxfLnB1c2gobiwifSIpKTpfLnB1c2goWyJ3aGlsZSgiLGEobyhlKSksIj09PXBpdm90IixyLCIpeyIsbiwifSJdLmpvaW4oIiIpKX12YXIgXz1bIid1c2Ugc3RyaWN0JyJdLHc9WyJuZGFycmF5UXVpY2tTb3J0Iix0LmpvaW4oImQiKSxlXS5qb2luKCIiKSxNPVsibGVmdCIsInJpZ2h0IiwiZGF0YSIsIm9mZnNldCJdLmNvbmNhdChpKHQubGVuZ3RoKSksaz1uKGUpLEE9MDtfLnB1c2goWyJmdW5jdGlvbiAiLHcsIigiLE0uam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTt2YXIgVD1bInNpeHRoPSgocmlnaHQtbGVmdCsxKS82KXwwIiwiaW5kZXgxPWxlZnQrc2l4dGgiLCJpbmRleDU9cmlnaHQtc2l4dGgiLCJpbmRleDM9KGxlZnQrcmlnaHQpPj4xIiwiaW5kZXgyPWluZGV4My1zaXh0aCIsImluZGV4ND1pbmRleDMrc2l4dGgiLCJlbDE9aW5kZXgxIiwiZWwyPWluZGV4MiIsImVsMz1pbmRleDMiLCJlbDQ9aW5kZXg0IiwiZWw1PWluZGV4NSIsImxlc3M9bGVmdCsxIiwiZ3JlYXQ9cmlnaHQtMSIsInBpdm90c19hcmVfZXF1YWw9dHJ1ZSIsInRtcCIsInRtcDAiLCJ4IiwieSIsInoiLCJrIiwicHRyMCIsInB0cjEiLCJwdHIyIiwiY29tcF9waXZvdDE9MCIsImNvbXBfcGl2b3QyPTAiLCJjb21wPTAiXTtpZih0Lmxlbmd0aD4xKXtmb3IodmFyIEU9W10sUz0xO1M8dC5sZW5ndGg7KytTKUUucHVzaCgibiIrUyksVC5wdXNoKCJpIitTKTtmb3IodmFyIFM9MDs4PlM7KytTKVQucHVzaCgiYl9wdHIiK1MpO1QucHVzaCgicHRyMyIsInB0cjQiLCJwdHI1IiwicHRyNiIsInB0cjciLCJwaXZvdF9wdHIiLCJwdHJfc2hpZnQiLCJlbGVtZW50U2l6ZT0iK0Uuam9pbigiKiIpKSxrP1QucHVzaCgicGl2b3QxPW1hbGxvYyhlbGVtZW50U2l6ZSkiLCJwaXZvdDI9bWFsbG9jKGVsZW1lbnRTaXplKSIpOlQucHVzaCgicGl2b3QxPW5ldyBBcnJheShlbGVtZW50U2l6ZSkscGl2b3QyPW5ldyBBcnJheShlbGVtZW50U2l6ZSkiKX1lbHNlIFQucHVzaCgicGl2b3QxIiwicGl2b3QyIik7aWYoXy5wdXNoKCJ2YXIgIitULmpvaW4oIiwiKSksZigxLDIpLGYoNCw1KSxmKDEsMyksZigyLDMpLGYoMSw0KSxmKDMsNCksZigyLDUpLGYoMiwzKSxmKDQsNSksdC5sZW5ndGg+MT9sKFsiZWwxIiwiZWwyIiwiZWwzIiwiZWw0IiwiZWw1IiwiaW5kZXgxIiwiaW5kZXgzIiwiaW5kZXg1Il0sITAsWyJwaXZvdDFbcGl2b3RfcHRyXT0iLGEoInB0cjEiKSwiXG4iLCJwaXZvdDJbcGl2b3RfcHRyXT0iLGEoInB0cjMiKSwiXG4iLCJwaXZvdHNfYXJlX2VxdWFsPXBpdm90c19hcmVfZXF1YWwmJihwaXZvdDFbcGl2b3RfcHRyXT09PXBpdm90MltwaXZvdF9wdHJdKVxuIiwieD0iLGEoInB0cjAiKSwiXG4iLCJ5PSIsYSgicHRyMiIpLCJcbiIsIno9IixhKCJwdHI0IiksIlxuIixzKCJwdHI1IiwieCIpLCJcbiIscygicHRyNiIsInkiKSwiXG4iLHMoInB0cjciLCJ6IildLmpvaW4oIiIpKTpfLnB1c2goWyJwaXZvdDE9IixhKG8oImVsMiIpKSwiXG4iLCJwaXZvdDI9IixhKG8oImVsNCIpKSwiXG4iLCJwaXZvdHNfYXJlX2VxdWFsPXBpdm90MT09PXBpdm90MlxuIiwieD0iLGEobygiZWwxIikpLCJcbiIsInk9IixhKG8oImVsMyIpKSwiXG4iLCJ6PSIsYShvKCJlbDUiKSksIlxuIixzKG8oImluZGV4MSIpLCJ4IiksIlxuIixzKG8oImluZGV4MyIpLCJ5IiksIlxuIixzKG8oImluZGV4NSIpLCJ6IildLmpvaW4oIiIpKSxwKCJpbmRleDIiLCJsZWZ0IikscCgiaW5kZXg0IiwicmlnaHQiKSxfLnB1c2goImlmKHBpdm90c19hcmVfZXF1YWwpeyIpLF8ucHVzaCgiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2speyIpLGQoImNvbXAiLCJrIiwxKSxfLnB1c2goImlmKGNvbXA9PT0wKXtjb250aW51ZX0iKSxfLnB1c2goImlmKGNvbXA8MCl7IiksXy5wdXNoKCJpZihrIT09bGVzcyl7IiksbSgiayIsImxlc3MiKSxfLnB1c2goIn0iKSxfLnB1c2goIisrbGVzcyIpLF8ucHVzaCgifWVsc2V7IiksXy5wdXNoKCJ3aGlsZSh0cnVlKXsiKSxkKCJjb21wIiwiZ3JlYXQiLDEpLF8ucHVzaCgiaWYoY29tcD4wKXsiKSxfLnB1c2goImdyZWF0LS0iKSxfLnB1c2goIn1lbHNlIGlmKGNvbXA8MCl7IiksZygiayIsImxlc3MiLCJncmVhdCIpLF8ucHVzaCgiYnJlYWsiKSxfLnB1c2goIn1lbHNleyIpLHYoImsiLCJncmVhdCIpLF8ucHVzaCgiYnJlYWsiKSxfLnB1c2goIn0iKSxfLnB1c2goIn0iKSxfLnB1c2goIn0iKSxfLnB1c2goIn0iKSxfLnB1c2goIn1lbHNleyIpLF8ucHVzaCgiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2speyIpLGQoImNvbXBfcGl2b3QxIiwiayIsMSksXy5wdXNoKCJpZihjb21wX3Bpdm90MTwwKXsiKSxfLnB1c2goImlmKGshPT1sZXNzKXsiKSxtKCJrIiwibGVzcyIpLF8ucHVzaCgifSIpLF8ucHVzaCgiKytsZXNzIiksXy5wdXNoKCJ9ZWxzZXsiKSxkKCJjb21wX3Bpdm90MiIsImsiLDIpLF8ucHVzaCgiaWYoY29tcF9waXZvdDI+MCl7IiksXy5wdXNoKCJ3aGlsZSh0cnVlKXsiKSxkKCJjb21wIiwiZ3JlYXQiLDIpLF8ucHVzaCgiaWYoY29tcD4wKXsiKSxfLnB1c2goImlmKC0tZ3JlYXQ8ayl7YnJlYWt9IiksXy5wdXNoKCJjb250aW51ZSIpLF8ucHVzaCgifWVsc2V7IiksZCgiY29tcCIsImdyZWF0IiwxKSxfLnB1c2goImlmKGNvbXA8MCl7IiksZygiayIsImxlc3MiLCJncmVhdCIpLF8ucHVzaCgifWVsc2V7IiksdigiayIsImdyZWF0IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJicmVhayIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLHkoImxlZnQiLCIobGVzcy0xKSIsMSkseSgicmlnaHQiLCIoZ3JlYXQrMSkiLDIpLGIoImxlZnQiLCIobGVzcy0yKSIpLGIoIihncmVhdCsyKSIsInJpZ2h0IiksXy5wdXNoKCJpZihwaXZvdHNfYXJlX2VxdWFsKXsiKSxoKCksXy5wdXNoKCJyZXR1cm4iKSxfLnB1c2goIn0iKSxfLnB1c2goImlmKGxlc3M8aW5kZXgxJiZncmVhdD5pbmRleDUpeyIpLHgoImxlc3MiLDEsIisrbGVzcyIpLHgoImdyZWF0IiwyLCItLWdyZWF0IiksXy5wdXNoKCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7IiksZCgiY29tcF9waXZvdDEiLCJrIiwxKSxfLnB1c2goImlmKGNvbXBfcGl2b3QxPT09MCl7IiksXy5wdXNoKCJpZihrIT09bGVzcyl7IiksbSgiayIsImxlc3MiKSxfLnB1c2goIn0iKSxfLnB1c2goIisrbGVzcyIpLF8ucHVzaCgifWVsc2V7IiksZCgiY29tcF9waXZvdDIiLCJrIiwyKSxfLnB1c2goImlmKGNvbXBfcGl2b3QyPT09MCl7IiksXy5wdXNoKCJ3aGlsZSh0cnVlKXsiKSxkKCJjb21wIiwiZ3JlYXQiLDIpLF8ucHVzaCgiaWYoY29tcD09PTApeyIpLF8ucHVzaCgiaWYoLS1ncmVhdDxrKXticmVha30iKSxfLnB1c2goImNvbnRpbnVlIiksXy5wdXNoKCJ9ZWxzZXsiKSxkKCJjb21wIiwiZ3JlYXQiLDEpLF8ucHVzaCgiaWYoY29tcDwwKXsiKSxnKCJrIiwibGVzcyIsImdyZWF0IiksXy5wdXNoKCJ9ZWxzZXsiKSx2KCJrIiwiZ3JlYXQiKSxfLnB1c2goIn0iKSxfLnB1c2goImJyZWFrIiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksaCgpLGIoImxlc3MiLCJncmVhdCIpLF8ucHVzaCgifXJldHVybiAiK3cpLHQubGVuZ3RoPjEmJmspe3ZhciBMPW5ldyBGdW5jdGlvbigiaW5zZXJ0aW9uU29ydCIsIm1hbGxvYyIsImZyZWUiLF8uam9pbigiXG4iKSk7cmV0dXJuIEwocixrWzBdLGtbMV0pfXZhciBMPW5ldyBGdW5jdGlvbigiaW5zZXJ0aW9uU29ydCIsXy5qb2luKCJcbiIpKTtyZXR1cm4gTChyKX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9WyIndXNlIHN0cmljdCciXSxuPVsibmRhcnJheVNvcnRXcmFwcGVyIix0LmpvaW4oImQiKSxlXS5qb2luKCIiKSxzPVsiYXJyYXkiXTtyLnB1c2goWyJmdW5jdGlvbiAiLG4sIigiLHMuam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTtmb3IodmFyIGw9WyJkYXRhPWFycmF5LmRhdGEsb2Zmc2V0PWFycmF5Lm9mZnNldHwwLHNoYXBlPWFycmF5LnNoYXBlLHN0cmlkZT1hcnJheS5zdHJpZGUiXSxjPTA7Yzx0Lmxlbmd0aDsrK2MpbC5wdXNoKFsicyIsYywiPXN0cmlkZVsiLGMsIl18MCxuIixjLCI9c2hhcGVbIixjLCJdfDAiXS5qb2luKCIiKSk7Zm9yKHZhciBoPW5ldyBBcnJheSh0Lmxlbmd0aCksZj1bXSxjPTA7Yzx0Lmxlbmd0aDsrK2Mpe3ZhciBwPXRbY107MCE9PXAmJigwPT09Zi5sZW5ndGg/aFtwXT0iMSI6aFtwXT1mLmpvaW4oIioiKSxmLnB1c2goIm4iK3ApKX1mb3IodmFyIGQ9LTEsbT0tMSxjPTA7Yzx0Lmxlbmd0aDsrK2Mpe3ZhciBnPXRbY107MCE9PWcmJihkPjA/bC5wdXNoKFsiZCIsZywiPXMiLGcsIi1kIixkLCIqbiIsZF0uam9pbigiIikpOmwucHVzaChbImQiLGcsIj1zIixnXS5qb2luKCIiKSksZD1nKTt2YXIgcD10Lmxlbmd0aC0xLWM7MCE9PXAmJihtPjA/bC5wdXNoKFsiZSIscCwiPXMiLHAsIi1lIixtLCIqbiIsbSwiLGYiLHAsIj0iLGhbcF0sIi1mIixtLCIqbiIsbV0uam9pbigiIikpOmwucHVzaChbImUiLHAsIj1zIixwLCIsZiIscCwiPSIsaFtwXV0uam9pbigiIikpLG09cCl9ci5wdXNoKCJ2YXIgIitsLmpvaW4oIiwiKSk7dmFyIHY9WyIwIiwibjAtMSIsImRhdGEiLCJvZmZzZXQiXS5jb25jYXQoaSh0Lmxlbmd0aCkpO3IucHVzaChbImlmKG4wPD0iLHUsIil7IiwiaW5zZXJ0aW9uU29ydCgiLHYuam9pbigiLCIpLCIpfWVsc2V7IiwicXVpY2tTb3J0KCIsdi5qb2luKCIsIiksIil9Il0uam9pbigiIikpLHIucHVzaCgifXJldHVybiAiK24pO3ZhciB5PW5ldyBGdW5jdGlvbigiaW5zZXJ0aW9uU29ydCIsInF1aWNrU29ydCIsci5qb2luKCJcbiIpKSxiPW8odCxlKSx4PWEodCxlLGIpO3JldHVybiB5KGIseCl9dmFyIGw9dCgidHlwZWRhcnJheS1wb29sIiksdT0zMjtlLmV4cG9ydHM9c30seyJ0eXBlZGFycmF5LXBvb2wiOjQ4MX1dLDE2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXQub3JkZXIscj10LmR0eXBlLG49W2Uscl0sYT1uLmpvaW4oIjoiKSxzPW9bYV07cmV0dXJuIHN8fChvW2FdPXM9aShlLHIpKSxzKHQpLHR9dmFyIGk9dCgiLi9saWIvY29tcGlsZV9zb3J0LmpzIiksbz17fTtlLmV4cG9ydHM9bn0seyIuL2xpYi9jb21waWxlX3NvcnQuanMiOjE2OH1dLDE3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLnZibz1lLHRoaXMuc2hhZGVyPXJ9ZnVuY3Rpb24gaSh0KXt2YXIgZT10LmdsLHI9byhlLFswLDAsMCwxLDEsMCwxLDFdKSxpPWEoZSxzLmJveFZlcnQscy5saW5lRnJhZyk7cmV0dXJuIG5ldyBuKHQscixpKX1lLmV4cG9ydHM9aTt2YXIgbz10KCJnbC1idWZmZXIiKSxhPXQoImdsLXNoYWRlciIpLHM9dCgiLi9zaGFkZXJzIiksbD1uLnByb3RvdHlwZTtsLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sbC5kcmF3Qm94PWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXTtyZXR1cm4gZnVuY3Rpb24ocixuLGksbyxhKXt2YXIgcz10aGlzLnBsb3QsbD10aGlzLnNoYWRlcix1PXMuZ2w7dFswXT1yLHRbMV09bixlWzBdPWksZVsxXT1vLGwudW5pZm9ybXMubG89dCxsLnVuaWZvcm1zLmhpPWUsbC51bmlmb3Jtcy5jb2xvcj1hLHUuZHJhd0FycmF5cyh1LlRSSUFOR0xFX1NUUklQLDAsNCl9fSgpLGwuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MTczLCJnbC1idWZmZXIiOjEyOSwiZ2wtc2hhZGVyIjoyMDh9XSwxNzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLnBsb3Q9dCx0aGlzLnZibz1lLHRoaXMuc2hhZGVyPXIsdGhpcy50aWNrU2hhZGVyPW4sdGhpcy50aWNrcz1bW10sW11dfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC1lfWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5nbCxyPWEoZSksaT1zKGUsdS5ncmlkVmVydCx1LmdyaWRGcmFnKSxvPXMoZSx1LnRpY2tWZXJ0LHUuZ3JpZEZyYWcpLGw9bmV3IG4odCxyLGksbyk7cmV0dXJuIGx9ZS5leHBvcnRzPW87dmFyIGE9dCgiZ2wtYnVmZmVyIikscz10KCJnbC1zaGFkZXIiKSxsPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksdT10KCIuL3NoYWRlcnMiKSxjPW4ucHJvdG90eXBlO2MuZHJhdz1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF0scj1bMCwwXTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5wbG90LGk9dGhpcy52Ym8sbz10aGlzLnNoYWRlcixhPXRoaXMudGlja3Mscz1uLmdsLGw9bi5fdGlja0JvdW5kcyx1PW4uZGF0YUJveCxjPW4udmlld0JveCxoPW4uZ3JpZExpbmVXaWR0aCxmPW4uZ3JpZExpbmVDb2xvcixwPW4uZ3JpZExpbmVFbmFibGUsZD1uLnBpeGVsUmF0aW8sbT0wOzI+bTsrK20pe3ZhciBnPWxbbV0sdj1sW20rMl0seT12LWcsYj0uNSoodVttKzJdK3VbbV0pLHg9dVttKzJdLXVbbV07ZVttXT0yKnkveCx0W21dPTIqKGctYikveH1vLmJpbmQoKSxpLmJpbmQoKSxvLmF0dHJpYnV0ZXMuZGF0YUNvb3JkLnBvaW50ZXIoKSxvLnVuaWZvcm1zLmRhdGFTaGlmdD10LG8udW5pZm9ybXMuZGF0YVNjYWxlPWU7Zm9yKHZhciBfPTAsbT0wOzI+bTsrK20pe3JbMF09clsxXT0wLHJbbV09MSxvLnVuaWZvcm1zLmRhdGFBeGlzPXIsby51bmlmb3Jtcy5saW5lV2lkdGg9aFttXS8oY1ttKzJdLWNbbV0pKmQsby51bmlmb3Jtcy5jb2xvcj1mW21dO3ZhciB3PTYqYVttXS5sZW5ndGg7cFttXSYmdyYmcy5kcmF3QXJyYXlzKHMuVFJJQU5HTEVTLF8sdyksXys9d319fSgpLGMuZHJhd1RpY2tNYXJrcz1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF0scj1bMSwwXSxuPVswLDFdLG89WzAsMF0sYT1bMCwwXTtyZXR1cm4gZnVuY3Rpb24oKXsKZm9yKHZhciBzPXRoaXMucGxvdCx1PXRoaXMudmJvLGM9dGhpcy50aWNrU2hhZGVyLGg9dGhpcy50aWNrcyxmPXMuZ2wscD1zLl90aWNrQm91bmRzLGQ9cy5kYXRhQm94LG09cy52aWV3Qm94LGc9cy5waXhlbFJhdGlvLHY9cy5zY3JlZW5Cb3gseT12WzJdLXZbMF0sYj12WzNdLXZbMV0seD1tWzJdLW1bMF0sXz1tWzNdLW1bMV0sdz0wOzI+dzsrK3cpe3ZhciBNPXBbd10saz1wW3crMl0sQT1rLU0sVD0uNSooZFt3KzJdK2Rbd10pLEU9ZFt3KzJdLWRbd107ZVt3XT0yKkEvRSx0W3ddPTIqKE0tVCkvRX1lWzBdKj14L3ksdFswXSo9eC95LGVbMV0qPV8vYix0WzFdKj1fL2IsYy5iaW5kKCksdS5iaW5kKCksYy5hdHRyaWJ1dGVzLmRhdGFDb29yZC5wb2ludGVyKCk7dmFyIFM9Yy51bmlmb3JtcztTLmRhdGFTaGlmdD10LFMuZGF0YVNjYWxlPWU7dmFyIEw9cy50aWNrTWFya0xlbmd0aCx6PXMudGlja01hcmtXaWR0aCxJPXMudGlja01hcmtDb2xvcixQPTAsQz02KmhbMF0ubGVuZ3RoLFI9TWF0aC5taW4obC5nZShoWzBdLChkWzBdLXBbMF0pLyhwWzJdLXBbMF0pLGkpLGhbMF0ubGVuZ3RoKSxqPU1hdGgubWluKGwuZ3QoaFswXSwoZFsyXS1wWzBdKS8ocFsyXS1wWzBdKSxpKSxoWzBdLmxlbmd0aCksRD1QKzYqUixPPTYqTWF0aC5tYXgoMCxqLVIpLEY9TWF0aC5taW4obC5nZShoWzFdLChkWzFdLXBbMV0pLyhwWzNdLXBbMV0pLGkpLGhbMV0ubGVuZ3RoKSxOPU1hdGgubWluKGwuZ3QoaFsxXSwoZFszXS1wWzFdKS8ocFszXS1wWzFdKSxpKSxoWzFdLmxlbmd0aCksQj1DKzYqRixVPTYqTWF0aC5tYXgoMCxOLUYpO29bMF09MioobVswXS1MWzFdKS95LTEsb1sxXT0obVszXSttWzFdKS9iLTEsYVswXT1MWzFdKmcveSxhWzFdPXpbMV0qZy9iLFUmJihTLmNvbG9yPUlbMV0sUy50aWNrU2NhbGU9YSxTLmRhdGFBeGlzPW4sUy5zY3JlZW5PZmZzZXQ9byxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsQixVKSksb1swXT0obVsyXSttWzBdKS95LTEsb1sxXT0yKihtWzFdLUxbMF0pL2ItMSxhWzBdPXpbMF0qZy95LGFbMV09TFswXSpnL2IsTyYmKFMuY29sb3I9SVswXSxTLnRpY2tTY2FsZT1hLFMuZGF0YUF4aXM9cixTLnNjcmVlbk9mZnNldD1vLGYuZHJhd0FycmF5cyhmLlRSSUFOR0xFUyxELE8pKSxvWzBdPTIqKG1bMl0rTFszXSkveS0xLG9bMV09KG1bM10rbVsxXSkvYi0xLGFbMF09TFszXSpnL3ksYVsxXT16WzNdKmcvYixVJiYoUy5jb2xvcj1JWzNdLFMudGlja1NjYWxlPWEsUy5kYXRhQXhpcz1uLFMuc2NyZWVuT2Zmc2V0PW8sZi5kcmF3QXJyYXlzKGYuVFJJQU5HTEVTLEIsVSkpLG9bMF09KG1bMl0rbVswXSkveS0xLG9bMV09MioobVszXStMWzJdKS9iLTEsYVswXT16WzJdKmcveSxhWzFdPUxbMl0qZy9iLE8mJihTLmNvbG9yPUlbMl0sUy50aWNrU2NhbGU9YSxTLmRhdGFBeGlzPXIsUy5zY3JlZW5PZmZzZXQ9byxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsRCxPKSl9fSgpLGMudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9WzEsMSwtMSwtMSwxLC0xXSxlPVsxLC0xLDEsMSwtMSwtMV07cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj1yLnRpY2tzLGk9ci5ib3VuZHMsbz1uZXcgRmxvYXQzMkFycmF5KDE4KihuWzBdLmxlbmd0aCtuWzFdLmxlbmd0aCkpLGE9KHRoaXMucGxvdC56ZXJvTGluZUVuYWJsZSwwKSxzPVtbXSxbXV0sbD0wOzI+bDsrK2wpZm9yKHZhciB1PXNbbF0sYz1uW2xdLGg9aVtsXSxmPWlbbCsyXSxwPTA7cDxjLmxlbmd0aDsrK3Ape3ZhciBkPShjW3BdLngtaCkvKGYtaCk7dS5wdXNoKGQpO2Zvcih2YXIgbT0wOzY+bTsrK20pb1thKytdPWQsb1thKytdPXRbbV0sb1thKytdPWVbbV19dGhpcy50aWNrcz1zLHRoaXMudmJvLnVwZGF0ZShvKX19KCksYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRpY2tTaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjE3MywiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjE3NSwiZ2wtYnVmZmVyIjoxMjksImdsLXNoYWRlciI6MjA4fV0sMTcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cn1mdW5jdGlvbiBpKHQpe3ZhciBlPXQuZ2wscj1vKGUsWy0xLC0xLC0xLDEsMSwtMSwxLDFdKSxpPWEoZSxzLmxpbmVWZXJ0LHMubGluZUZyYWcpLGw9bmV3IG4odCxyLGkpO3JldHVybiBsfWUuZXhwb3J0cz1pO3ZhciBvPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtc2hhZGVyIikscz10KCIuL3NoYWRlcnMiKSxsPW4ucHJvdG90eXBlO2wuYmluZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc2hhZGVyO3RoaXMudmJvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCksdC5hdHRyaWJ1dGVzLmNvb3JkLnBvaW50ZXIoKSx0LnVuaWZvcm1zLnNjcmVlbkJveD10aGlzLnBsb3Quc2NyZWVuQm94fSxsLmRyYXdMaW5lPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXTtyZXR1cm4gZnVuY3Rpb24ocixuLGksbyxhLHMpe3ZhciBsPXRoaXMucGxvdCx1PXRoaXMuc2hhZGVyLGM9bC5nbDt0WzBdPXIsdFsxXT1uLGVbMF09aSxlWzFdPW8sdS51bmlmb3Jtcy5zdGFydD10LHUudW5pZm9ybXMuZW5kPWUsdS51bmlmb3Jtcy53aWR0aD1hKmwucGl4ZWxSYXRpbyx1LnVuaWZvcm1zLmNvbG9yPXMsYy5kcmF3QXJyYXlzKGMuVFJJQU5HTEVfU1RSSVAsMCw0KX19KCksbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjoxNzMsImdsLWJ1ZmZlciI6MTI5LCJnbC1zaGFkZXIiOjIwOH1dLDE3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0icHJlY2lzaW9uIGxvd3AgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnh5eiAqIGNvbG9yLncsIGNvbG9yLncpO1xufVxuIjtlLmV4cG9ydHM9e2xpbmVWZXJ0OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGNvb3JkO1xuXG51bmlmb3JtIHZlYzQgc2NyZWVuQm94O1xudW5pZm9ybSB2ZWMyIHN0YXJ0LCBlbmQ7XG51bmlmb3JtIGZsb2F0IHdpZHRoO1xuXG52ZWMyIHBlcnAodmVjMiB2KSB7XG4gIHJldHVybiB2ZWMyKHYueSwgLXYueCk7XG59XG5cbnZlYzIgc2NyZWVuKHZlYzIgdikge1xuICByZXR1cm4gMi4wICogKHYgLSBzY3JlZW5Cb3gueHkpIC8gKHNjcmVlbkJveC56dyAtIHNjcmVlbkJveC54eSkgLSAxLjA7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBkZWx0YSA9IG5vcm1hbGl6ZShwZXJwKHN0YXJ0IC0gZW5kKSk7XG4gIHZlYzIgb2Zmc2V0ID0gbWl4KHN0YXJ0LCBlbmQsIDAuNSAqIChjb29yZC55KzEuMCkpO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQoc2NyZWVuKG9mZnNldCArIDAuNSAqIHdpZHRoICogZGVsdGEgKiBjb29yZC54KSwgMCwgMSk7XG59XG4iLGxpbmVGcmFnOm4sdGV4dFZlcnQ6IiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMyB0ZXh0Q29vcmRpbmF0ZTtcblxudW5pZm9ybSB2ZWMyIGRhdGFTY2FsZSwgZGF0YVNoaWZ0LCBkYXRhQXhpcywgc2NyZWVuT2Zmc2V0LCB0ZXh0U2NhbGU7XG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IGRhdGFPZmZzZXQgID0gdGV4dENvb3JkaW5hdGUuejtcbiAgdmVjMiBnbHlwaE9mZnNldCAgPSB0ZXh0Q29vcmRpbmF0ZS54eTtcbiAgbWF0MiBnbHlwaE1hdHJpeCA9IG1hdDIoY29zKGFuZ2xlKSwgc2luKGFuZ2xlKSwgLXNpbihhbmdsZSksIGNvcyhhbmdsZSkpO1xuICB2ZWMyIHNjcmVlbkNvb3JkaW5hdGUgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhT2Zmc2V0ICsgZGF0YVNoaWZ0KSArXG4gICAgZ2x5cGhNYXRyaXggKiBnbHlwaE9mZnNldCAqIHRleHRTY2FsZSArIHNjcmVlbk9mZnNldDtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbkNvb3JkaW5hdGUsIDAsIDEpO1xufVxuIix0ZXh0RnJhZzpuLGdyaWRWZXJ0OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIGRhdGFDb29yZDtcblxudW5pZm9ybSB2ZWMyIGRhdGFBeGlzLCBkYXRhU2hpZnQsIGRhdGFTY2FsZTtcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgcG9zID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YUNvb3JkLnggKyBkYXRhU2hpZnQpO1xuICBwb3MgKz0gMTAuMCAqIGRhdGFDb29yZC55ICogdmVjMihkYXRhQXhpcy55LCAtZGF0YUF4aXMueCkgKyBkYXRhQ29vcmQueiAqIGxpbmVXaWR0aDtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcywgMCwgMSk7XG59XG4iLGdyaWRGcmFnOm4sYm94VmVydDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBjb29yZDtcblxudW5pZm9ybSB2ZWM0IHNjcmVlbkJveDtcbnVuaWZvcm0gdmVjMiBsbywgaGk7XG5cbnZlYzIgc2NyZWVuKHZlYzIgdikge1xuICByZXR1cm4gMi4wICogKHYgLSBzY3JlZW5Cb3gueHkpIC8gKHNjcmVlbkJveC56dyAtIHNjcmVlbkJveC54eSkgLSAxLjA7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbihtaXgobG8sIGhpLCBjb29yZCkpLCAwLCAxKTtcbn1cbiIsdGlja1ZlcnQ6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xuXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlLCBzY3JlZW5PZmZzZXQsIHRpY2tTY2FsZTtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHBvcyA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFDb29yZC54ICsgZGF0YVNoaWZ0KTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyArIHRpY2tTY2FsZSpkYXRhQ29vcmQueXogKyBzY3JlZW5PZmZzZXQsIDAsIDEpO1xufVxuIn19LHt9XSwxNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja09mZnNldD1bW10sW11dLHRoaXMudGlja1g9W1tdLFtdXSx0aGlzLmxhYmVsT2Zmc2V0PVswLDBdLHRoaXMubGFiZWxDb3VudD1bMCwwXX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQuZ2wscj1vKGUpLGk9YShlLHUudGV4dFZlcnQsdS50ZXh0RnJhZykscz1uZXcgbih0LHIsaSk7cmV0dXJuIHN9ZS5leHBvcnRzPWk7dmFyIG89dCgiZ2wtYnVmZmVyIiksYT10KCJnbC1zaGFkZXIiKSxzPXQoInRleHQtY2FjaGUiKSxsPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksdT10KCIuL3NoYWRlcnMiKSxjPW4ucHJvdG90eXBlO2MuZHJhd1RpY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXSxyPVswLDBdO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT10aGlzLnBsb3Qsbz10aGlzLnNoYWRlcixhPXRoaXMudGlja1hbbl0scz10aGlzLnRpY2tPZmZzZXRbbl0sdT1pLmdsLGM9aS52aWV3Qm94LGg9aS5kYXRhQm94LGY9aS5zY3JlZW5Cb3gscD1pLnBpeGVsUmF0aW8sZD1pLnRpY2tFbmFibGUsbT1pLnRpY2tQYWQsZz1pLnRpY2tDb2xvcix2PWkudGlja0FuZ2xlLHk9KGkudGlja01hcmtMZW5ndGgsaS5sYWJlbEVuYWJsZSksYj1pLmxhYmVsUGFkLHg9aS5sYWJlbENvbG9yLF89aS5sYWJlbEFuZ2xlLHc9dGhpcy5sYWJlbE9mZnNldFtuXSxNPXRoaXMubGFiZWxDb3VudFtuXSxrPWwubHQoYSxoW25dKSxBPWwubGUoYSxoW24rMl0pO3RbMF09dFsxXT0wLHRbbl09MSxlW25dPShjWzIrbl0rY1tuXSkvKGZbMituXS1mW25dKS0xO3ZhciBUPTIvZlsyKygxXm4pXS1mWzFebl07ZVsxXm5dPVQqY1sxXm5dLTEsZFtuXSYmKGVbMV5uXS09VCpwKm1bbl0sQT5rJiZzW0FdPnNba10mJihvLnVuaWZvcm1zLmRhdGFBeGlzPXQsby51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9ZSxvLnVuaWZvcm1zLmNvbG9yPWdbbl0sby51bmlmb3Jtcy5hbmdsZT12W25dLHUuZHJhd0FycmF5cyh1LlRSSUFOR0xFUyxzW2tdLHNbQV0tc1trXSkpKSx5W25dJiZNJiYoZVsxXm5dLT1UKnAqYltuXSxvLnVuaWZvcm1zLmRhdGFBeGlzPXIsby51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9ZSxvLnVuaWZvcm1zLmNvbG9yPXhbbl0sby51bmlmb3Jtcy5hbmdsZT1fW25dLHUuZHJhd0FycmF5cyh1LlRSSUFOR0xFUyx3LE0pKSxlWzFebl09VCpjWzIrKDFebildLTEsZFtuKzJdJiYoZVsxXm5dKz1UKnAqbVtuKzJdLEE+ayYmc1tBXT5zW2tdJiYoby51bmlmb3Jtcy5kYXRhQXhpcz10LG8udW5pZm9ybXMuc2NyZWVuT2Zmc2V0PWUsby51bmlmb3Jtcy5jb2xvcj1nW24rMl0sby51bmlmb3Jtcy5hbmdsZT12W24rMl0sdS5kcmF3QXJyYXlzKHUuVFJJQU5HTEVTLHNba10sc1tBXS1zW2tdKSkpLHlbbisyXSYmTSYmKGVbMV5uXSs9VCpwKmJbbisyXSxvLnVuaWZvcm1zLmRhdGFBeGlzPXIsby51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9ZSxvLnVuaWZvcm1zLmNvbG9yPXhbbisyXSxvLnVuaWZvcm1zLmFuZ2xlPV9bbisyXSx1LmRyYXdBcnJheXModS5UUklBTkdMRVMsdyxNKSl9fSgpLGMuZHJhd1RpdGxlPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10aGlzLnBsb3Qsbj10aGlzLnNoYWRlcixpPXIuZ2wsbz1yLnNjcmVlbkJveCxhPXIudGl0bGVDZW50ZXIscz1yLnRpdGxlQW5nbGUsbD1yLnRpdGxlQ29sb3IsYT1yLnRpdGxlQ2VudGVyLHU9ci5waXhlbFJhdGlvO2lmKHRoaXMudGl0bGVDb3VudCl7Zm9yKHZhciBjPTA7Mj5jOysrYyllW2NdPTIqKGFbY10qdS1vW2NdKS8ob1syK2NdLW9bY10pLTE7bi5iaW5kKCksbi51bmlmb3Jtcy5kYXRhQXhpcz10LG4udW5pZm9ybXMuc2NyZWVuT2Zmc2V0PWUsbi51bmlmb3Jtcy5hbmdsZT1zLG4udW5pZm9ybXMuY29sb3I9bCxpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsdGhpcy50aXRsZU9mZnNldCx0aGlzLnRpdGxlQ291bnQpfX19KCksYy5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXSxyPVswLDBdO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMucGxvdCxpPXRoaXMuc2hhZGVyLG89bi5fdGlja0JvdW5kcyxhPW4uZGF0YUJveCxzPW4uc2NyZWVuQm94LGw9bi52aWV3Qm94O2kuYmluZCgpO2Zvcih2YXIgdT0wOzI+dTsrK3Upe3ZhciBjPW9bdV0saD1vW3UrMl0sZj1oLWMscD0uNSooYVt1KzJdK2FbdV0pLGQ9YVt1KzJdLWFbdV0sbT1sW3VdLGc9bFt1KzJdLHY9Zy1tLHk9c1t1XSxiPXNbdSsyXSx4PWIteTtlW3VdPTIqZi9kKnYveCx0W3VdPTIqKGMtcCkvZCp2L3h9clsxXT0yKm4ucGl4ZWxSYXRpby8oc1szXS1zWzFdKSxyWzBdPXJbMV0qKHNbM10tc1sxXSkvKHNbMl0tc1swXSksaS51bmlmb3Jtcy5kYXRhU2NhbGU9ZSxpLnVuaWZvcm1zLmRhdGFTaGlmdD10LGkudW5pZm9ybXMudGV4dFNjYWxlPXIsdGhpcy52Ym8uYmluZCgpLGkuYXR0cmlidXRlcy50ZXh0Q29vcmRpbmF0ZS5wb2ludGVyKCl9fSgpLGMudXBkYXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPXQudGlja3Msbj10LmJvdW5kcyxpPTA7Mj5pOysraSl7Zm9yKHZhciBvPVtNYXRoLmZsb29yKGUubGVuZ3RoLzMpXSxhPVstKDEvMCldLGw9cltpXSx1PTA7dTxsLmxlbmd0aDsrK3Upe2Zvcih2YXIgYz1sW3VdLGg9Yy54LGY9Yy50ZXh0LHA9Yy5mb250fHwic2Fucy1zZXJpZiIsZD1jLmZvbnRTaXplfHwxMixtPXMocCxmKS5kYXRhLGc9MS8obltpKzJdLW5baV0pLHY9bltpXSx5PTA7eTxtLmxlbmd0aDt5Kz0yKWUucHVzaChtW3ldKmQsLW1beSsxXSpkLChoLXYpKmcpO28ucHVzaChNYXRoLmZsb29yKGUubGVuZ3RoLzMpKSxhLnB1c2goaCl9dGhpcy50aWNrT2Zmc2V0W2ldPW8sdGhpcy50aWNrWFtpXT1hfWZvcih2YXIgaT0wOzI+aTsrK2kpe3RoaXMubGFiZWxPZmZzZXRbaV09TWF0aC5mbG9vcihlLmxlbmd0aC8zKTtmb3IodmFyIG09cyh0LmxhYmVsRm9udFtpXSx0LmxhYmVsc1tpXSkuZGF0YSxkPXQubGFiZWxTaXplW2ldLHU9MDt1PG0ubGVuZ3RoO3UrPTIpZS5wdXNoKG1bdV0qZCwtbVt1KzFdKmQsMCk7dGhpcy5sYWJlbENvdW50W2ldPU1hdGguZmxvb3IoZS5sZW5ndGgvMyktdGhpcy5sYWJlbE9mZnNldFtpXX10aGlzLnRpdGxlT2Zmc2V0PU1hdGguZmxvb3IoZS5sZW5ndGgvMyk7Zm9yKHZhciBtPXModC50aXRsZUZvbnQsdC50aXRsZSkuZGF0YSxkPXQudGl0bGVTaXplLHU9MDt1PG0ubGVuZ3RoO3UrPTIpZS5wdXNoKG1bdV0qZCwtbVt1KzFdKmQsMCk7dGhpcy50aXRsZUNvdW50PU1hdGguZmxvb3IoZS5sZW5ndGgvMyktdGhpcy50aXRsZU9mZnNldCx0aGlzLnZiby51cGRhdGUoZSl9LGMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MTczLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTc1LCJnbC1idWZmZXIiOjEyOSwiZ2wtc2hhZGVyIjoyMDgsInRleHQtY2FjaGUiOjQ3Nn1dLDE3NTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs3M11bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjczfV0sMTc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmdsPXQsdGhpcy5waWNrQnVmZmVyPWUsdGhpcy5zY3JlZW5Cb3g9WzAsMCx0LmRyYXdpbmdCdWZmZXJXaWR0aCx0LmRyYXdpbmdCdWZmZXJIZWlnaHRdLHRoaXMudmlld0JveD1bMCwwLDAsMF0sdGhpcy5kYXRhQm94PVstMTAsLTEwLDEwLDEwXSx0aGlzLmdyaWRMaW5lRW5hYmxlPVshMCwhMF0sdGhpcy5ncmlkTGluZVdpZHRoPVsxLDFdLHRoaXMuZ3JpZExpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5waXhlbFJhdGlvPTEsdGhpcy50aWNrTWFya0xlbmd0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya1dpZHRoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy50aWNrQW5nbGU9WzAsMCwwLDBdLHRoaXMudGlja0VuYWJsZT1bITAsITAsITAsITBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxQYWQ9WzE1LDE1LDE1LDE1XSx0aGlzLmxhYmVsQW5nbGU9WzAsTWF0aC5QSS8yLDAsMypNYXRoLlBJLzJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aXRsZUNlbnRlcj1bMCwwXSx0aGlzLnRpdGxlRW5hYmxlPSEwLHRoaXMudGl0bGVBbmdsZT0wLHRoaXMudGl0bGVDb2xvcj1bMCwwLDAsMV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9WzAsMCwwLDBdLHRoaXMuemVyb0xpbmVFbmFibGU9WyEwLCEwXSx0aGlzLnplcm9MaW5lV2lkdGg9WzQsNF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmJvcmRlckxpbmVFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLmJvcmRlckxpbmVXaWR0aD1bMiwyLDIsMl0sdGhpcy5ib3JkZXJMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ncmlkPW51bGwsdGhpcy50ZXh0PW51bGwsdGhpcy5saW5lPW51bGwsdGhpcy5ib3g9bnVsbCx0aGlzLm9iamVjdHM9W10sdGhpcy5vdmVybGF5cz1bXSx0aGlzLl90aWNrQm91bmRzPVsxLzAsMS8wLC0oMS8wKSwtKDEvMCldLHRoaXMuZGlydHk9ITEsdGhpcy5waWNrRGlydHk9ITEsdGhpcy5waWNrRGVsYXk9MTIwLHRoaXMucGlja1JhZGl1cz0xMCx0aGlzLl9waWNrVGltZW91dD1udWxsLHRoaXMuX2RyYXdQaWNrPXRoaXMuZHJhd1BpY2suYmluZCh0aGlzKSx0aGlzLl9kZXB0aENvdW50ZXI9MH1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT10LnNsaWNlKCkscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl09ZVtyXS5zbGljZSgpO3JldHVybiBlfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC54LWUueH1mdW5jdGlvbiBhKHQpe3ZhciBlPXQuZ2wscj1zKGUsW2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0pLGk9bmV3IG4oZSxyKTtyZXR1cm4gaS5ncmlkPWwoaSksaS50ZXh0PXUoaSksaS5saW5lPWMoaSksaS5ib3g9aChpKSxpLnVwZGF0ZSh0KSxpfWUuZXhwb3J0cz1hO3ZhciBzPXQoImdsLXNlbGVjdC1zdGF0aWMiKSxsPXQoIi4vbGliL2dyaWQiKSx1PXQoIi4vbGliL3RleHQiKSxjPXQoIi4vbGliL2xpbmUiKSxoPXQoIi4vbGliL2JveCIpLGY9bi5wcm90b3R5cGU7Zi5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuZGlydHk9dGhpcy5waWNrRGlydHk9ITB9LGYuc2V0T3ZlcmxheURpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT0hMH0sZi5uZXh0RGVwdGhWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXB0aENvdW50ZXIrKy82NTUzNn0sZi5kcmF3PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbCxlPXRoaXMuc2NyZWVuQm94LHI9dGhpcy52aWV3Qm94LG49dGhpcy5kYXRhQm94LGk9dGhpcy5waXhlbFJhdGlvLG89dGhpcy5ncmlkLGE9dGhpcy5saW5lLHM9dGhpcy50ZXh0LGw9dGhpcy5vYmplY3RzO2lmKHRoaXMuX2RlcHRoQ291bnRlcj0wLHRoaXMucGlja0RpcnR5JiYodGhpcy5fcGlja1RpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLl9waWNrVGltZW91dCksdGhpcy5waWNrRGlydHk9ITEsdGhpcy5fcGlja1RpbWVvdXQ9c2V0VGltZW91dCh0aGlzLl9kcmF3UGljayx0aGlzLnBpY2tEZWxheSkpLHRoaXMuZGlydHkpe3RoaXMuZGlydHk9ITEsdC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixudWxsKSx0LmVuYWJsZSh0LlNDSVNTT1JfVEVTVCksdC5kaXNhYmxlKHQuREVQVEhfVEVTVCksdC5kZXB0aEZ1bmModC5MRVNTKSx0LmRlcHRoTWFzayghMSksdC5lbmFibGUodC5CTEVORCksdC5ibGVuZEVxdWF0aW9uKHQuRlVOQ19BREQsdC5GVU5DX0FERCksdC5ibGVuZEZ1bmModC5PTkUsdC5PTkVfTUlOVVNfU1JDX0FMUEhBKSx0LnNjaXNzb3IoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pO3ZhciB1PXRoaXMuYm9yZGVyQ29sb3I7dC5jbGVhckNvbG9yKHVbMF0qdVszXSx1WzFdKnVbM10sdVsyXSp1WzNdLHVbM10pLHQuY2xlYXIodC5DT0xPUl9CVUZGRVJfQklUfHQuREVQVEhfQlVGRkVSX0JJVCksdC5zY2lzc29yKHJbMF0sclsxXSxyWzJdLXJbMF0sclszXS1yWzFdKSx0LnZpZXdwb3J0KHJbMF0sclsxXSxyWzJdLXJbMF0sclszXS1yWzFdKTt2YXIgYz10aGlzLmJhY2tncm91bmRDb2xvcjt0LmNsZWFyQ29sb3IoY1swXSpjWzNdLGNbMV0qY1szXSxjWzJdKmNbM10sY1szXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVQpLG8uZHJhdygpO3ZhciBoPXRoaXMuemVyb0xpbmVFbmFibGUsZj10aGlzLnplcm9MaW5lQ29sb3IscD10aGlzLnplcm9MaW5lV2lkdGg7aWYoaFswXXx8aFsxXSl7YS5iaW5kKCk7Zm9yKHZhciBkPTA7Mj5kOysrZClpZihoW2RdJiZuW2RdPD0wJiZuW2QrMl0+PTApe3ZhciBtPWVbZF0tbltkXSooZVtkKzJdLWVbZF0pLyhuW2QrMl0tbltkXSk7MD09PWQ/YS5kcmF3TGluZShtLGVbMV0sbSxlWzNdLHBbZF0sZltkXSk6YS5kcmF3TGluZShlWzBdLG0sZVsyXSxtLHBbZF0sZltkXSl9fWZvcih2YXIgZD0wO2Q8bC5sZW5ndGg7KytkKWxbZF0uZHJhdygpO3Qudmlld3BvcnQoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pLHQuc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSksdGhpcy5ncmlkLmRyYXdUaWNrTWFya3MoKSxhLmJpbmQoKTt2YXIgZz10aGlzLmJvcmRlckxpbmVFbmFibGUsdj10aGlzLmJvcmRlckxpbmVXaWR0aCx5PXRoaXMuYm9yZGVyTGluZUNvbG9yO2dbMV0mJmEuZHJhd0xpbmUoclswXSxyWzFdLS41KnZbMV0qaSxyWzBdLHJbM10rLjUqdlszXSppLHZbMV0seVsxXSksZ1swXSYmYS5kcmF3TGluZShyWzBdLS41KnZbMF0qaSxyWzFdLHJbMl0rLjUqdlsyXSppLHJbMV0sdlswXSx5WzBdKSxnWzNdJiZhLmRyYXdMaW5lKHJbMl0sclsxXS0uNSp2WzFdKmksclsyXSxyWzNdKy41KnZbM10qaSx2WzNdLHlbM10pLGdbMl0mJmEuZHJhd0xpbmUoclswXS0uNSp2WzBdKmksclszXSxyWzJdKy41KnZbMl0qaSxyWzNdLHZbMl0seVsyXSkscy5iaW5kKCk7Zm9yKHZhciBkPTA7Mj5kOysrZClzLmRyYXdUaWNrcyhkKTt0aGlzLnRpdGxlRW5hYmxlJiZzLmRyYXdUaXRsZSgpO2Zvcih2YXIgYj10aGlzLm92ZXJsYXlzLGQ9MDtkPGIubGVuZ3RoOysrZCliW2RdLmRyYXcoKTt0LmRpc2FibGUodC5TQ0lTU09SX1RFU1QpLHQuZGlzYWJsZSh0LkJMRU5EKSx0LmRlcHRoTWFzayghMCl9fX0oKSxmLmRyYXdQaWNrPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5waWNrQnVmZmVyO3RoaXMuZ2w7dGhpcy5fcGlja1RpbWVvdXQ9bnVsbCx0LmJlZ2luKCk7Zm9yKHZhciBlPTEscj10aGlzLm9iamVjdHMsbj0wO248ci5sZW5ndGg7KytuKWU9cltuXS5kcmF3UGljayhlKTt0LmVuZCgpfX0oKSxmLnBpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBpeGVsUmF0aW8sbj10aGlzLnBpY2tQaXhlbFJhdGlvLGk9dGhpcy52aWV3Qm94LG89MHxNYXRoLnJvdW5kKCh0LWlbMF0vcikqbiksYT0wfE1hdGgucm91bmQoKGUtaVsxXS9yKSpuKSxzPXRoaXMucGlja0J1ZmZlci5xdWVyeShvLGEsdGhpcy5waWNrUmFkaXVzKTtpZighcylyZXR1cm4gbnVsbDtmb3IodmFyIGw9cy5pZCsocy52YWx1ZVswXTw8OCkrKHMudmFsdWVbMV08PDE2KSsocy52YWx1ZVsyXTw8MjQpLHU9dGhpcy5vYmplY3RzLGM9MDtjPHUubGVuZ3RoOysrYyl7dmFyIGg9dVtjXS5waWNrKG8sYSxsKTtpZihoKXJldHVybiBofXJldHVybiBudWxsfX0oKSxmLnNldFNjcmVlbkJveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcmVlbkJveCxyPXRoaXMucGl4ZWxSYXRpbztlWzBdPTB8TWF0aC5yb3VuZCh0WzBdKnIpLGVbMV09MHxNYXRoLnJvdW5kKHRbMV0qciksZVsyXT0wfE1hdGgucm91bmQodFsyXSpyKSxlWzNdPTB8TWF0aC5yb3VuZCh0WzNdKnIpLHRoaXMuc2V0RGlydHkoKX0sZi5zZXREYXRhQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YUJveCxyPWVbMF0hPT10WzBdfHxlWzFdIT09dFsxXXx8ZVsyXSE9PXRbMl18fGVbM10hPT10WzNdO3ImJihlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sdGhpcy5zZXREaXJ0eSgpKX0sZi5zZXRWaWV3Qm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGl4ZWxSYXRpbyxyPXRoaXMudmlld0JveDtyWzBdPTB8TWF0aC5yb3VuZCh0WzBdKmUpLHJbMV09MHxNYXRoLnJvdW5kKHRbMV0qZSksclsyXT0wfE1hdGgucm91bmQodFsyXSplKSxyWzNdPTB8TWF0aC5yb3VuZCh0WzNdKmUpO3ZhciBuPXRoaXMucGlja1BpeGVsUmF0aW87dGhpcy5waWNrQnVmZmVyLnNoYXBlPVswfE1hdGgucm91bmQoKHRbMl0tdFswXSkqbiksMHxNYXRoLnJvdW5kKCh0WzNdLXRbMV0pKm4pXSx0aGlzLnNldERpcnR5KCl9LGYudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvfHwxO3ZhciByPXRoaXMucGl4ZWxSYXRpbzt0aGlzLnBpY2tQaXhlbFJhdGlvPU1hdGgubWF4KHIsMSksdGhpcy5zZXRTY3JlZW5Cb3godC5zY3JlZW5Cb3h8fFswLDAsZS5kcmF3aW5nQnVmZmVyV2lkdGgvcixlLmRyYXdpbmdCdWZmZXJIZWlnaHQvcl0pO3RoaXMuc2NyZWVuQm94O3RoaXMuc2V0Vmlld0JveCh0LnZpZXdCb3h8fFsuMTI1Kih0aGlzLnNjcmVlbkJveFsyXS10aGlzLnNjcmVlbkJveFswXSkvciwuMTI1Kih0aGlzLnNjcmVlbkJveFszXS10aGlzLnNjcmVlbkJveFsxXSkvciwuODc1Kih0aGlzLnNjcmVlbkJveFsyXS10aGlzLnNjcmVlbkJveFswXSkvciwuODc1Kih0aGlzLnNjcmVlbkJveFszXS10aGlzLnNjcmVlbkJveFsxXSkvcl0pO3ZhciBuPXRoaXMudmlld0JveCxhPShuWzJdLW5bMF0pLyhuWzNdLW5bMV0pO3RoaXMuc2V0RGF0YUJveCh0LmRhdGFCb3h8fFstMTAsLTEwL2EsMTAsMTAvYV0pLHRoaXMuYm9yZGVyQ29sb3I9KHQuYm9yZGVyQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmJhY2tncm91bmRDb2xvcj0odC5iYWNrZ3JvdW5kQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lRW5hYmxlPSh0LmdyaWRMaW5lRW5hYmxlfHxbITAsITBdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVXaWR0aD0odC5ncmlkTGluZVdpZHRofHxbMSwxXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lQ29sb3I9aSh0LmdyaWRMaW5lQ29sb3J8fFtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSksdGhpcy56ZXJvTGluZUVuYWJsZT0odC56ZXJvTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLnplcm9MaW5lV2lkdGg9KHQuemVyb0xpbmVXaWR0aHx8WzQsNF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZUNvbG9yPWkodC56ZXJvTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja01hcmtMZW5ndGg9KHQudGlja01hcmtMZW5ndGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrV2lkdGg9KHQudGlja01hcmtXaWR0aHx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja01hcmtDb2xvcj1pKHQudGlja01hcmtDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGl0bGVDZW50ZXI9KHQudGl0bGVDZW50ZXJ8fFsuNSooblswXStuWzJdKS9yLChuWzNdKzEyMCkvcl0pLnNsaWNlKCksdGhpcy50aXRsZUVuYWJsZT0hKCJ0aXRsZUVuYWJsZSJpbiB0JiYhdC50aXRsZUVuYWJsZSksdGhpcy50aXRsZUFuZ2xlPXQudGl0bGVBbmdsZXx8MCx0aGlzLnRpdGxlQ29sb3I9KHQudGl0bGVDb2xvcnx8WzAsMCwwLDFdKS5zbGljZSgpLHRoaXMubGFiZWxQYWQ9KHQubGFiZWxQYWR8fFsxNSwxNSwxNSwxNV0pLnNsaWNlKCksdGhpcy5sYWJlbEFuZ2xlPSh0LmxhYmVsQW5nbGV8fFswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSkuc2xpY2UoKSx0aGlzLmxhYmVsRW5hYmxlPSh0LmxhYmVsRW5hYmxlfHxbITAsITAsITAsITBdKS5zbGljZSgpLHRoaXMubGFiZWxDb2xvcj1pKHQubGFiZWxDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja1BhZD0odC50aWNrUGFkfHxbMTUsMTUsMTUsMTVdKS5zbGljZSgpLHRoaXMudGlja0FuZ2xlPSh0LnRpY2tBbmdsZXx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja0VuYWJsZT0odC50aWNrRW5hYmxlfHxbITAsITAsITAsITBdKS5zbGljZSgpLHRoaXMudGlja0NvbG9yPWkodC50aWNrQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLmJvcmRlckxpbmVFbmFibGU9KHQuYm9yZGVyTGluZUVuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLmJvcmRlckxpbmVXaWR0aD0odC5ib3JkZXJMaW5lV2lkdGh8fFsyLDIsMiwyXSkuc2xpY2UoKSx0aGlzLmJvcmRlckxpbmVDb2xvcj1pKHQuYm9yZGVyTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSk7dmFyIHM9dC50aWNrc3x8W1tdLFtdXSxsPXRoaXMuX3RpY2tCb3VuZHM7bFswXT1sWzFdPTEvMCxsWzJdPWxbM109LSgxLzApO2Zvcih2YXIgdT0wOzI+dTsrK3Upe3ZhciBjPXNbdV0uc2xpY2UoMCk7MCE9PWMubGVuZ3RoJiYoYy5zb3J0KG8pLGxbdV09TWF0aC5taW4obFt1XSxjWzBdLngpLGxbdSsyXT1NYXRoLm1heChsW3UrMl0sY1tjLmxlbmd0aC0xXS54KSl9dGhpcy5ncmlkLnVwZGF0ZSh7Ym91bmRzOmwsdGlja3M6c30pLHRoaXMudGV4dC51cGRhdGUoe2JvdW5kczpsLHRpY2tzOnMsbGFiZWxzOnQubGFiZWxzfHxbIngiLCJ5Il0sbGFiZWxTaXplOnQubGFiZWxTaXplfHxbMTIsMTJdLGxhYmVsRm9udDp0LmxhYmVsRm9udHx8WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRpdGxlOnQudGl0bGV8fCIiLHRpdGxlU2l6ZTp0LnRpdGxlU2l6ZXx8MTgsdGl0bGVGb250OnQudGl0bGVGb250fHwic2Fucy1zZXJpZiJ9KSx0aGlzLnNldERpcnR5KCl9LGYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuYm94LmRpc3Bvc2UoKSx0aGlzLmdyaWQuZGlzcG9zZSgpLHRoaXMudGV4dC5kaXNwb3NlKCksdGhpcy5saW5lLmRpc3Bvc2UoKTtmb3IodmFyIHQ9dGhpcy5vYmplY3RzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub2JqZWN0c1t0XS5kaXNwb3NlKCk7dGhpcy5vYmplY3RzLmxlbmd0aD0wO2Zvcih2YXIgdD10aGlzLm92ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub3ZlcmxheXNbdF0uZGlzcG9zZSgpO3RoaXMub3ZlcmxheXMubGVuZ3RoPTAsdGhpcy5nbD1udWxsfSxmLmFkZE9iamVjdD1mdW5jdGlvbih0KXt0aGlzLm9iamVjdHMuaW5kZXhPZih0KTwwJiYodGhpcy5vYmplY3RzLnB1c2godCksdGhpcy5zZXREaXJ0eSgpKX0sZi5yZW1vdmVPYmplY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub2JqZWN0cyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09PXQpe2Uuc3BsaWNlKHIsMSksdGhpcy5zZXREaXJ0eSgpO2JyZWFrfX0sZi5hZGRPdmVybGF5PWZ1bmN0aW9uKHQpe3RoaXMub3ZlcmxheXMuaW5kZXhPZih0KTwwJiYodGhpcy5vdmVybGF5cy5wdXNoKHQpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCkpfSxmLnJlbW92ZU92ZXJsYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PT10KXtlLnNwbGljZShyLDEpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCk7YnJlYWt9fX0seyIuL2xpYi9ib3giOjE3MCwiLi9saWIvZ3JpZCI6MTcxLCIuL2xpYi9saW5lIjoxNzIsIi4vbGliL3RleHQiOjE3NCwiZ2wtc2VsZWN0LXN0YXRpYyI6MjA3fV0sMTc3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG52YXJ5aW5nIHZlYzIgdXY7XG52b2lkIG1haW4oKSB7XG4gIHV2ID0gcG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMCwgMSk7XG59IixvPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gc2FtcGxlcjJEIGFjY3VtQnVmZmVyO1xudmFyeWluZyB2ZWMyIHV2O1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzQgYWNjdW0gPSB0ZXh0dXJlMkQoYWNjdW1CdWZmZXIsIDAuNSAqICh1diArIDEuMCkpO1xuICBnbF9GcmFnQ29sb3IgPSBtaW4odmVjNCgxLDEsMSwxKSwgYWNjdW0pO1xufSI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsaSxvLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMiJ9XSl9fSx7ImdsLXNoYWRlciI6MjA4fV0sMTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0PXR8fGRvY3VtZW50LmJvZHksZT1lfHx7fTt2YXIgcj1bLjAxLDEvMF07ImRpc3RhbmNlTGltaXRzImluIGUmJihyWzBdPWUuZGlzdGFuY2VMaW1pdHNbMF0sclsxXT1lLmRpc3RhbmNlTGltaXRzWzFdKSwiem9vbU1pbiJpbiBlJiYoclswXT1lLnpvb21NaW4pLCJ6b29tTWF4ImluIGUmJihyWzFdPWUuem9vbU1heCk7dmFyIG49byh7Y2VudGVyOmUuY2VudGVyfHxbMCwwLDBdLHVwOmUudXB8fFswLDEsMF0sZXllOmUuZXllfHxbMCwwLDEwXSxtb2RlOmUubW9kZXx8Im9yYml0IixkaXN0YW5jZUxpbWl0czpyfSksbD1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sdT0wLGM9dC5jbGllbnRXaWR0aCxoPXQuY2xpZW50SGVpZ2h0LGY9e3ZpZXc6bixlbGVtZW50OnQsZGVsYXk6ZS5kZWxheXx8MTYscm90YXRlU3BlZWQ6ZS5yb3RhdGVTcGVlZHx8MSx6b29tU3BlZWQ6ZS56b29tU3BlZWR8fDEsdHJhbnNsYXRlU3BlZWQ6ZS50cmFuc2xhdGVTcGVlZHx8MSxmbGlwWDohIWUuZmxpcFgsZmxpcFk6ISFlLmZsaXBZLG1vZGVzOm4ubW9kZXMsdGljazpmdW5jdGlvbigpe3ZhciBlPWkoKSxyPXRoaXMuZGVsYXk7bi5pZGxlKGUtciksbi5mbHVzaChlLSgxMDArMipyKSk7dmFyIG89ZS0yKnI7bi5yZWNhbGNNYXRyaXgobyk7Zm9yKHZhciBhPSEwLHM9bi5jb21wdXRlZE1hdHJpeCxmPTA7MTY+ZjsrK2YpYT1hJiZsW2ZdPT09c1tmXSxsW2ZdPXNbZl07dmFyIHA9dC5jbGllbnRXaWR0aD09PWMmJnQuY2xpZW50SGVpZ2h0PT09aDtyZXR1cm4gYz10LmNsaWVudFdpZHRoLGg9dC5jbGllbnRIZWlnaHQsYT8hcDoodT1NYXRoLmV4cChuLmNvbXB1dGVkUmFkaXVzWzBdKSwhMCl9LGxvb2tBdDpmdW5jdGlvbih0LGUscil7bi5sb29rQXQobi5sYXN0VCgpLHQsZSxyKX0scm90YXRlOmZ1bmN0aW9uKHQsZSxyKXtuLnJvdGF0ZShuLmxhc3RUKCksdCxlLHIpfSxwYW46ZnVuY3Rpb24odCxlLHIpe24ucGFuKG4ubGFzdFQoKSx0LGUscil9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUscil7bi50cmFuc2xhdGUobi5sYXN0VCgpLHQsZSxyKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGYse21hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uY29tcHV0ZWRNYXRyaXh9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gbi5zZXRNYXRyaXgobi5sYXN0VCgpLHQpLG4uY29tcHV0ZWRNYXRyaXh9LGVudW1lcmFibGU6ITB9LG1vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBuLmdldE1vZGUoKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBuLnNldE1vZGUodCksbi5nZXRNb2RlKCl9LGVudW1lcmFibGU6ITB9LGNlbnRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uY29tcHV0ZWRDZW50ZXJ9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gbi5sb29rQXQobi5sYXN0VCgpLHQpLG4uY29tcHV0ZWRDZW50ZXJ9LGVudW1lcmFibGU6ITB9LGV5ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uY29tcHV0ZWRFeWV9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gbi5sb29rQXQobi5sYXN0VCgpLG51bGwsdCksbi5jb21wdXRlZEV5ZX0sZW51bWVyYWJsZTohMH0sdXA6e2dldDpmdW5jdGlvbigpe3JldHVybiBuLmNvbXB1dGVkVXB9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gbi5sb29rQXQobi5sYXN0VCgpLG51bGwsbnVsbCx0KSxuLmNvbXB1dGVkVXB9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBuLnNldERpc3RhbmNlKG4ubGFzdFQoKSx0KSx0fSxlbnVtZXJhYmxlOiEwfSxkaXN0YW5jZUxpbWl0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2V0RGlzdGFuY2VMaW1pdHMocil9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gbi5zZXREaXN0YW5jZUxpbWl0cyh0KSx0fSxlbnVtZXJhYmxlOiEwfX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCksITF9KTt2YXIgcD0wLGQ9MDtyZXR1cm4gYSh0LGZ1bmN0aW9uKGUscixvLGEpe3ZhciBzPTEvdC5jbGllbnRIZWlnaHQsbD1zKihyLXApLGM9cyooby1kKSxoPWYuZmxpcFg/MTotMSxtPWYuZmxpcFk/MTotMSxnPU1hdGguUEkqZi5yb3RhdGVTcGVlZCx2PWkoKTtpZigxJmUpYS5zaGlmdD9uLnJvdGF0ZSh2LDAsMCwtbCpnKTpuLnJvdGF0ZSh2LGgqZypsLC1tKmcqYywwKTtlbHNlIGlmKDImZSluLnBhbih2LC1mLnRyYW5zbGF0ZVNwZWVkKmwqdSxmLnRyYW5zbGF0ZVNwZWVkKmMqdSwwKTtlbHNlIGlmKDQmZSl7dmFyIHk9Zi56b29tU3BlZWQqYy93aW5kb3cuaW5uZXJIZWlnaHQqKHYtbi5sYXN0VCgpKSo1MDtuLnBhbih2LDAsMCx1KihNYXRoLmV4cCh5KS0xKSl9cD1yLGQ9b30pLHModCxmdW5jdGlvbih0LGUscil7dmFyIG89Zi5mbGlwWD8xOi0xLGE9Zi5mbGlwWT8xOi0xLHM9aSgpO2lmKE1hdGguYWJzKHQpPk1hdGguYWJzKGUpKW4ucm90YXRlKHMsMCwwLC10Km8qTWF0aC5QSSpmLnJvdGF0ZVNwZWVkL3dpbmRvdy5pbm5lcldpZHRoKTtlbHNle3ZhciBsPWYuem9vbVNwZWVkKmEqZS93aW5kb3cuaW5uZXJIZWlnaHQqKHMtbi5sYXN0VCgpKS8xMDA7bi5wYW4ocywwLDAsdSooTWF0aC5leHAobCktMSkpfX0sITApLGZ9ZS5leHBvcnRzPW47dmFyIGk9dCgicmlnaHQtbm93Iiksbz10KCIzZC12aWV3IiksYT10KCJtb3VzZS1jaGFuZ2UiKSxzPXQoIm1vdXNlLXdoZWVsIil9LHsiM2QtdmlldyI6NDAsIm1vdXNlLWNoYW5nZSI6NDQ0LCJtb3VzZS13aGVlbCI6NDQ4LCJyaWdodC1ub3ciOjQ1OH1dLDE3OTpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe2UucGVybWl0SG9zdE9iamVjdHNfX18mJmUucGVybWl0SG9zdE9iamVjdHNfX18odCl9ZnVuY3Rpb24gcih0KXtyZXR1cm4hKHQuc3Vic3RyKDAscC5sZW5ndGgpPT1wJiYiX19fIj09PXQuc3Vic3RyKHQubGVuZ3RoLTMpKX1mdW5jdGlvbiBuKHQpe2lmKHQhPT1PYmplY3QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiTm90IGFuIG9iamVjdDogIit0KTt2YXIgZT10W2RdO2lmKGUmJmUua2V5PT09dClyZXR1cm4gZTtpZihmKHQpKXtlPXtrZXk6dH07dHJ5e3JldHVybiBoKHQsZCx7dmFsdWU6ZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMX0pLGV9Y2F0Y2gocil7cmV0dXJufX19ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5wcm90b3R5cGU9bnVsbCxPYmplY3QuZnJlZXplKHQpfWZ1bmN0aW9uIG8oKXt5fHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGV8fCh5PSEwLGNvbnNvbGUud2FybigiV2Vha01hcCBzaG91bGQgYmUgaW52b2tlZCBhcyBuZXcgV2Vha01hcCgpLCBub3QgV2Vha01hcCgpLiBUaGlzIHdpbGwgYmUgYW4gZXJyb3IgaW4gdGhlIGZ1dHVyZS4iKSl9aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBzZXN8fCFzZXMub2t8fHNlcy5vaygpKXsidW5kZWZpbmVkIiE9dHlwZW9mIHNlcyYmKHNlcy53ZWFrTWFwUGVybWl0SG9zdE9iamVjdHM9dCk7dmFyIGE9ITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtNYXApe3ZhciBzPVdlYWtNYXA7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9GaXJlZm94Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKTtlbHNle3ZhciBsPW5ldyBzLHU9T2JqZWN0LmZyZWV6ZSh7fSk7aWYobC5zZXQodSwxKSwxPT09bC5nZXQodSkpcmV0dXJuIHZvaWQoZS5leHBvcnRzPVdlYWtNYXApO2E9ITB9fXZhciBjPShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSxoPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmPU9iamVjdC5pc0V4dGVuc2libGUscD0id2Vha21hcDoiLGQ9cCsiaWRlbnQ6IitNYXRoLnJhbmRvbSgpKyJfX18iO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgY3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheSl7dmFyIG09bmV3IEFycmF5QnVmZmVyKDI1KSxnPW5ldyBVaW50OEFycmF5KG0pO2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoZyksZD1wKyJyYW5kOiIrQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGcsZnVuY3Rpb24odCl7cmV0dXJuKHQlMzYpLnRvU3RyaW5nKDM2KX0pLmpvaW4oIiIpKyJfX18ifWlmKGgoT2JqZWN0LCJnZXRPd25Qcm9wZXJ0eU5hbWVzIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCkuZmlsdGVyKHIpfX0pLCJnZXRQcm9wZXJ0eU5hbWVzImluIE9iamVjdCl7dmFyIHY9T2JqZWN0LmdldFByb3BlcnR5TmFtZXM7aChPYmplY3QsImdldFByb3BlcnR5TmFtZXMiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdih0KS5maWx0ZXIocil9fSl9IWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmZyZWV6ZTtoKE9iamVjdCwiZnJlZXplIix7dmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSksdChlKX19KTt2YXIgZT1PYmplY3Quc2VhbDtoKE9iamVjdCwic2VhbCIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBuKHQpLGUodCl9fSk7dmFyIHI9T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO2goT2JqZWN0LCJwcmV2ZW50RXh0ZW5zaW9ucyIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBuKHQpLHIodCl9fSl9KCk7dmFyIHk9ITEsYj0wLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIHIsaT1uKHQpO3JldHVybiBpP3UgaW4gaT9pW3VdOmU6KHI9cy5pbmRleE9mKHQpLHI+PTA/bFtyXTplKX1mdW5jdGlvbiBlKHQpe3ZhciBlPW4odCk7cmV0dXJuIGU/dSBpbiBlOnMuaW5kZXhPZih0KT49MH1mdW5jdGlvbiByKHQsZSl7dmFyIHIsaT1uKHQpO3JldHVybiBpP2lbdV09ZToocj1zLmluZGV4T2YodCkscj49MD9sW3JdPWU6KHI9cy5sZW5ndGgsbFtyXT1lLHNbcl09dCkpLHRoaXN9ZnVuY3Rpb24gYSh0KXt2YXIgZSxyLGk9bih0KTtyZXR1cm4gaT91IGluIGkmJmRlbGV0ZSBpW3VdOihlPXMuaW5kZXhPZih0KSwwPmU/ITE6KHI9cy5sZW5ndGgtMSxzW2VdPXZvaWQgMCxsW2VdPWxbcl0sc1tlXT1zW3JdLHMubGVuZ3RoPXIsbC5sZW5ndGg9ciwhMCkpfXRoaXMgaW5zdGFuY2VvZiB4fHxvKCk7dmFyIHM9W10sbD1bXSx1PWIrKztyZXR1cm4gT2JqZWN0LmNyZWF0ZSh4LnByb3RvdHlwZSx7Z2V0X19fOnt2YWx1ZTppKHQpfSxoYXNfX186e3ZhbHVlOmkoZSl9LHNldF9fXzp7dmFsdWU6aShyKX0sZGVsZXRlX19fOnt2YWx1ZTppKGEpfX0pfTt4LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE9iamVjdC5wcm90b3R5cGUse2dldDp7dmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRfX18odCxlKX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxoYXM6e3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc19fXyh0KX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzZXQ6e3ZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0X19fKHQsZSl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sImRlbGV0ZSI6e3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGV0ZV9fXyh0KX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBzPyFmdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIGM/dS5oYXModCk/dS5nZXQodCk6Yy5nZXRfX18odCxlKTp1LmdldCh0LGUpfWZ1bmN0aW9uIHIodCl7cmV0dXJuIHUuaGFzKHQpfHwoYz9jLmhhc19fXyh0KTohMSl9ZnVuY3Rpb24gbih0KXt2YXIgZT0hIXUuZGVsZXRlKHQpO3JldHVybiBjP2MuZGVsZXRlX19fKHQpfHxlOmV9dGhpcyBpbnN0YW5jZW9mIHh8fG8oKTt2YXIgbCx1PW5ldyBzLGM9dm9pZCAwLGg9ITE7cmV0dXJuIGw9YT9mdW5jdGlvbih0LGUpe3JldHVybiB1LnNldCh0LGUpLHUuaGFzKHQpfHwoY3x8KGM9bmV3IHgpLGMuc2V0KHQsZSkpLHRoaXN9OmZ1bmN0aW9uKHQsZSl7aWYoaCl0cnl7dS5zZXQodCxlKX1jYXRjaChyKXtjfHwoYz1uZXcgeCksYy5zZXRfX18odCxlKX1lbHNlIHUuc2V0KHQsZSk7cmV0dXJuIHRoaXN9LE9iamVjdC5jcmVhdGUoeC5wcm90b3R5cGUse2dldF9fXzp7dmFsdWU6aShlKX0saGFzX19fOnt2YWx1ZTppKHIpfSxzZXRfX186e3ZhbHVlOmkobCl9LGRlbGV0ZV9fXzp7dmFsdWU6aShuKX0scGVybWl0SG9zdE9iamVjdHNfX186e3ZhbHVlOmkoZnVuY3Rpb24oZSl7aWYoZSE9PXQpdGhyb3cgbmV3IEVycm9yKCJib2d1cyBjYWxsIHRvIHBlcm1pdEhvc3RPYmplY3RzX19fIik7aD0hMH0pfX0pfWEmJiJ1bmRlZmluZWQiIT10eXBlb2YgUHJveHkmJihQcm94eT12b2lkIDApLHIucHJvdG90eXBlPXgucHJvdG90eXBlLGUuZXhwb3J0cz1yLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWFrTWFwLnByb3RvdHlwZSwiY29uc3RydWN0b3IiLHt2YWx1ZTpXZWFrTWFwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9KCk6KCJ1bmRlZmluZWQiIT10eXBlb2YgUHJveHkmJihQcm94eT12b2lkIDApLGUuZXhwb3J0cz14KX19KCl9LHt9XSwxODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT1zLmdldCh0KTtpZighZXx8IXQuaXNCdWZmZXIoZS5fdHJpYW5nbGVCdWZmZXIuYnVmZmVyKSl7dmFyIHI9byh0LG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC0xLDQsNCwtMV0pKTtlPWEodCxbe2J1ZmZlcjpyLHR5cGU6dC5GTE9BVCxzaXplOjJ9XSksZS5fdHJpYW5nbGVCdWZmZXI9cixzLnNldCh0LGUpfWUuYmluZCgpLHQuZHJhd0FycmF5cyh0LlRSSUFOR0xFUywwLDMpLGUudW5iaW5kKCl9dmFyIGk9InVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWstbWFwIik6V2Vha01hcCxvPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIikscz1uZXcgaTtlLmV4cG9ydHM9bn0seyJnbC1idWZmZXIiOjEyOSwiZ2wtdmFvIjoyMzcsIndlYWstbWFwIjoxNzl9XSwxODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0fWZ1bmN0aW9uIGkodCl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLHRoaXMudGlja3M9W1tdLFtdLFtdXSx0aGlzLmF1dG9UaWNrcz0hMCx0aGlzLnRpY2tTcGFjaW5nPVsxLDEsMV0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy50aWNrRm9udD1bInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMudGlja1NpemU9WzEyLDEyLDEyXSx0aGlzLnRpY2tBbmdsZT1bMCwwLDBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrUGFkPVsxMCwxMCwxMF0sdGhpcy5sYXN0Q3ViZVByb3BzPXtjdWJlRWRnZXM6WzAsMCwwXSxheGlzOlswLDAsMF19LHRoaXMubGFiZWxzPVsieCIsInkiLCJ6Il0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITBdLHRoaXMubGFiZWxGb250PSJzYW5zLXNlcmlmIix0aGlzLmxhYmVsU2l6ZT1bMjAsMjAsMjBdLHRoaXMubGFiZWxBbmdsZT1bMCwwLDBdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxQYWQ9WzEwLDEwLDEwXSx0aGlzLmxpbmVFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMubGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5saW5lVGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMubGluZVRpY2tNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVUaWNrTGVuZ3RoPVswLDAsMF0sdGhpcy5saW5lVGlja1dpZHRoPVsxLDEsMV0sdGhpcy5saW5lVGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ncmlkRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5ncmlkV2lkdGg9WzEsMSwxXSx0aGlzLmdyaWRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0VuYWJsZT1bITAsITAsITBdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0xpbmVXaWR0aD1bMiwyLDJdLHRoaXMuYmFja2dyb3VuZEVuYWJsZT1bITEsITEsITFdLHRoaXMuYmFja2dyb3VuZENvbG9yPVtbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV0sWy44LC44LC44LC41XV0sdGhpcy5fZmlyc3RJbml0PSEwLHRoaXMuX3RleHQ9bnVsbCx0aGlzLl9saW5lcz1udWxsLHRoaXMuX2JhY2tncm91bmQ9Yyh0KX1mdW5jdGlvbiBvKCl7dGhpcy5wcmltYWxPZmZzZXQ9WzAsMCwwXSx0aGlzLnByaW1hbE1pbm9yPVswLDAsMF0sdGhpcy5taXJyb3JPZmZzZXQ9WzAsMCwwXSx0aGlzLm1pcnJvck1pbm9yPVswLDAsMF19ZnVuY3Rpb24gYSh0LGUscixuLGkpe2Zvcih2YXIgbz10LnByaW1hbE9mZnNldCxhPXQucHJpbWFsTWlub3Iscz10Lm1pcnJvck9mZnNldCxsPXQubWlycm9yTWlub3IsdT1uW2VdLGM9MDszPmM7KytjKWlmKGUhPT1jKXt2YXIgaD1vLGY9cyxwPWEsZD1sO3UmMTw8YyYmKGg9cyxmPW8scD1sLGQ9YSksaFtjXT1yWzBdW2NdLGZbY109clsxXVtjXSxpW2NdPjA/KHBbY109LTEsZFtjXT0wKToocFtjXT0wLGRbY109MSl9fWZ1bmN0aW9uIHModCxlKXt2YXIgcj1uZXcgaSh0KTtyZXR1cm4gci51cGRhdGUoZSkscn1lLmV4cG9ydHM9czt2YXIgbD10KCIuL2xpYi90ZXh0LmpzIiksdT10KCIuL2xpYi9saW5lcy5qcyIpLGM9dCgiLi9saWIvYmFja2dyb3VuZC5qcyIpLGg9dCgiLi9saWIvY3ViZS5qcyIpLGY9dCgiLi9saWIvdGlja3MuanMiKSxwPW5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKSxkPWkucHJvdG90eXBlO2QudXBkYXRlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pe2lmKG4gaW4gdCl7dmFyIGksbz10W25dLGE9dGhpc1tuXTsoZT9BcnJheS5pc0FycmF5KG8pJiZBcnJheS5pc0FycmF5KG9bMF0pOkFycmF5LmlzQXJyYXkobykpP3RoaXNbbl09aT1bcihvWzBdKSxyKG9bMV0pLHIob1syXSldOnRoaXNbbl09aT1bcihvKSxyKG8pLHIobyldO2Zvcih2YXIgcz0wOzM+czsrK3MpaWYoaVtzXSE9PWFbc10pcmV0dXJuITB9cmV0dXJuITF9dD10fHx7fTt2YXIgcixuPWUuYmluZCh0aGlzLCExLE51bWJlciksaT1lLmJpbmQodGhpcywhMSxCb29sZWFuKSxvPWUuYmluZCh0aGlzLCExLFN0cmluZyksYT1lLmJpbmQodGhpcywhMCxmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtpZigzPT09dC5sZW5ndGgpcmV0dXJuWyt0WzBdLCt0WzFdLCt0WzJdLDFdO2lmKDQ9PT10Lmxlbmd0aClyZXR1cm5bK3RbMF0sK3RbMV0sK3RbMl0sK3RbM11dfXJldHVyblswLDAsMCwxXX0pLHM9ITEsYz0hMTtpZigiYm91bmRzImluIHQpZm9yKHZhciBoPXQuYm91bmRzLHA9MDsyPnA7KytwKWZvcih2YXIgZD0wOzM+ZDsrK2QpaFtwXVtkXSE9PXRoaXMuYm91bmRzW3BdW2RdJiYoYz0hMCksdGhpcy5ib3VuZHNbcF1bZF09aFtwXVtkXTtpZigidGlja3MiaW4gdCl7cj10LnRpY2tzLHM9ITAsdGhpcy5hdXRvVGlja3M9ITE7Zm9yKHZhciBwPTA7Mz5wOysrcCl0aGlzLnRpY2tTcGFjaW5nW3BdPTB9ZWxzZSBuKCJ0aWNrU3BhY2luZyIpJiYodGhpcy5hdXRvVGlja3M9ITAsYz0hMCk7aWYodGhpcy5fZmlyc3RJbml0JiYoInRpY2tzImluIHR8fCJ0aWNrU3BhY2luZyJpbiB0fHwodGhpcy5hdXRvVGlja3M9ITApLGM9ITAscz0hMCx0aGlzLl9maXJzdEluaXQ9ITEpLGMmJnRoaXMuYXV0b1RpY2tzJiYocj1mLmNyZWF0ZSh0aGlzLmJvdW5kcyx0aGlzLnRpY2tTcGFjaW5nKSxzPSEwKSxzKXtmb3IodmFyIHA9MDszPnA7KytwKXJbcF0uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LngtZS54fSk7Zi5lcXVhbChyLHRoaXMudGlja3MpP3M9ITE6dGhpcy50aWNrcz1yfWkoInRpY2tFbmFibGUiKSxvKCJ0aWNrRm9udCIpJiYocz0hMCksbigidGlja1NpemUiKSxuKCJ0aWNrQW5nbGUiKSxuKCJ0aWNrUGFkIiksYSgidGlja0NvbG9yIik7dmFyIG09bygibGFiZWxzIik7bygibGFiZWxGb250IikmJihtPSEwKSxpKCJsYWJlbEVuYWJsZSIpLG4oImxhYmVsU2l6ZSIpLG4oImxhYmVsUGFkIiksYSgibGFiZWxDb2xvciIpLGkoImxpbmVFbmFibGUiKSxpKCJsaW5lTWlycm9yIiksbigibGluZVdpZHRoIiksYSgibGluZUNvbG9yIiksaSgibGluZVRpY2tFbmFibGUiKSxpKCJsaW5lVGlja01pcnJvciIpLG4oImxpbmVUaWNrTGVuZ3RoIiksbigibGluZVRpY2tXaWR0aCIpLGEoImxpbmVUaWNrQ29sb3IiKSxpKCJncmlkRW5hYmxlIiksbigiZ3JpZFdpZHRoIiksYSgiZ3JpZENvbG9yIiksaSgiemVyb0VuYWJsZSIpLGEoInplcm9MaW5lQ29sb3IiKSxuKCJ6ZXJvTGluZVdpZHRoIiksaSgiYmFja2dyb3VuZEVuYWJsZSIpLGEoImJhY2tncm91bmRDb2xvciIpLHRoaXMuX3RleHQ/dGhpcy5fdGV4dCYmKG18fHMpJiZ0aGlzLl90ZXh0LnVwZGF0ZSh0aGlzLmJvdW5kcyx0aGlzLmxhYmVscyx0aGlzLmxhYmVsRm9udCx0aGlzLnRpY2tzLHRoaXMudGlja0ZvbnQpOnRoaXMuX3RleHQ9bCh0aGlzLmdsLHRoaXMuYm91bmRzLHRoaXMubGFiZWxzLHRoaXMubGFiZWxGb250LHRoaXMudGlja3MsdGhpcy50aWNrRm9udCksdGhpcy5fbGluZXMmJnMmJih0aGlzLl9saW5lcy5kaXNwb3NlKCksdGhpcy5fbGluZXM9bnVsbCksdGhpcy5fbGluZXN8fCh0aGlzLl9saW5lcz11KHRoaXMuZ2wsdGhpcy5ib3VuZHMsdGhpcy50aWNrcykpfTt2YXIgbT1bbmV3IG8sbmV3IG8sbmV3IG9dLGc9WzAsMCwwXSx2PXttb2RlbDpwLHZpZXc6cCxwcm9qZWN0aW9uOnB9O2QuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGQuZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe307dmFyIHk9WzAsMCwwXSxiPVswLDAsMF0seD1bMCwwLDBdO2QuZHJhdz1mdW5jdGlvbih0KXt0PXR8fHY7Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxwLGk9dC52aWV3fHxwLG89dC5wcm9qZWN0aW9ufHxwLHM9dGhpcy5ib3VuZHMsbD1oKHIsaSxvLHMpLHU9bC5jdWJlRWRnZXMsYz1sLmF4aXMsZj1pWzEyXSxkPWlbMTNdLF89aVsxNF0sdz1pWzE1XSxNPXRoaXMucGl4ZWxSYXRpbyoob1szXSpmK29bN10qZCtvWzExXSpfK29bMTVdKncpL2UuZHJhd2luZ0J1ZmZlckhlaWdodCxrPTA7Mz5rOysrayl0aGlzLmxhc3RDdWJlUHJvcHMuY3ViZUVkZ2VzW2tdPXVba10sdGhpcy5sYXN0Q3ViZVByb3BzLmF4aXNba109Y1trXTtmb3IodmFyIEE9bSxrPTA7Mz5rOysraylhKG1ba10sayx0aGlzLmJvdW5kcyx1LGMpO2Zvcih2YXIgZT10aGlzLmdsLFQ9ZyxrPTA7Mz5rOysrayl0aGlzLmJhY2tncm91bmRFbmFibGVba10/VFtrXT1jW2tdOlRba109MDt0aGlzLl9iYWNrZ3JvdW5kLmRyYXcocixpLG8scyxULHRoaXMuYmFja2dyb3VuZENvbG9yKSx0aGlzLl9saW5lcy5iaW5kKHIsaSxvLHRoaXMpO2Zvcih2YXIgaz0wOzM+azsrK2spe3ZhciBFPVswLDAsMF07Y1trXT4wP0Vba109c1sxXVtrXTpFW2tdPXNbMF1ba107Zm9yKHZhciBTPTA7Mj5TOysrUyl7dmFyIEw9KGsrMStTKSUzLHo9KGsrMSsoMV5TKSklMzt0aGlzLmdyaWRFbmFibGVbTF0mJnRoaXMuX2xpbmVzLmRyYXdHcmlkKEwseix0aGlzLmJvdW5kcyxFLHRoaXMuZ3JpZENvbG9yW0xdLHRoaXMuZ3JpZFdpZHRoW0xdKnRoaXMucGl4ZWxSYXRpbyl9Zm9yKHZhciBTPTA7Mj5TOysrUyl7dmFyIEw9KGsrMStTKSUzLHo9KGsrMSsoMV5TKSklMzt0aGlzLnplcm9FbmFibGVbel0mJnNbMF1bel08PTAmJnNbMV1bel0+PTAmJnRoaXMuX2xpbmVzLmRyYXdaZXJvKEwseix0aGlzLmJvdW5kcyxFLHRoaXMuemVyb0xpbmVDb2xvclt6XSx0aGlzLnplcm9MaW5lV2lkdGhbel0qdGhpcy5waXhlbFJhdGlvKX19Zm9yKHZhciBrPTA7Mz5rOysrayl7dGhpcy5saW5lRW5hYmxlW2tdJiZ0aGlzLl9saW5lcy5kcmF3QXhpc0xpbmUoayx0aGlzLmJvdW5kcyxBW2tdLnByaW1hbE9mZnNldCx0aGlzLmxpbmVDb2xvcltrXSx0aGlzLmxpbmVXaWR0aFtrXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZU1pcnJvcltrXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKGssdGhpcy5ib3VuZHMsQVtrXS5taXJyb3JPZmZzZXQsdGhpcy5saW5lQ29sb3Jba10sdGhpcy5saW5lV2lkdGhba10qdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIEk9bih5LEFba10ucHJpbWFsTWlub3IpLFA9bihiLEFba10ubWlycm9yTWlub3IpLEM9dGhpcy5saW5lVGlja0xlbmd0aCxTPTA7Mz5TOysrUyl7dmFyIFI9TS9yWzUqU107SVtTXSo9Q1tTXSpSLFBbU10qPUNbU10qUn10aGlzLmxpbmVUaWNrRW5hYmxlW2tdJiZ0aGlzLl9saW5lcy5kcmF3QXhpc1RpY2tzKGssQVtrXS5wcmltYWxPZmZzZXQsSSx0aGlzLmxpbmVUaWNrQ29sb3Jba10sdGhpcy5saW5lVGlja1dpZHRoW2tdKnRoaXMucGl4ZWxSYXRpbyksdGhpcy5saW5lVGlja01pcnJvcltrXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhrLEFba10ubWlycm9yT2Zmc2V0LFAsdGhpcy5saW5lVGlja0NvbG9yW2tdLHRoaXMubGluZVRpY2tXaWR0aFtrXSp0aGlzLnBpeGVsUmF0aW8pfXRoaXMuX3RleHQuYmluZChyLGksbyx0aGlzLnBpeGVsUmF0aW8pO2Zvcih2YXIgaz0wOzM+azsrK2spe2Zvcih2YXIgaj1BW2tdLnByaW1hbE1pbm9yLEQ9bih4LEFba10ucHJpbWFsT2Zmc2V0KSxTPTA7Mz5TOysrUyl0aGlzLmxpbmVUaWNrRW5hYmxlW2tdJiYoRFtTXSs9TSpqW1NdKk1hdGgubWF4KHRoaXMubGluZVRpY2tMZW5ndGhbU10sMCkvcls1KlNdKTtpZih0aGlzLnRpY2tFbmFibGVba10pe2Zvcih2YXIgUz0wOzM+UzsrK1MpRFtTXSs9TSpqW1NdKnRoaXMudGlja1BhZFtTXS9yWzUqU107dGhpcy5fdGV4dC5kcmF3VGlja3Moayx0aGlzLnRpY2tTaXplW2tdLHRoaXMudGlja0FuZ2xlW2tdLEQsdGhpcy50aWNrQ29sb3Jba10pfWlmKHRoaXMubGFiZWxFbmFibGVba10pe2Zvcih2YXIgUz0wOzM+UzsrK1MpRFtTXSs9TSpqW1NdKnRoaXMubGFiZWxQYWRbU10vcls1KlNdO0Rba10rPS41KihzWzBdW2tdK3NbMV1ba10pLHRoaXMuX3RleHQuZHJhd0xhYmVsKGssdGhpcy5sYWJlbFNpemVba10sdGhpcy5sYWJlbEFuZ2xlW2tdLEQsdGhpcy5sYWJlbENvbG9yW2tdKX19fSxkLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl90ZXh0LmRpc3Bvc2UoKSx0aGlzLl9saW5lcy5kaXNwb3NlKCksdGhpcy5fYmFja2dyb3VuZC5kaXNwb3NlKCksdGhpcy5fbGluZXM9bnVsbCx0aGlzLl90ZXh0PW51bGwsdGhpcy5fYmFja2dyb3VuZD1udWxsLHRoaXMuZ2w9bnVsbH19LHsiLi9saWIvYmFja2dyb3VuZC5qcyI6MTgyLCIuL2xpYi9jdWJlLmpzIjoxODMsIi4vbGliL2xpbmVzLmpzIjoxODQsIi4vbGliL3RleHQuanMiOjE4NiwiLi9saWIvdGlja3MuanMiOjE4N31dLDE4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bn1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1bXSxyPVtdLGk9MCxsPTA7Mz5sOysrbClmb3IodmFyIHU9KGwrMSklMyxjPShsKzIpJTMsaD1bMCwwLDBdLGY9WzAsMCwwXSxwPS0xOzE+PXA7cCs9Mil7ci5wdXNoKGksaSsyLGkrMSxpKzEsaSsyLGkrMyksaFtsXT1wLGZbbF09cDtmb3IodmFyIGQ9LTE7MT49ZDtkKz0yKXtoW3VdPWQ7Zm9yKHZhciBtPS0xOzE+PW07bSs9MiloW2NdPW0sZS5wdXNoKGhbMF0saFsxXSxoWzJdLGZbMF0sZlsxXSxmWzJdKSxpKz0xfXZhciBnPXU7dT1jLGM9Z312YXIgdj1vKHQsbmV3IEZsb2F0MzJBcnJheShlKSkseT1vKHQsbmV3IFVpbnQxNkFycmF5KHIpLHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLGI9YSh0LFt7YnVmZmVyOnYsdHlwZTp0LkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6MjR9LHtidWZmZXI6dix0eXBlOnQuRkxPQVQsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6MjR9XSx5KSx4PXModCk7cmV0dXJuIHguYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHguYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MSxuZXcgbih0LHYsYix4KX1lLmV4cG9ydHM9aTt2YXIgbz10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLHM9dCgiLi9zaGFkZXJzIikuYmcsbD1uLnByb3RvdHlwZTtsLmRyYXc9ZnVuY3Rpb24odCxlLHIsbixpLG8pe2Zvcih2YXIgYT0hMSxzPTA7Mz5zOysrcylhPWF8fGlbc107aWYoYSl7dmFyIGw9dGhpcy5nbDtsLmVuYWJsZShsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpLGwucG9seWdvbk9mZnNldCgxLDIpLAp0aGlzLnNoYWRlci5iaW5kKCksdGhpcy5zaGFkZXIudW5pZm9ybXM9e21vZGVsOnQsdmlldzplLHByb2plY3Rpb246cixib3VuZHM6bixlbmFibGU6aSxjb2xvcnM6b30sdGhpcy52YW8uYmluZCgpLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsMzYpLGwuZGlzYWJsZShsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpfX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MTg1LCJnbC1idWZmZXIiOjEyOSwiZ2wtdmFvIjoyMzd9XSwxODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7Zm9yKHZhciBuPTA7ND5uOysrbil7dFtuXT1yWzEyK25dO2Zvcih2YXIgaT0wOzM+aTsrK2kpdFtuXSs9ZVtpXSpyWzQqaStuXX19ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9MDtlPG0ubGVuZ3RoOysrZSlpZih0PWwucG9zaXRpdmUodCxtW2VdKSx0Lmxlbmd0aDwzKXJldHVybiAwO2Zvcih2YXIgcj10WzBdLG49clswXS9yWzNdLGk9clsxXS9yWzNdLG89MCxlPTE7ZSsxPHQubGVuZ3RoOysrZSl7dmFyIGE9dFtlXSxzPXRbZSsxXSx1PWFbMF0vYVszXSxjPWFbMV0vYVszXSxoPXNbMF0vc1szXSxmPXNbMV0vc1szXSxwPXUtbixkPWMtaSxnPWgtbix2PWYtaTtvKz1NYXRoLmFicyhwKnYtZCpnKX1yZXR1cm4gb31mdW5jdGlvbiBvKHQsZSxyLG8pe3MoYyxlLHQpLHMoYyxyLGMpO2Zvcih2YXIgbD0wLG09MDsyPm07KyttKXtwWzJdPW9bbV1bMl07Zm9yKHZhciBiPTA7Mj5iOysrYil7cFsxXT1vW2JdWzFdO2Zvcih2YXIgeD0wOzI+eDsrK3gpcFswXT1vW3hdWzBdLG4oaFtsXSxwLGMpLGwrPTF9fWZvcih2YXIgXz0tMSxtPTA7OD5tOysrbSl7Zm9yKHZhciB3PWhbbV1bM10sTT0wOzM+TTsrK00pZlttXVtNXT1oW21dW01dL3c7MD53JiYoMD5fP189bTpmW21dWzJdPGZbX11bMl0mJihfPW0pKX1pZigwPl8pe189MDtmb3IodmFyIGs9MDszPms7KytrKXtmb3IodmFyIEE9KGsrMiklMyxUPShrKzEpJTMsRT0tMSxTPS0xLEw9MDsyPkw7KytMKXt2YXIgej1MPDxrLEk9eisoTDw8QSkrKDEtTDw8VCksUD16KygxLUw8PEEpKyhMPDxUKTt1KGZbel0sZltJXSxmW1BdLGQpPDB8fChMP0U9MTpTPTEpfWlmKDA+RXx8MD5TKVM+RSYmKF98PTE8PGspO2Vsc2V7Zm9yKHZhciBMPTA7Mj5MOysrTCl7dmFyIHo9TDw8ayxJPXorKEw8PEEpKygxLUw8PFQpLFA9eisoMS1MPDxBKSsoTDw8VCksQz1pKFtoW3pdLGhbSV0saFtQXSxoW3orKDE8PEEpKygxPDxUKV1dKTtMP0U9QzpTPUN9Uz5FJiYoX3w9MTw8ayl9fX1mb3IodmFyIFI9N15fLGo9LTEsbT0wOzg+bTsrK20pbSE9PV8mJm0hPT1SJiYoMD5qP2o9bTpmW2pdWzFdPmZbbV1bMV0mJihqPW0pKTtmb3IodmFyIEQ9LTEsbT0wOzM+bTsrK20pe3ZhciBPPWpeMTw8bTtpZihPIT09XyYmTyE9PVIpezA+RCYmKEQ9Tyk7dmFyIFQ9ZltPXTtUWzBdPGZbRF1bMF0mJihEPU8pfX1mb3IodmFyIEY9LTEsbT0wOzM+bTsrK20pe3ZhciBPPWpeMTw8bTtpZihPIT09XyYmTyE9PVImJk8hPT1EKXswPkYmJihGPU8pO3ZhciBUPWZbT107VFswXT5mW0ZdWzBdJiYoRj1PKX19dmFyIE49ZztOWzBdPU5bMV09TlsyXT0wLE5bYS5sb2cyKEReaildPWomRCxOW2EubG9nMihqXkYpXT1qJkY7dmFyIEI9N15GO0I9PT1ffHxCPT09Uj8oQj03XkQsTlthLmxvZzIoRl5CKV09QiZGKTpOW2EubG9nMihEXkIpXT1CJkQ7Zm9yKHZhciBVPXYsVj1fLGs9MDszPms7KytrKVYmMTw8az9VW2tdPS0xOlVba109MTtyZXR1cm4geX1lLmV4cG9ydHM9bzt2YXIgYT10KCJiaXQtdHdpZGRsZSIpLHM9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGw9KHQoImdsLW1hdDQvaW52ZXJ0IiksdCgic3BsaXQtcG9seWdvbiIpKSx1PXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLGM9bmV3IEFycmF5KDE2KSxoPShuZXcgQXJyYXkoMTYpLG5ldyBBcnJheSg4KSksZj1uZXcgQXJyYXkoOCkscD1uZXcgQXJyYXkoMyksZD1bMCwwLDBdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wOzg+dDsrK3QpaFt0XT1bMSwxLDEsMV0sZlt0XT1bMSwxLDFdfSgpO3ZhciBtPVtbMCwwLDEsMCwwXSxbMCwwLC0xLDEsMF0sWzAsLTEsMCwxLDBdLFswLDEsMCwxLDBdLFstMSwwLDAsMSwwXSxbMSwwLDAsMSwwXV0sZz1bMSwxLDFdLHY9WzAsMCwwXSx5PXtjdWJlRWRnZXM6ZyxheGlzOnZ9fSx7ImJpdC10d2lkZGxlIjo1MSwiZ2wtbWF0NC9pbnZlcnQiOjE0OCwiZ2wtbWF0NC9tdWx0aXBseSI6MTUwLCJyb2J1c3Qtb3JpZW50YXRpb24iOjQ2Miwic3BsaXQtcG9seWdvbiI6MTg5fV0sMTg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gbyh0LGUscixuLGksbyxhLHMpe3RoaXMuZ2w9dCx0aGlzLnZlcnRCdWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy50aWNrQ291bnQ9aSx0aGlzLnRpY2tPZmZzZXQ9byx0aGlzLmdyaWRDb3VudD1hLHRoaXMuZ3JpZE9mZnNldD1zfWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPVtdLGk9WzAsMCwwXSxhPVswLDAsMF0sYz1bMCwwLDBdLGg9WzAsMCwwXTtuLnB1c2goMCwwLDEsMCwxLDEsMCwwLC0xLDAsMCwtMSwwLDEsMSwwLDEsLTEpO2Zvcih2YXIgZj0wOzM+ZjsrK2Ype2Zvcih2YXIgcD1uLmxlbmd0aC8zfDAsZD0wO2Q8cltmXS5sZW5ndGg7KytkKXt2YXIgbT0rcltmXVtkXS54O24ucHVzaChtLDAsMSxtLDEsMSxtLDAsLTEsbSwwLC0xLG0sMSwxLG0sMSwtMSl9dmFyIGc9bi5sZW5ndGgvM3wwO2lbZl09cCxhW2ZdPWctcDtmb3IodmFyIHA9bi5sZW5ndGgvM3wwLHY9MDt2PHJbZl0ubGVuZ3RoOysrdil7dmFyIG09K3JbZl1bdl0ueDtuLnB1c2gobSwwLDEsbSwxLDEsbSwwLC0xLG0sMCwtMSxtLDEsMSxtLDEsLTEpfXZhciBnPW4ubGVuZ3RoLzN8MDtjW2ZdPXAsaFtmXT1nLXB9dmFyIHk9cyh0LG5ldyBGbG9hdDMyQXJyYXkobikpLGI9bCh0LFt7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6MyxzdHJpZGU6MCxvZmZzZXQ6MH1dKSx4PXUodCk7cmV0dXJuIHguYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG5ldyBvKHQseSxiLHgsYSxpLGgsYyl9ZS5leHBvcnRzPWE7dmFyIHM9dCgiZ2wtYnVmZmVyIiksbD10KCJnbC12YW8iKSx1PXQoIi4vc2hhZGVycyIpLmxpbmUsYz1bMCwwLDBdLGg9WzAsMCwwXSxmPVswLDAsMF0scD1bMCwwLDBdLGQ9WzEsMV0sbT1vLnByb3RvdHlwZTttLmJpbmQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc2hhZGVyLmJpbmQoKSx0aGlzLnNoYWRlci51bmlmb3Jtcy5tb2RlbD10LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnZpZXc9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uPXIsZFswXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJXaWR0aCxkWzFdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5TaGFwZT1kLHRoaXMudmFvLmJpbmQoKX0sbS5kcmF3QXhpc0xpbmU9ZnVuY3Rpb24odCxlLHIsbyxhKXt2YXIgcz1uKGgpO3RoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1oLHNbdF09ZVsxXVt0XS1lWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1zO3ZhciBsPWkocCxyKTtsW3RdKz1lWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1sLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPW87dmFyIHU9bihmKTt1Wyh0KzIpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz11LHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNik7dmFyIHU9bihmKTt1Wyh0KzEpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz11LHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNil9LG0uZHJhd0F4aXNUaWNrcz1mdW5jdGlvbih0LGUscixpLG8pe2lmKHRoaXMudGlja0NvdW50W3RdKXt2YXIgYT1uKGMpO2FbdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1vO3ZhciBzPW4oZik7c1t0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9cyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMudGlja0NvdW50W3RdLHRoaXMudGlja09mZnNldFt0XSl9fSxtLmRyYXdHcmlkPWZ1bmN0aW9uKHQsZSxyLG8sYSxzKXtpZih0aGlzLmdyaWRDb3VudFt0XSl7dmFyIGw9bihoKTtsW2VdPXJbMV1bZV0tclswXVtlXSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9bDt2YXIgdT1pKHAsbyk7dVtlXSs9clswXVtlXSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9dTt2YXIgZD1uKGMpO2RbdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9ZDt2YXIgbT1uKGYpO21bdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW0sdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPXMsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9YSx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMuZ3JpZENvdW50W3RdLHRoaXMuZ3JpZE9mZnNldFt0XSl9fSxtLmRyYXdaZXJvPWZ1bmN0aW9uKHQsZSxyLG8sYSxzKXt2YXIgbD1uKGgpO3RoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1sLGxbdF09clsxXVt0XS1yWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1sO3ZhciB1PWkocCxvKTt1W3RdKz1yWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD11O3ZhciBjPW4oZik7Y1tlXT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9Yyx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9cyx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1hLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNil9LG0uZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLnZlcnRCdWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjoxODUsImdsLWJ1ZmZlciI6MTI5LCJnbC12YW8iOjIzN31dLDE4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPSIjZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBvZmZzZXQsIG1ham9yQXhpcywgbWlub3JBeGlzLCBzY3JlZW5BeGlzO1xudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGg7XG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XG5cbnZlYzMgcHJvamVjdCh2ZWMzIHApIHtcbiAgdmVjNCBwcCA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XG4gIHJldHVybiBwcC54eXogLyBtYXgocHAudywgMC4wMDAxKTtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWMzIG1ham9yID0gcG9zaXRpb24ueCAqIG1ham9yQXhpcztcbiAgdmVjMyBtaW5vciA9IHBvc2l0aW9uLnkgKiBtaW5vckF4aXM7XG5cbiAgdmVjMyB2UG9zaXRpb24gPSBtYWpvciArIG1pbm9yICsgb2Zmc2V0O1xuICB2ZWMzIHBQb3NpdGlvbiA9IHByb2plY3QodlBvc2l0aW9uKTtcbiAgdmVjMyBvZmZzZXQgPSBwcm9qZWN0KHZQb3NpdGlvbiArIHNjcmVlbkF4aXMgKiBwb3NpdGlvbi56KTtcblxuICB2ZWMyIHNjcmVlbiA9IG5vcm1hbGl6ZSgob2Zmc2V0IC0gcFBvc2l0aW9uKS54eSAqIHNjcmVlblNoYXBlKSAvIHNjcmVlblNoYXBlO1xuXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwUG9zaXRpb24gKyB2ZWMzKDAuNSAqIHNjcmVlbiAqIGxpbmVXaWR0aCwgMCksIDEuMCk7XG59XG4iLG89InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59IjtyLmxpbmU9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCxpLG8sbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn1dKX07dmFyIGE9IiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIG9mZnNldCwgYXhpcztcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIGFuZ2xlLCBwaXhlbFNjYWxlO1xudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XG5cbnZvaWQgbWFpbigpIHsgIFxuICAvL0NvbXB1dGUgcGxhbmUgb2Zmc2V0XG4gIHZlYzIgcGxhbmVDb29yZCA9IHBvc2l0aW9uLnh5ICogcGl4ZWxTY2FsZTtcbiAgbWF0MiBwbGFuZVhmb3JtID0gc2NhbGUgKiBtYXQyKGNvcyhhbmdsZSksIHNpbihhbmdsZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zaW4oYW5nbGUpLCBjb3MoYW5nbGUpKTtcbiAgdmVjMiB2aWV3T2Zmc2V0ID0gMi4wICogcGxhbmVYZm9ybSAqIHBsYW5lQ29vcmQgLyByZXNvbHV0aW9uO1xuXG4gIC8vQ29tcHV0ZSB3b3JsZCBvZmZzZXRcbiAgZmxvYXQgYXhpc0Rpc3RhbmNlID0gcG9zaXRpb24uejtcbiAgdmVjMyBkYXRhUG9zaXRpb24gPSBheGlzRGlzdGFuY2UgKiBheGlzICsgb2Zmc2V0O1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQoZGF0YVBvc2l0aW9uLCAxKTtcbiAgXG4gIC8vQ29tcHV0ZSBjbGlwIHBvc2l0aW9uXG4gIHZlYzQgdmlld1Bvc2l0aW9uID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXdQb3NpdGlvbjtcbiAgY2xpcFBvc2l0aW9uIC89IGNsaXBQb3NpdGlvbi53O1xuXG4gIC8vQXBwbHkgdGV4dCBvZmZzZXQgaW4gY2xpcCBjb29yZGluYXRlc1xuICBjbGlwUG9zaXRpb24gKz0gdmVjNCh2aWV3T2Zmc2V0LCAwLCAwKTtcblxuICAvL0RvbmVcbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG59IixzPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG51bmlmb3JtIHZlYzQgY29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufSI7ci50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsYSxzLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9XSl9O3ZhciBsPSIjZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMyBub3JtYWw7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBlbmFibGU7XG51bmlmb3JtIHZlYzMgYm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzMgY29sb3JDaGFubmVsO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGRvdChub3JtYWwsIGVuYWJsZSkgPiAwLjApIHtcbiAgICB2ZWMzIG5Qb3NpdGlvbiA9IG1peChib3VuZHNbMF0sIGJvdW5kc1sxXSwgMC41ICogKHBvc2l0aW9uICsgMS4wKSk7XG4gICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChuUG9zaXRpb24sIDEuMCk7XG4gIH0gZWxzZSB7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9XG4gIGNvbG9yQ2hhbm5lbCA9IGFicyhub3JtYWwpO1xufSIsdT0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3JzWzNdO1xuXG52YXJ5aW5nIHZlYzMgY29sb3JDaGFubmVsO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yQ2hhbm5lbC54ICogY29sb3JzWzBdICsgXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC55ICogY29sb3JzWzFdICtcbiAgICAgICAgICAgICAgICAgY29sb3JDaGFubmVsLnogKiBjb2xvcnNbMl07XG59IjtyLmJnPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsbCx1LG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pfX0seyJnbC1zaGFkZXIiOjIwOH1dLDE4NjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5zaGFkZXI9ZSx0aGlzLmJ1ZmZlcj1yLHRoaXMudmFvPW4sdGhpcy50aWNrT2Zmc2V0PXRoaXMudGlja0NvdW50PXRoaXMubGFiZWxPZmZzZXQ9dGhpcy5sYWJlbENvdW50PW51bGx9ZnVuY3Rpb24gaSh0LGUpe3RyeXtyZXR1cm4gbCh0LGUpfWNhdGNoKHIpe3JldHVybiBjb25zb2xlLndhcm4oImVycm9yIHZlY3Rvcml6aW5nIHRleHQ6IixyKSx7Y2VsbHM6W10scG9zaXRpb25zOltdfX19ZnVuY3Rpb24gbyh0LGUscixpLG8sbCl7dmFyIGM9YSh0KSxoPXModCxbe2J1ZmZlcjpjLHNpemU6M31dKSxmPXUodCk7Zi5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTA7dmFyIHA9bmV3IG4odCxmLGMsaCk7cmV0dXJuIHAudXBkYXRlKGUscixpLG8sbCkscH1lLmV4cG9ydHM9bzt2YXIgYT10KCJnbC1idWZmZXIiKSxzPXQoImdsLXZhbyIpLGw9dCgidmVjdG9yaXplLXRleHQiKSx1PXQoIi4vc2hhZGVycyIpLnRleHQsYz13aW5kb3d8fHIuZ2xvYmFsfHx7fSxoPWMuX19URVhUX0NBQ0hFfHx7fTtjLl9fVEVYVF9DQUNIRT17fTt2YXIgZj0zLHA9bi5wcm90b3R5cGUsZD1bMCwwXTtwLmJpbmQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy52YW8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKTt2YXIgaT10aGlzLnNoYWRlci51bmlmb3JtcztpLm1vZGVsPXQsaS52aWV3PWUsaS5wcm9qZWN0aW9uPXIsaS5waXhlbFNjYWxlPW4sZFswXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJXaWR0aCxkWzFdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCx0aGlzLnNoYWRlci51bmlmb3Jtcy5yZXNvbHV0aW9uPWR9LHAudXBkYXRlPWZ1bmN0aW9uKHQsZSxyLG4sbyl7ZnVuY3Rpb24gYSh0LGUscixuKXt2YXIgbz1oW3JdO298fChvPWhbcl09e30pO3ZhciBhPW9bZV07YXx8KGE9b1tlXT1pKGUse3RyaWFuZ2xlczohMCxmb250OnIsdGV4dEFsaWduOiJjZW50ZXIiLHRleHRCYXNlbGluZToibWlkZGxlIn0pKTtmb3IodmFyIGw9KG58fDEyKS8xMix1PWEucG9zaXRpb25zLGM9YS5jZWxscyxmPTAscD1jLmxlbmd0aDtwPmY7KytmKWZvcih2YXIgZD1jW2ZdLG09MjttPj0wOy0tbSl7dmFyIGc9dVtkW21dXTtzLnB1c2gobCpnWzBdLC1sKmdbMV0sdCl9fWZvcih2YXIgcz0odGhpcy5nbCxbXSksbD1bMCwwLDBdLHU9WzAsMCwwXSxjPVswLDAsMF0scD1bMCwwLDBdLGQ9MDszPmQ7KytkKXtjW2RdPXMubGVuZ3RoL2Z8MCxhKC41Kih0WzBdW2RdK3RbMV1bZF0pLGVbZF0scikscFtkXT0ocy5sZW5ndGgvZnwwKS1jW2RdLGxbZF09cy5sZW5ndGgvZnwwO2Zvcih2YXIgbT0wO208bltkXS5sZW5ndGg7KyttKW5bZF1bbV0udGV4dCYmYShuW2RdW21dLngsbltkXVttXS50ZXh0LG5bZF1bbV0uZm9udHx8byxuW2RdW21dLmZvbnRTaXplfHwxMik7dVtkXT0ocy5sZW5ndGgvZnwwKS1sW2RdfXRoaXMuYnVmZmVyLnVwZGF0ZShzKSx0aGlzLnRpY2tPZmZzZXQ9bCx0aGlzLnRpY2tDb3VudD11LHRoaXMubGFiZWxPZmZzZXQ9Yyx0aGlzLmxhYmVsQ291bnQ9cH07dmFyIG09WzAsMCwwXTtwLmRyYXdUaWNrcz1mdW5jdGlvbih0LGUscixuLGkpe2lmKHRoaXMudGlja0NvdW50W3RdKXt2YXIgbz1tO29bMF09b1sxXT1vWzJdPTAsb1t0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmF4aXM9byx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFuZ2xlPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NhbGU9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9bix0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMudGlja0NvdW50W3RdLHRoaXMudGlja09mZnNldFt0XSl9fTt2YXIgZz1bMCwwLDBdO3AuZHJhd0xhYmVsPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5sYWJlbENvdW50W3RdJiYodGhpcy5zaGFkZXIudW5pZm9ybXMuYXhpcz1nLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuYW5nbGU9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5zY2FsZT1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1uLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5sYWJlbENvdW50W3RdLHRoaXMubGFiZWxPZmZzZXRbdF0pKX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCl9fSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7Ii4vc2hhZGVycyI6MTg1LF9wcm9jZXNzOjU5LCJnbC1idWZmZXIiOjEyOSwiZ2wtdmFvIjoyMzcsInZlY3Rvcml6ZS10ZXh0Ijo0ODN9XSwxODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXQrIiIsbj1yLmluZGV4T2YoIi4iKSxpPTA7bj49MCYmKGk9ci5sZW5ndGgtbi0xKTt2YXIgbz1NYXRoLnBvdygxMCxpKSxhPU1hdGgucm91bmQodCplKm8pLHM9YSsiIjtpZihzLmluZGV4T2YoImUiKT49MClyZXR1cm4gczt2YXIgbD1hL28sdT1hJW87MD5hPyhsPTB8LU1hdGguY2VpbChsKSx1PTB8LXUpOihsPTB8TWF0aC5mbG9vcihsKSx1PTB8dSk7dmFyIGM9IiIrbDtpZigwPmEmJihjPSItIitjKSxpKXtmb3IodmFyIGg9IiIrdTtoLmxlbmd0aDxpOyloPSIwIitoO3JldHVybiBjKyIuIitofXJldHVybiBjfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9W10saT0wOzM+aTsrK2kpe2Zvcih2YXIgbz1bXSxhPSguNSoodFswXVtpXSt0WzFdW2ldKSwwKTthKmVbaV08PXRbMV1baV07KythKW8ucHVzaCh7eDphKmVbaV0sdGV4dDpuKGVbaV0sYSl9KTtmb3IodmFyIGE9LTE7YSplW2ldPj10WzBdW2ldOy0tYSlvLnB1c2goe3g6YSplW2ldLHRleHQ6bihlW2ldLGEpfSk7ci5wdXNoKG8pfXJldHVybiByfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDszPnI7KytyKXtpZih0W3JdLmxlbmd0aCE9PWVbcl0ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dFtyXS5sZW5ndGg7KytuKXt2YXIgaT10W3JdW25dLG89ZVtyXVtuXTtpZihpLnghPT1vLnh8fGkudGV4dCE9PW8udGV4dClyZXR1cm4hMX19cmV0dXJuITB9ci5jcmVhdGU9aSxyLmVxdWFsPW99LHt9XSwxODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49ZXx8MCxpPXJ8fDE7cmV0dXJuW1t0WzEyXSt0WzBdLHRbMTNdK3RbMV0sdFsxNF0rdFsyXSx0WzE1XSt0WzNdXSxbdFsxMl0tdFswXSx0WzEzXS10WzFdLHRbMTRdLXRbMl0sdFsxNV0tdFszXV0sW3RbMTJdK3RbNF0sdFsxM10rdFs1XSx0WzE0XSt0WzZdLHRbMTVdK3RbN11dLFt0WzEyXS10WzRdLHRbMTNdLXRbNV0sdFsxNF0tdFs2XSx0WzE1XS10WzddXSxbbip0WzEyXSt0WzhdLG4qdFsxM10rdFs5XSxuKnRbMTRdK3RbMTBdLG4qdFsxNV0rdFsxMV1dLFtpKnRbMTJdLXRbOF0saSp0WzEzXS10WzldLGkqdFsxNF0tdFsxMF0saSp0WzE1XS10WzExXV1dfWUuZXhwb3J0cz1ufSx7fV0sMTg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj11KGwodCxlKSxbZVtlLmxlbmd0aC0xXV0pO3JldHVybiByW3IubGVuZ3RoLTFdfWZ1bmN0aW9uIGkodCxlLHIsbil7dmFyIGk9bi1lLG89LWUvaTswPm8/bz0wOm8+MSYmKG89MSk7Zm9yKHZhciBhPTEtbyxzPXQubGVuZ3RoLGw9bmV3IEFycmF5KHMpLHU9MDtzPnU7Kyt1KWxbdV09byp0W3VdK2Eqclt1XTtyZXR1cm4gbH1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPVtdLG89W10sYT1uKHRbdC5sZW5ndGgtMV0sZSkscz10W3QubGVuZ3RoLTFdLGw9dFswXSx1PTA7dTx0Lmxlbmd0aDsrK3Uscz1sKXtsPXRbdV07dmFyIGM9bihsLGUpO2lmKDA+YSYmYz4wfHxhPjAmJjA+Yyl7dmFyIGg9aShzLGMsbCxhKTtyLnB1c2goaCksby5wdXNoKGguc2xpY2UoKSl9MD5jP28ucHVzaChsLnNsaWNlKCkpOmM+MD9yLnB1c2gobC5zbGljZSgpKTooci5wdXNoKGwuc2xpY2UoKSksby5wdXNoKGwuc2xpY2UoKSkpLGE9Y31yZXR1cm57cG9zaXRpdmU6cixuZWdhdGl2ZTpvfX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPVtdLG89bih0W3QubGVuZ3RoLTFdLGUpLGE9dFt0Lmxlbmd0aC0xXSxzPXRbMF0sbD0wO2w8dC5sZW5ndGg7KytsLGE9cyl7cz10W2xdO3ZhciB1PW4ocyxlKTsoMD5vJiZ1PjB8fG8+MCYmMD51KSYmci5wdXNoKGkoYSx1LHMsbykpLHU+PTAmJnIucHVzaChzLnNsaWNlKCkpLG89dX1yZXR1cm4gcn1mdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciByPVtdLG89bih0W3QubGVuZ3RoLTFdLGUpLGE9dFt0Lmxlbmd0aC0xXSxzPXRbMF0sbD0wO2w8dC5sZW5ndGg7KytsLGE9cyl7cz10W2xdO3ZhciB1PW4ocyxlKTsoMD5vJiZ1PjB8fG8+MCYmMD51KSYmci5wdXNoKGkoYSx1LHMsbykpLDA+PXUmJnIucHVzaChzLnNsaWNlKCkpLG89dX1yZXR1cm4gcn12YXIgbD10KCJyb2J1c3QtZG90LXByb2R1Y3QiKSx1PXQoInJvYnVzdC1zdW0iKTtlLmV4cG9ydHM9byxlLmV4cG9ydHMucG9zaXRpdmU9YSxlLmV4cG9ydHMubmVnYXRpdmU9c30seyJyb2J1c3QtZG90LXByb2R1Y3QiOjE5MCwicm9idXN0LXN1bSI6NDY1fV0sMTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9aSh0WzBdLGVbMF0pLG49MTtuPHQubGVuZ3RoOysrbilyPW8ocixpKHRbbl0sZVtuXSkpO3JldHVybiByfXZhciBpPXQoInR3by1wcm9kdWN0Iiksbz10KCJyb2J1c3Qtc3VtIik7ZS5leHBvcnRzPW59LHsicm9idXN0LXN1bSI6NDY1LCJ0d28tcHJvZHVjdCI6NDc5fV0sMTkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMubG89dCx0aGlzLmhpPWUsdGhpcy5waXhlbHNQZXJEYXRhVW5pdD1yfWZ1bmN0aW9uIGkodCxlLHIsbixpKXtmb3IodmFyIG89MDszPm87KytvKXtmb3IodmFyIGE9ZCxzPW0sbD0wOzM+bDsrK2wpc1tsXT1hW2xdPXJbbF07c1szXT1hWzNdPTEsc1tvXSs9MSxoKHMscyxlKSxzWzNdPDAmJih0W29dPTEvMCksYVtvXS09MSxoKGEsYSxlKSxhWzNdPDAmJih0W29dPTEvMCk7dmFyIHU9KGFbMF0vYVszXS1zWzBdL3NbM10pKm4sYz0oYVsxXS9hWzNdLXNbMV0vc1szXSkqaTt0W29dPS4yNSpNYXRoLnNxcnQodSp1K2MqYyl9cmV0dXJuIHR9ZnVuY3Rpb24gbyh0LGUscixuLG8pe3ZhciBoPWUubW9kZWx8fGYsZD1lLnZpZXd8fGYsbT1lLnByb2plY3Rpb258fGYseT10LmJvdW5kcyxvPW98fGwoaCxkLG0seSksYj1vLmF4aXM7by5lZGdlczt1KHAsZCxoKSx1KHAsbSxwKTtmb3IodmFyIHg9ZyxfPTA7Mz5fOysrXyl4W19dLmxvPTEvMCx4W19dLmhpPS0oMS8wKSx4W19dLnBpeGVsc1BlckRhdGFVbml0PTEvMDt2YXIgdz1hKGMocCxwKSk7YyhwLHApO2Zvcih2YXIgTT0wOzM+TTsrK00pe3ZhciBrPShNKzEpJTMsQT0oTSsyKSUzLFQ9djt0OmZvcih2YXIgXz0wOzI+XzsrK18pe3ZhciBFPVtdO2lmKGJbTV08MCE9ISFfKXtUW01dPXlbX11bTV07Zm9yKHZhciBTPTA7Mj5TOysrUyl7VFtrXT15W1NeX11ba107Zm9yKHZhciBMPTA7Mj5MOysrTClUW0FdPXlbTF5TXl9dW0FdLEUucHVzaChULnNsaWNlKCkpfWZvcih2YXIgUz0wO1M8dy5sZW5ndGg7KytTKXtpZigwPT09RS5sZW5ndGgpY29udGludWUgdDtFPXMucG9zaXRpdmUoRSx3W1NdKX1mb3IodmFyIFM9MDtTPEUubGVuZ3RoOysrUylmb3IodmFyIEE9RVtTXSx6PWkodixwLEEscixuKSxMPTA7Mz5MOysrTCl4W0xdLmxvPU1hdGgubWluKHhbTF0ubG8sQVtMXSkseFtMXS5oaT1NYXRoLm1heCh4W0xdLmhpLEFbTF0pLEwhPT1NJiYoeFtMXS5waXhlbHNQZXJEYXRhVW5pdD1NYXRoLm1pbih4W0xdLnBpeGVsc1BlckRhdGFVbml0LE1hdGguYWJzKHpbTF0pKSl9fX1yZXR1cm4geH1lLmV4cG9ydHM9bzt2YXIgYT10KCJleHRyYWN0LWZydXN0dW0tcGxhbmVzIikscz10KCJzcGxpdC1wb2x5Z29uIiksbD10KCIuL2xpYi9jdWJlLmpzIiksdT10KCJnbC1tYXQ0L211bHRpcGx5IiksYz10KCJnbC1tYXQ0L3RyYW5zcG9zZSIpLGg9dCgiZ2wtdmVjNC90cmFuc2Zvcm1NYXQ0IiksZj1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSkscD1uZXcgRmxvYXQzMkFycmF5KDE2KSxkPVswLDAsMCwxXSxtPVswLDAsMCwxXSxnPVtuZXcgbigxLzAsLSgxLzApLDEvMCksbmV3IG4oMS8wLC0oMS8wKSwxLzApLG5ldyBuKDEvMCwtKDEvMCksMS8wKV0sdj1bMCwwLDBdfSx7Ii4vbGliL2N1YmUuanMiOjE4MywiZXh0cmFjdC1mcnVzdHVtLXBsYW5lcyI6MTg4LCJnbC1tYXQ0L211bHRpcGx5IjoxNTAsImdsLW1hdDQvdHJhbnNwb3NlIjoxNTgsImdsLXZlYzQvdHJhbnNmb3JtTWF0NCI6MjM4LCJzcGxpdC1wb2x5Z29uIjoxODl9XSwxOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgY29sb3I7XG5hdHRyaWJ1dGUgZmxvYXQgd2VpZ2h0O1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY29vcmRpbmF0ZXNbM107XG51bmlmb3JtIHZlYzQgY29sb3JzWzNdO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGg7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyB2ZXJ0ZXhQb3NpdGlvbiA9IG1peChjb29yZGluYXRlc1swXSxcbiAgICBtaXgoY29vcmRpbmF0ZXNbMl0sIGNvb3JkaW5hdGVzWzFdLCAwLjUgKiAocG9zaXRpb24gKyAxLjApKSwgYWJzKHBvc2l0aW9uKSk7XG5cbiAgdmVjNCBjbGlwUG9zID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQodmVydGV4UG9zaXRpb24sIDEuMCk7XG4gIHZlYzIgY2xpcE9mZnNldCA9IChwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChjb2xvciwgMC4wKSkueHk7XG4gIHZlYzIgZGVsdGEgPSB3ZWlnaHQgKiBjbGlwT2Zmc2V0ICogc2NyZWVuU2hhcGU7XG4gIHZlYzIgbGluZU9mZnNldCA9IG5vcm1hbGl6ZSh2ZWMyKGRlbHRhLnksIC1kZWx0YS54KSkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiAgID0gdmVjNChjbGlwUG9zLnh5ICsgY2xpcFBvcy53ICogMC41ICogbGluZVdpZHRoICogbGluZU9mZnNldCwgY2xpcFBvcy56LCBjbGlwUG9zLncpO1xuICBmcmFnQ29sb3IgICAgID0gY29sb3IueCAqIGNvbG9yc1swXSArIGNvbG9yLnkgKiBjb2xvcnNbMV0gKyBjb2xvci56ICogY29sb3JzWzJdO1xufVxuIixvPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xufSI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsaSxvLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjMyJ9LHtuYW1lOiJ3ZWlnaHQiLHR5cGU6ImZsb2F0In1dKX19LHsiZ2wtc2hhZGVyIjoyMDh9XSwxOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1stMWUzLC0xZTMsLTFlM10sWzFlMywxZTMsMWUzXV0sdGhpcy5wb3NpdGlvbj1bMCwwLDBdLHRoaXMubGluZVdpZHRoPVsyLDIsMl0sdGhpcy5jb2xvcnM9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmVuYWJsZWQ9WyEwLCEwLCEwXSx0aGlzLmRyYXdTaWRlcz1bITAsITAsITBdLHRoaXMuYXhlcz1udWxsfWZ1bmN0aW9uIGkodCxlKXtmdW5jdGlvbiByKHQsZSxyLG4sbyxhKXt2YXIgcz1bdCxlLHIsMCwwLDAsMV07c1tuKzNdPTEsc1tuXT1vLGkucHVzaC5hcHBseShpLHMpLHNbNl09LTEsaS5wdXNoLmFwcGx5KGkscyksc1tuXT1hLGkucHVzaC5hcHBseShpLHMpLGkucHVzaC5hcHBseShpLHMpLHNbNl09MSxpLnB1c2guYXBwbHkoaSxzKSxzW25dPW8saS5wdXNoLmFwcGx5KGkscyl9dmFyIGk9W107cigwLDAsMCwwLDAsMSkscigwLDAsMCwxLDAsMSkscigwLDAsMCwyLDAsMSkscigxLDAsMCwxLC0xLDEpLHIoMSwwLDAsMiwtMSwxKSxyKDAsMSwwLDAsLTEsMSkscigwLDEsMCwyLC0xLDEpLHIoMCwwLDEsMCwtMSwxKSxyKDAsMCwxLDEsLTEsMSk7dmFyIGw9byh0LGkpLHU9YSh0LFt7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6Mjh9LHt0eXBlOnQuRkxPQVQsYnVmZmVyOmwsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6Mjh9LHt0eXBlOnQuRkxPQVQsYnVmZmVyOmwsc2l6ZToxLG9mZnNldDoyNCxzdHJpZGU6Mjh9XSksYz1zKHQpO2MuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGMuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0xLGMuYXR0cmlidXRlcy53ZWlnaHQubG9jYXRpb249Mjt2YXIgaD1uZXcgbih0LGwsdSxjKTtyZXR1cm4gaC51cGRhdGUoZSksaH12YXIgbz10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLHM9dCgiLi9zaGFkZXJzL2luZGV4Iik7ZS5leHBvcnRzPWk7dmFyIGw9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLHU9bi5wcm90b3R5cGUsYz1bMCwwLDBdLGg9WzAsMCwwXSxmPVswLDBdO3UuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiExfSx1LmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXt9LHUuZHJhdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy52YW8sbj10aGlzLnNoYWRlcjtyLmJpbmQoKSxuLmJpbmQoKTt2YXIgaSxvPXQubW9kZWx8fGwsYT10LnZpZXd8fGwscz10LnByb2plY3Rpb258fGw7dGhpcy5heGVzJiYoaT10aGlzLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzKTtmb3IodmFyIHU9YyxwPWgsZD0wOzM+ZDsrK2QpaSYmaVtkXTwwPyh1W2RdPXRoaXMuYm91bmRzWzBdW2RdLHBbZF09dGhpcy5ib3VuZHNbMV1bZF0pOih1W2RdPXRoaXMuYm91bmRzWzFdW2RdLHBbZF09dGhpcy5ib3VuZHNbMF1bZF0pO2ZbMF09ZS5kcmF3aW5nQnVmZmVyV2lkdGgsZlsxXT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQsbi51bmlmb3Jtcy5tb2RlbD1vLG4udW5pZm9ybXMudmlldz1hLG4udW5pZm9ybXMucHJvamVjdGlvbj1zLG4udW5pZm9ybXMuY29vcmRpbmF0ZXM9W3RoaXMucG9zaXRpb24sdSxwXSxuLnVuaWZvcm1zLmNvbG9ycz10aGlzLmNvbG9ycyxuLnVuaWZvcm1zLnNjcmVlblNoYXBlPWY7Zm9yKHZhciBkPTA7Mz5kOysrZCluLnVuaWZvcm1zLmxpbmVXaWR0aD10aGlzLmxpbmVXaWR0aFtkXSp0aGlzLnBpeGVsUmF0aW8sdGhpcy5lbmFibGVkW2RdJiYoci5kcmF3KGUuVFJJQU5HTEVTLDYsNipkKSx0aGlzLmRyYXdTaWRlc1tkXSYmci5kcmF3KGUuVFJJQU5HTEVTLDEyLDE4KzEyKmQpKTtyLnVuYmluZCgpfSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt0JiYoImJvdW5kcyJpbiB0JiYodGhpcy5ib3VuZHM9dC5ib3VuZHMpLCJwb3NpdGlvbiJpbiB0JiYodGhpcy5wb3NpdGlvbj10LnBvc2l0aW9uKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksImNvbG9ycyJpbiB0JiYodGhpcy5jb2xvcnM9dC5jb2xvcnMpLCJlbmFibGVkImluIHQmJih0aGlzLmVuYWJsZWQ9dC5lbmFibGVkKSwiZHJhd1NpZGVzImluIHQmJih0aGlzLmRyYXdTaWRlcz10LmRyYXdTaWRlcykpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzL2luZGV4IjoxOTIsImdsLWJ1ZmZlciI6MTI5LCJnbC12YW8iOjIzN31dLDE5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7dGhpcy5tb3VzZT1bLTEsLTFdLHRoaXMuc2NyZWVuPW51bGwsdGhpcy5kaXN0YW5jZT0xLzAsdGhpcy5pbmRleD1udWxsLHRoaXMuZGF0YUNvb3JkaW5hdGU9bnVsbCx0aGlzLmRhdGFQb3NpdGlvbj1udWxsLHRoaXMub2JqZWN0PW51bGwsdGhpcy5kYXRhPW51bGx9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPW51bGw7dHJ5e3I9dC5nZXRDb250ZXh0KCJ3ZWJnbCIsZSkscnx8KHI9dC5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLGUpKX1jYXRjaChuKXtyZXR1cm4gbnVsbH1yZXR1cm4gcn1mdW5jdGlvbiBvKHQpe3ZhciBlPU1hdGgucm91bmQoTWF0aC5sb2coTWF0aC5hYnModCkpL01hdGgubG9nKDEwKSk7aWYoMD5lKXt2YXIgcj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLC1lKSk7cmV0dXJuIE1hdGguY2VpbCh0KnIpL3J9aWYoZT4wKXt2YXIgcj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLGUpKTtyZXR1cm4gTWF0aC5jZWlsKHQvcikqcn1yZXR1cm4gTWF0aC5jZWlsKHQpfWZ1bmN0aW9uIGEodCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdD90OiEwfWZ1bmN0aW9uIHModCl7ZnVuY3Rpb24gZSgpe2lmKCFfJiZHLmF1dG9SZXNpemUpe3ZhciB0PXcucGFyZW50Tm9kZSxlPTEscj0xO3QmJnQhPT1kb2N1bWVudC5ib2R5PyhlPXQuY2xpZW50V2lkdGgscj10LmNsaWVudEhlaWdodCk6KGU9d2luZG93LmlubmVyV2lkdGgscj13aW5kb3cuaW5uZXJIZWlnaHQpO3ZhciBuPTB8TWF0aC5jZWlsKGUqRy5waXhlbFJhdGlvKSxpPTB8TWF0aC5jZWlsKHIqRy5waXhlbFJhdGlvKTtpZihuIT09dy53aWR0aHx8aSE9PXcuaGVpZ2h0KXt3LndpZHRoPW4sdy5oZWlnaHQ9aTt2YXIgbz13LnN0eWxlO28ucG9zaXRpb249by5wb3NpdGlvbnx8ImFic29sdXRlIixvLmxlZnQ9IjBweCIsby50b3A9IjBweCIsby53aWR0aD1lKyJweCIsby5oZWlnaHQ9cisicHgiLEY9ITB9fX1mdW5jdGlvbiByKCl7Zm9yKHZhciB0PVIubGVuZ3RoLGU9Ty5sZW5ndGgscj0wO2U+cjsrK3IpRFtyXT0wO3Q6Zm9yKHZhciByPTA7dD5yOysrcil7dmFyIG49UltyXSxpPW4ucGlja1Nsb3RzO2lmKGkpe2Zvcih2YXIgbz0wO2U+bzsrK28paWYoRFtvXStpPDI1NSl7altyXT1vLG4uc2V0UGlja0Jhc2UoRFtvXSsxKSxEW29dKz1pO2NvbnRpbnVlIHR9dmFyIGE9ZihrLHEpO2pbcl09ZSxPLnB1c2goYSksRC5wdXNoKGkpLG4uc2V0UGlja0Jhc2UoMSksZSs9MX1lbHNlIGpbcl09LTF9Zm9yKDtlPjAmJjA9PT1EW2UtMV07KUQucG9wKCksTy5wb3AoKS5kaXNwb3NlKCl9ZnVuY3Rpb24gcygpe3JldHVybiBHLmNvbnRleHRMb3N0PyEwOnZvaWQoay5pc0NvbnRleHRMb3N0KCkmJihHLmNvbnRleHRMb3N0PSEwLEcubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLEcuc2VsZWN0aW9uLm9iamVjdD1udWxsLEcub25jb250ZXh0bG9zcyYmRy5vbmNvbnRleHRsb3NzKCkpKX1mdW5jdGlvbiB5KCl7aWYoIXMoKSl7ay5jb2xvck1hc2soITAsITAsITAsITApLGsuZGVwdGhNYXNrKCEwKSxrLmRpc2FibGUoay5CTEVORCksay5lbmFibGUoay5ERVBUSF9URVNUKTtmb3IodmFyIHQ9Ui5sZW5ndGgsZT1PLmxlbmd0aCxyPTA7ZT5yOysrcil7dmFyIG49T1tyXTtuLnNoYXBlPUgsbi5iZWdpbigpO2Zvcih2YXIgaT0wO3Q+aTsrK2kpaWYoaltpXT09PXIpe3ZhciBvPVJbaV07by5kcmF3UGljayYmKG8ucGl4ZWxSYXRpbz0xLG8uZHJhd1BpY2soVikpfW4uZW5kKCl9fX1mdW5jdGlvbiBiKCl7aWYoIXMoKSl7ZSgpO3ZhciB0PUcuY2FtZXJhLnRpY2soKTtWLnZpZXc9Ry5jYW1lcmEubWF0cml4LEY9Rnx8dCxOPU58fHQsSS5waXhlbFJhdGlvPUcucGl4ZWxSYXRpbyxDLnBpeGVsUmF0aW89Ry5waXhlbFJhdGlvO3ZhciByPVIubGVuZ3RoLG49V1swXSxpPVdbMV07blswXT1uWzFdPW5bMl09MS8wLGlbMF09aVsxXT1pWzJdPS0oMS8wKTtmb3IodmFyIGE9MDtyPmE7KythKXt2YXIgbD1SW2FdO2wucGl4ZWxSYXRpbz1HLnBpeGVsUmF0aW8sbC5heGVzPUcuYXhlcyxGPUZ8fCEhbC5kaXJ0eSxOPU58fCEhbC5kaXJ0eTt2YXIgdT1sLmJvdW5kcztpZih1KWZvcih2YXIgaD11WzBdLGY9dVsxXSxwPTA7Mz5wOysrcCluW3BdPU1hdGgubWluKG5bcF0saFtwXSksaVtwXT1NYXRoLm1heChpW3BdLGZbcF0pfXZhciBtPUcuYm91bmRzO2lmKEcuYXV0b0JvdW5kcylmb3IodmFyIHA9MDszPnA7KytwKXtpZihpW3BdPG5bcF0pbltwXT0tMSxpW3BdPTE7ZWxzZXtuW3BdPT09aVtwXSYmKG5bcF0tPTEsaVtwXSs9MSk7dmFyIHY9LjA1KihpW3BdLW5bcF0pO25bcF09bltwXS12LGlbcF09aVtwXSt2fW1bMF1bcF09bltwXSxtWzFdW3BdPWlbcF19Zm9yKHZhciBiPSExLHA9MDszPnA7KytwKWI9Ynx8WlswXVtwXSE9PW1bMF1bcF18fFpbMV1bcF0hPT1tWzFdW3BdLFpbMF1bcF09bVswXVtwXSxaWzFdW3BdPW1bMV1bcF07aWYoYil7Zm9yKHZhciB4PVswLDAsMF0sYT0wOzM+YTsrK2EpeFthXT1vKChtWzFdW2FdLW1bMF1bYV0pLzEwKTtJLmF1dG9UaWNrcz9JLnVwZGF0ZSh7Ym91bmRzOm0sdGlja1NwYWNpbmc6eH0pOkkudXBkYXRlKHtib3VuZHM6bX0pfU49Tnx8YixGPUZ8fGI7dmFyIF89ay5kcmF3aW5nQnVmZmVyV2lkdGgsdz1rLmRyYXdpbmdCdWZmZXJIZWlnaHQ7cVswXT1fLHFbMV09dyxIWzBdPTB8TWF0aC5tYXgoXy9HLnBpeGVsUmF0aW8sMSksSFsxXT0wfE1hdGgubWF4KHcvRy5waXhlbFJhdGlvLDEpLGcoQixHLmZvdnksXy93LEcuek5lYXIsRy56RmFyKTtmb3IodmFyIGE9MDsxNj5hOysrYSlVW2FdPTA7VVsxNV09MTtmb3IodmFyIE09MCxhPTA7Mz5hOysrYSlNPU1hdGgubWF4KE0sbVsxXVthXS1tWzBdW2FdKTtmb3IodmFyIGE9MDszPmE7KythKUcuYXV0b1NjYWxlP1VbNSphXT1HLmFzcGVjdFthXS8obVsxXVthXS1tWzBdW2FdKTpVWzUqYV09MS9NLEcuYXV0b0NlbnRlciYmKFVbMTIrYV09LjUqLVVbNSphXSoobVswXVthXSttWzFdW2FdKSk7Zm9yKHZhciBhPTA7cj5hOysrYSl7dmFyIGw9UlthXTtsLmF4ZXNCb3VuZHM9bSxHLmNsaXBUb0JvdW5kcyYmKGwuY2xpcEJvdW5kcz1tKX1pZihULm9iamVjdCYmKEcuc25hcFRvRGF0YT9DLnBvc2l0aW9uPVQuZGF0YUNvb3JkaW5hdGU6Qy5wb3NpdGlvbj1ULmRhdGFQb3NpdGlvbixDLmJvdW5kcz1tKSxOJiYoTj0hMSx5KCkpLEYpe0cuYXhlc1BpeGVscz1jKEcuYXhlcyxWLF8sdyksRy5vbnJlbmRlciYmRy5vbnJlbmRlcigpLGsuYmluZEZyYW1lYnVmZmVyKGsuRlJBTUVCVUZGRVIsbnVsbCksay52aWV3cG9ydCgwLDAsXyx3KTt2YXIgQT1HLmNsZWFyQ29sb3I7ay5jbGVhckNvbG9yKEFbMF0sQVsxXSxBWzJdLEFbM10pLGsuY2xlYXIoay5DT0xPUl9CVUZGRVJfQklUfGsuREVQVEhfQlVGRkVSX0JJVCksay5kZXB0aE1hc2soITApLGsuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSxrLmVuYWJsZShrLkRFUFRIX1RFU1QpLGsuZGVwdGhGdW5jKGsuTEVRVUFMKSxrLmRpc2FibGUoay5CTEVORCksay5kaXNhYmxlKGsuQ1VMTF9GQUNFKTt2YXIgTD0hMTtJLmVuYWJsZSYmKEw9THx8SS5pc1RyYW5zcGFyZW50KCksSS5kcmF3KFYpKSxDLmF4ZXM9SSxULm9iamVjdCYmQy5kcmF3KFYpLGsuZGlzYWJsZShrLkNVTExfRkFDRSk7Zm9yKHZhciBhPTA7cj5hOysrYSl7dmFyIGw9UlthXTtsLmF4ZXM9SSxsLnBpeGVsUmF0aW89Ry5waXhlbFJhdGlvLGwuaXNPcGFxdWUmJmwuaXNPcGFxdWUoKSYmbC5kcmF3KFYpLGwuaXNUcmFuc3BhcmVudCYmbC5pc1RyYW5zcGFyZW50KCkmJihMPSEwKX1pZihMKXtFLnNoYXBlPXEsRS5iaW5kKCksay5jbGVhcihrLkRFUFRIX0JVRkZFUl9CSVQpLGsuY29sb3JNYXNrKCExLCExLCExLCExKSxrLmRlcHRoTWFzayghMCksay5kZXB0aEZ1bmMoay5MRVNTKSxJLmVuYWJsZSYmSS5pc1RyYW5zcGFyZW50KCkmJkkuZHJhd1RyYW5zcGFyZW50KFYpO2Zvcih2YXIgYT0wO3I+YTsrK2Epe3ZhciBsPVJbYV07bC5pc09wYXF1ZSYmbC5pc09wYXF1ZSgpJiZsLmRyYXcoVil9ay5lbmFibGUoay5CTEVORCksay5ibGVuZEVxdWF0aW9uKGsuRlVOQ19BREQpLGsuYmxlbmRGdW5jKGsuT05FLGsuT05FX01JTlVTX1NSQ19BTFBIQSksay5jb2xvck1hc2soITAsITAsITAsITApLGsuZGVwdGhNYXNrKCExKSxrLmNsZWFyQ29sb3IoMCwwLDAsMCksay5jbGVhcihrLkNPTE9SX0JVRkZFUl9CSVQpLEkuaXNUcmFuc3BhcmVudCgpJiZJLmRyYXdUcmFuc3BhcmVudChWKTtmb3IodmFyIGE9MDtyPmE7KythKXt2YXIgbD1SW2FdO2wuaXNUcmFuc3BhcmVudCYmbC5pc1RyYW5zcGFyZW50KCkmJmwuZHJhd1RyYW5zcGFyZW50KFYpfWsuYmluZEZyYW1lYnVmZmVyKGsuRlJBTUVCVUZGRVIsbnVsbCksay5ibGVuZEZ1bmMoay5PTkUsay5PTkVfTUlOVVNfU1JDX0FMUEhBKSxrLmRpc2FibGUoay5ERVBUSF9URVNUKSxTLmJpbmQoKSxFLmNvbG9yWzBdLmJpbmQoMCksUy51bmlmb3Jtcy5hY2N1bUJ1ZmZlcj0wLGQoayksay5kaXNhYmxlKGsuQkxFTkQpfUY9ITE7Zm9yKHZhciBhPTA7cj5hOysrYSlSW2FdLmRpcnR5PSExfX19ZnVuY3Rpb24geCgpe198fEcuY29udGV4dExvc3R8fChyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoeCksYigpKX10PXR8fHt9O3ZhciBfPSExLHc9KHQucGl4ZWxSYXRpb3x8cGFyc2VGbG9hdCh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyksdC5jYW52YXMpO2lmKCF3KWlmKHc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdC5jb250YWluZXIpe3ZhciBNPXQuY29udGFpbmVyO00uYXBwZW5kQ2hpbGQodyl9ZWxzZSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHcpO3ZhciBrPXQuZ2w7aWYoa3x8KGs9aSh3LHQuZ2xPcHRpb25zfHx7cHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSwhayl0aHJvdyBuZXcgRXJyb3IoIndlYmdsIG5vdCBzdXBwb3J0ZWQiKTt2YXIgQT10LmJvdW5kc3x8W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sVD1uZXcgbixFPXAoayxbay5kcmF3aW5nQnVmZmVyV2lkdGgsay5kcmF3aW5nQnVmZmVySGVpZ2h0XSx7cHJlZmVyRmxvYXQ6ITB9KSxTPXYoayksTD10LmNhbWVyYXx8e2V5ZTpbMiwwLDBdLGNlbnRlcjpbMCwwLDBdLHVwOlswLDEsMF0sem9vbU1pbjouMSx6b29tTWF4OjEwMCxtb2RlOiJ0dXJudGFibGUifSx6PXQuYXhlc3x8e30sST11KGsseik7SS5lbmFibGU9IXouZGlzYWJsZTt2YXIgUD10LnNwaWtlc3x8e30sQz1oKGssUCksUj1bXSxqPVtdLEQ9W10sTz1bXSxGPSEwLE49ITAsQj1uZXcgQXJyYXkoMTYpLFU9bmV3IEFycmF5KDE2KSxWPXt2aWV3Om51bGwscHJvamVjdGlvbjpCLG1vZGVsOlV9LE49ITAscT1bay5kcmF3aW5nQnVmZmVyV2lkdGgsay5kcmF3aW5nQnVmZmVySGVpZ2h0XSxHPXtnbDprLGNvbnRleHRMb3N0OiExLHBpeGVsUmF0aW86dC5waXhlbFJhdGlvfHxwYXJzZUZsb2F0KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSxjYW52YXM6dyxzZWxlY3Rpb246VCxjYW1lcmE6bCh3LEwpLGF4ZXM6SSxheGVzUGl4ZWxzOm51bGwsc3Bpa2VzOkMsYm91bmRzOkEsb2JqZWN0czpSLHNoYXBlOnEsYXNwZWN0OnQuYXNwZWN0UmF0aW98fFsxLDEsMV0scGlja1JhZGl1czp0LnBpY2tSYWRpdXN8fDEwLHpOZWFyOnQuek5lYXJ8fC4wMSx6RmFyOnQuekZhcnx8MWUzLGZvdnk6dC5mb3Z5fHxNYXRoLlBJLzQsY2xlYXJDb2xvcjp0LmNsZWFyQ29sb3J8fFswLDAsMCwwXSxhdXRvUmVzaXplOmEodC5hdXRvUmVzaXplKSxhdXRvQm91bmRzOmEodC5hdXRvQm91bmRzKSxhdXRvU2NhbGU6ISF0LmF1dG9TY2FsZSxhdXRvQ2VudGVyOmEodC5hdXRvQ2VudGVyKSxjbGlwVG9Cb3VuZHM6YSh0LmNsaXBUb0JvdW5kcyksc25hcFRvRGF0YTohIXQuc25hcFRvRGF0YSxvbnNlbGVjdDp0Lm9uc2VsZWN0fHxudWxsLG9ucmVuZGVyOnQub25yZW5kZXJ8fG51bGwsb25jbGljazp0Lm9uY2xpY2t8fG51bGwsY2FtZXJhUGFyYW1zOlYsb25jb250ZXh0bG9zczpudWxsLG1vdXNlTGlzdGVuZXI6bnVsbH0sSD1bay5kcmF3aW5nQnVmZmVyV2lkdGgvRy5waXhlbFJhdGlvfDAsay5kcmF3aW5nQnVmZmVySGVpZ2h0L0cucGl4ZWxSYXRpb3wwXTtHLmF1dG9SZXNpemUmJmUoKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixlKSxHLnVwZGF0ZT1mdW5jdGlvbih0KXtffHwodD10fHx7fSxGPSEwLE49ITApfSxHLmFkZD1mdW5jdGlvbih0KXtffHwodC5heGVzPUksUi5wdXNoKHQpLGoucHVzaCgtMSksRj0hMCxOPSEwLHIoKSl9LEcucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKCFfKXt2YXIgZT1SLmluZGV4T2YodCk7MD5lfHwoUi5zcGxpY2UoZSwxKSxqLnBvcCgpLEY9ITAsTj0hMCxyKCkpfX0sRy5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoIV8mJihfPSEwLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLGUpLHcucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIscyksRy5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsIUcuY29udGV4dExvc3QpKXtJLmRpc3Bvc2UoKSxDLmRpc3Bvc2UoKTtmb3IodmFyIHQ9MDt0PFIubGVuZ3RoOysrdClSW3RdLmRpc3Bvc2UoKTtFLmRpc3Bvc2UoKTtmb3IodmFyIHQ9MDt0PE8ubGVuZ3RoOysrdClPW3RdLmRpc3Bvc2UoKTtTLmRpc3Bvc2UoKSxrPW51bGwsST1udWxsLEM9bnVsbCxSPVtdfX07dmFyIFg9ITEsWT0wO0cubW91c2VMaXN0ZW5lcj1tKHcsZnVuY3Rpb24odCxlLHIpe2lmKCFfKXt2YXIgbj1PLmxlbmd0aCxpPVIubGVuZ3RoLG89VC5vYmplY3Q7VC5kaXN0YW5jZT0xLzAsVC5tb3VzZVswXT1lLFQubW91c2VbMV09cixULm9iamVjdD1udWxsLFQuc2NyZWVuPW51bGwsVC5kYXRhQ29vcmRpbmF0ZT1ULmRhdGFQb3NpdGlvbj1udWxsO3ZhciBhPSExO2lmKHQmJlkpWD0hMDtlbHNle1gmJihOPSEwKSxYPSExO2Zvcih2YXIgcz0wO24+czsrK3Mpe3ZhciBsPU9bc10ucXVlcnkoZSxIWzFdLXItMSxHLnBpY2tSYWRpdXMpO2lmKGwpe2lmKGwuZGlzdGFuY2U+VC5kaXN0YW5jZSljb250aW51ZTtmb3IodmFyIHU9MDtpPnU7Kyt1KXt2YXIgYz1SW3VdO2lmKGpbdV09PT1zKXt2YXIgaD1jLnBpY2sobCk7aCYmKFQuYnV0dG9ucz10LFQuc2NyZWVuPWwuY29vcmQsVC5kaXN0YW5jZT1sLmRpc3RhbmNlLFQub2JqZWN0PWMsVC5pbmRleD1oLmRpc3RhbmNlLFQuZGF0YVBvc2l0aW9uPWgucG9zaXRpb24sVC5kYXRhQ29vcmRpbmF0ZT1oLmRhdGFDb29yZGluYXRlLFQuZGF0YT1oLGE9ITApfX19fX1vJiZvIT09VC5vYmplY3QmJihvLmhpZ2hsaWdodCYmby5oaWdobGlnaHQobnVsbCksRj0hMCksVC5vYmplY3QmJihULm9iamVjdC5oaWdobGlnaHQmJlQub2JqZWN0LmhpZ2hsaWdodChULmRhdGEpLEY9ITApLGE9YXx8VC5vYmplY3QhPT1vLGEmJkcub25zZWxlY3QmJkcub25zZWxlY3QoVCksMSZ0JiYhKDEmWSkmJkcub25jbGljayYmRy5vbmNsaWNrKFQpLFk9dH19KSx3LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHMpO3ZhciBXPVtbMS8wLDEvMCwxLzBdLFstKDEvMCksLSgxLzApLC0oMS8wKV1dLFo9W1dbMF0uc2xpY2UoKSxXWzFdLnNsaWNlKCldO3JldHVybiB4KCksRy5yZWRyYXc9ZnVuY3Rpb24oKXtffHwoRj0hMCxiKCkpfSxHfWUuZXhwb3J0cz1zO3ZhciBsPXQoIjNkLXZpZXctY29udHJvbHMiKSx1PXQoImdsLWF4ZXMzZCIpLGM9dCgiZ2wtYXhlczNkL3Byb3BlcnRpZXMiKSxoPXQoImdsLXNwaWtlczNkIiksZj10KCJnbC1zZWxlY3Qtc3RhdGljIikscD10KCJnbC1mYm8iKSxkPXQoImEtYmlnLXRyaWFuZ2xlIiksbT10KCJtb3VzZS1jaGFuZ2UiKSxnPXQoImdsLW1hdDQvcGVyc3BlY3RpdmUiKSx2PXQoIi4vbGliL3NoYWRlciIpfSx7Ii4vbGliL3NoYWRlciI6MTc3LCIzZC12aWV3LWNvbnRyb2xzIjoxNzgsImEtYmlnLXRyaWFuZ2xlIjoxODAsImdsLWF4ZXMzZCI6MTgxLCJnbC1heGVzM2QvcHJvcGVydGllcyI6MTkxLCJnbC1mYm8iOjEzNCwiZ2wtbWF0NC9wZXJzcGVjdGl2ZSI6MTUxLCJnbC1zZWxlY3Qtc3RhdGljIjoyMDcsImdsLXNwaWtlczNkIjoxOTMsIm1vdXNlLWNoYW5nZSI6NDQ0fV0sMTk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17dmVydGV4OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzIgb2Zmc2V0O1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5cbnVuaWZvcm0gbWF0MyB2aWV3VHJhbnNmb3JtO1xudW5pZm9ybSB2ZWMyIHBpeGVsU2NhbGU7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZlYzQgY29tcHV0ZVBvc2l0aW9uXzFfMCh2ZWMyIHBvc2l0aW9uLCB2ZWMyIG9mZnNldCwgbWF0MyB2aWV3LCB2ZWMyIHNjYWxlKSB7XG4gIHZlYzMgeHBvc2l0aW9uID0gdmlldyAqIHZlYzMocG9zaXRpb24sIDEuMCk7XG4gIHJldHVybiB2ZWM0KFxuICAgIHhwb3NpdGlvbi54eSArIHNjYWxlICogb2Zmc2V0ICogeHBvc2l0aW9uLnosXG4gICAgMCxcbiAgICB4cG9zaXRpb24ueik7XG59XG5cblxuXG5cbnZvaWQgbWFpbigpIHtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG5cbiAgZ2xfUG9zaXRpb24gPSBjb21wdXRlUG9zaXRpb25fMV8wKFxuICAgIHBvc2l0aW9uLFxuICAgIG9mZnNldCxcbiAgICB2aWV3VHJhbnNmb3JtLFxuICAgIHBpeGVsU2NhbGUpO1xufVxuIixmcmFnbWVudDoicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiICogZnJhZ0NvbG9yLmEsIGZyYWdDb2xvci5hKTtcbn1cbiIscGlja1ZlcnRleDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMyIG9mZnNldDtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDMgdmlld1RyYW5zZm9ybTtcbnVuaWZvcm0gdmVjMiBwaXhlbFNjYWxlO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZlYzQgY29tcHV0ZVBvc2l0aW9uXzFfMCh2ZWMyIHBvc2l0aW9uLCB2ZWMyIG9mZnNldCwgbWF0MyB2aWV3LCB2ZWMyIHNjYWxlKSB7XG4gIHZlYzMgeHBvc2l0aW9uID0gdmlldyAqIHZlYzMocG9zaXRpb24sIDEuMCk7XG4gIHJldHVybiB2ZWM0KFxuICAgIHhwb3NpdGlvbi54eSArIHNjYWxlICogb2Zmc2V0ICogeHBvc2l0aW9uLnosXG4gICAgMCxcbiAgICB4cG9zaXRpb24ueik7XG59XG5cblxuXG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBmcmFnSWQgPSBpZCArIHBpY2tPZmZzZXQ7XG5cbiAgZnJhZ0lkLnkgKz0gZmxvb3IoZnJhZ0lkLnggLyAyNTYuMCk7XG4gIGZyYWdJZC54IC09IGZsb29yKGZyYWdJZC54IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZnJhZ0lkLnogKz0gZmxvb3IoZnJhZ0lkLnkgLyAyNTYuMCk7XG4gIGZyYWdJZC55IC09IGZsb29yKGZyYWdJZC55IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZnJhZ0lkLncgKz0gZmxvb3IoZnJhZ0lkLnogLyAyNTYuMCk7XG4gIGZyYWdJZC56IC09IGZsb29yKGZyYWdJZC56IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZnJhZ0NvbG9yID0gZnJhZ0lkIC8gMjU1LjA7XG5cbiAgZ2xfUG9zaXRpb24gPSBjb21wdXRlUG9zaXRpb25fMV8wKFxuICAgIHBvc2l0aW9uLFxuICAgIG9mZnNldCxcbiAgICB2aWV3VHJhbnNmb3JtLFxuICAgIHBpeGVsU2NhbGUpO1xufVxuIixwaWNrRnJhZ21lbnQ6InByZWNpc2lvbiBsb3dwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcbn1cbiJ9fSx7fV0sMTk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7aWYodCBpbiBmKXJldHVybiBmW3RdO3ZhciBlPWModCx7cG9seWdvbnM6ITAsZm9udDoic2Fucy1zZXJpZiIsdGV4dEFsaWduOiJsZWZ0Iix0ZXh0QmFzZWxpbmU6ImFscGhhYmV0aWMifSkscj1bXSxuPVtdO2UuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2Upe3ZhciBpPXRbKGUrdC5sZW5ndGgtMSkldC5sZW5ndGhdLG89dFtlXSxhPXRbKGUrMSkldC5sZW5ndGhdLHM9dFsoZSsyKSV0Lmxlbmd0aF0sbD1vWzBdLWlbMF0sdT1vWzFdLWlbMV0sYz1NYXRoLnNxcnQobCpsK3UqdSk7bC89Yyx1Lz1jLHIucHVzaChpWzBdLGlbMV0rMS40KSxuLnB1c2godSwtbCksci5wdXNoKGlbMF0saVsxXSsxLjQpLG4ucHVzaCgtdSxsKSxyLnB1c2gob1swXSxvWzFdKzEuNCksbi5wdXNoKC11LGwpLHIucHVzaChvWzBdLG9bMV0rMS40KSxuLnB1c2goLXUsbCksci5wdXNoKGlbMF0saVsxXSsxLjQpLG4ucHVzaCh1LC1sKSxyLnB1c2gob1swXSxvWzFdKzEuNCksbi5wdXNoKHUsLWwpO3ZhciBoPXNbMF0tYVswXSxmPXNbMV0tYVsxXSxwPU1hdGguc3FydChoKmgrZipmKTtoLz1wLGYvPXAsci5wdXNoKG9bMF0sb1sxXSsxLjQpLG4ucHVzaCh1LC1sKSxyLnB1c2gob1swXSxvWzFdKzEuNCksbi5wdXNoKC11LGwpLHIucHVzaChhWzBdLGFbMV0rMS40KSxuLnB1c2goLWYsaCksci5wdXNoKGFbMF0sYVsxXSsxLjQpLG4ucHVzaCgtZixoKSxyLnB1c2gob1swXSxvWzFdKzEuNCksbi5wdXNoKGYsLWgpLHIucHVzaChhWzBdLGFbMV0rMS40KSxuLnB1c2goZiwtaCl9fSl9KTtmb3IodmFyIGk9WzEvMCwxLzAsLSgxLzApLC0oMS8wKV0sbz0wO288ci5sZW5ndGg7bys9Milmb3IodmFyIGE9MDsyPmE7KythKWlbYV09TWF0aC5taW4oaVthXSxyW28rYV0pLGlbMithXT1NYXRoLm1heChpWzIrYV0scltvK2FdKTtyZXR1cm4gZlt0XT17Y29vcmRzOnIsbm9ybWFsczpuLGJvdW5kczppfX1mdW5jdGlvbiBpKHQsZSxyLG4saSxvLGEpe3RoaXMucGxvdD10LHRoaXMuc2hhZGVyPWUsdGhpcy5waWNrU2hhZGVyPXIsdGhpcy5wb3NpdGlvbkJ1ZmZlcj1uLHRoaXMub2Zmc2V0QnVmZmVyPWksdGhpcy5jb2xvckJ1ZmZlcj1vLHRoaXMuaWRCdWZmZXI9YSx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtKDEvMCksLSgxLzApXSx0aGlzLm51bVBvaW50cz0wLHRoaXMubnVtVmVydGljZXM9MCx0aGlzLnBpY2tPZmZzZXQ9MCx0aGlzLnBvaW50cz1udWxsfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj10LmdsLG49YShyLGgudmVydGV4LGguZnJhZ21lbnQpLG89YShyLGgucGlja1ZlcnRleCxoLnBpY2tGcmFnbWVudCksbD1zKHIpLHU9cyhyKSxjPXMociksZj1zKHIpLHA9bmV3IGkodCxuLG8sbCx1LGMsZik7cmV0dXJuIHAudXBkYXRlKGUpLHQuYWRkT2JqZWN0KHApLHB9ZS5leHBvcnRzPW87dmFyIGE9dCgiZ2wtc2hhZGVyIikscz10KCJnbC1idWZmZXIiKSxsPXQoInRleHQtY2FjaGUiKSx1PXQoInR5cGVkYXJyYXktcG9vbCIpLGM9dCgidmVjdG9yaXplLXRleHQiKSxoPXQoIi4vbGliL3NoYWRlcnMiKSxmPXt9LHA9aS5wcm90b3R5cGU7IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PXRoaXMucGxvdCxuPXRoaXMuYm91bmRzLGk9dC52aWV3Qm94LG89dC5kYXRhQm94LGE9dC5waXhlbFJhdGlvLHM9blsyXS1uWzBdLGw9blszXS1uWzFdLHU9b1syXS1vWzBdLGM9b1szXS1vWzFdO2VbMF09MipzL3UsZVs0XT0yKmwvYyxlWzZdPTIqKG5bMF0tb1swXSkvdS0xLGVbN109MiooblsxXS1vWzFdKS9jLTE7dmFyIGg9aVsyXS1pWzBdLGY9aVszXS1pWzFdO3JbMF09MiphL2gsclsxXT0yKmEvZn12YXIgZT1bMSwwLDAsMCwxLDAsMCwwLDFdLHI9WzEsMV07cC5kcmF3PWZ1bmN0aW9uKCl7dmFyIG49dGhpcy5wbG90LGk9dGhpcy5zaGFkZXIsbz10aGlzLm51bVZlcnRpY2VzO2lmKG8pe3ZhciBhPW4uZ2w7dC5jYWxsKHRoaXMpLGkuYmluZCgpLGkudW5pZm9ybXMucGl4ZWxTY2FsZT1yLGkudW5pZm9ybXMudmlld1RyYW5zZm9ybT1lLHRoaXMucG9zaXRpb25CdWZmZXIuYmluZCgpLGkuYXR0cmlidXRlcy5wb3NpdGlvbi5wb2ludGVyKCksdGhpcy5vZmZzZXRCdWZmZXIuYmluZCgpLGkuYXR0cmlidXRlcy5vZmZzZXQucG9pbnRlcigpLHRoaXMuY29sb3JCdWZmZXIuYmluZCgpLGkuYXR0cmlidXRlcy5jb2xvci5wb2ludGVyKGEuVU5TSUdORURfQllURSwhMCksYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLDAsbyl9fTt2YXIgbj1bMCwwLDAsMF07cC5kcmF3UGljaz1mdW5jdGlvbihpKXt2YXIgbz10aGlzLnBsb3QsYT10aGlzLnBpY2tTaGFkZXIscz10aGlzLm51bVZlcnRpY2VzLGw9by5nbDtpZih0aGlzLnBpY2tPZmZzZXQ9aSwhcylyZXR1cm4gaTtmb3IodmFyIHU9MDs0PnU7Kyt1KW5bdV09aT4+OCp1JjI1NTtyZXR1cm4gdC5jYWxsKHRoaXMpLGEuYmluZCgpLGEudW5pZm9ybXMucGl4ZWxTY2FsZT1yLGEudW5pZm9ybXMudmlld1RyYW5zZm9ybT1lLGEudW5pZm9ybXMucGlja09mZnNldD1uLHRoaXMucG9zaXRpb25CdWZmZXIuYmluZCgpLGEuYXR0cmlidXRlcy5wb3NpdGlvbi5wb2ludGVyKCksdGhpcy5vZmZzZXRCdWZmZXIuYmluZCgpLGEuYXR0cmlidXRlcy5vZmZzZXQucG9pbnRlcigpLHRoaXMuaWRCdWZmZXIuYmluZCgpLGEuYXR0cmlidXRlcy5pZC5wb2ludGVyKGwuVU5TSUdORURfQllURSwhMSksbC5kcmF3QXJyYXlzKGwuVFJJQU5HTEVTLDAscyksaSt0aGlzLm51bVBvaW50c319KCkscC5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLm51bVBvaW50cztpZihuPnJ8fHI+PW4raSlyZXR1cm4gbnVsbDt2YXIgbz1yLW4sYT10aGlzLnBvaW50cztyZXR1cm57b2JqZWN0OnRoaXMscG9pbnRJZDpvLGRhdGFDb29yZDpbYVsyKm9dLGFbMipvKzFdXX19LHAudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dC5wb3NpdGlvbnN8fFtdLHI9dC5jb2xvcnN8fFtdLGk9dC5nbHlwaHN8fFtdLG89dC5zaXplc3x8W10sYT10LmJvcmRlcldpZHRoc3x8W10scz10LmJvcmRlckNvbG9yc3x8W107dGhpcy5wb2ludHM9ZTtmb3IodmFyIGM9dGhpcy5ib3VuZHM9WzEvMCwxLzAsLSgxLzApLC0oMS8wKV0saD0wLGY9MDtmPGkubGVuZ3RoOysrZil7aCs9bCgic2Fucy1zZXJpZiIsaVtmXSkuZGF0YS5sZW5ndGgrbihpW2ZdKS5jb29yZHMubGVuZ3RoPj4xO2Zvcih2YXIgcD0wOzI+cDsrK3ApY1twXT1NYXRoLm1pbihjW3BdLGVbMipmK3BdKSxjWzIrcF09TWF0aC5tYXgoY1syK3BdLGVbMipmK3BdKX1jWzBdPT09Y1syXSYmKGNbMl0rPTEpLGNbM109PT1jWzFdJiYoY1szXSs9MSk7Zm9yKHZhciBkPTEvKGNbMl0tY1swXSksbT0xLyhjWzNdLWNbMV0pLGc9Y1swXSx2PWNbMV0seT11Lm1hbGxvY0Zsb2F0MzIoMipoKSxiPXUubWFsbG9jRmxvYXQzMigyKmgpLHg9dS5tYWxsb2NVaW50OCg0KmgpLF89dS5tYWxsb2NVaW50MzIoaCksdz0wLGY9MDtmPGkubGVuZ3RoOysrZil7Zm9yKHZhciBNPWwoInNhbnMtc2VyaWYiLGlbZl0pLGs9bihpW2ZdKSxBPWQqKGVbMipmXS1nKSxUPW0qKGVbMipmKzFdLXYpLEU9b1tmXSxTPTI1NSpyWzQqZl0sTD0yNTUqcls0KmYrMV0sej0yNTUqcls0KmYrMl0sST0yNTUqcls0KmYrM10sUD0uNSooay5ib3VuZHNbMF0ray5ib3VuZHNbMl0pLEM9LjUqKGsuYm91bmRzWzFdK2suYm91bmRzWzNdKSxwPTA7cDxNLmRhdGEubGVuZ3RoO3ArPTIpeVsyKnddPUEseVsyKncrMV09VCxiWzIqd109LUUqKE0uZGF0YVtwXS1QKSxiWzIqdysxXT0tRSooTS5kYXRhW3ArMV0tQykseFs0KnddPVMseFs0KncrMV09TCx4WzQqdysyXT16LHhbNCp3KzNdPUksX1t3XT1mLHcrPTE7dmFyIFI9YVtmXTtTPTI1NSpzWzQqZl0sTD0yNTUqc1s0KmYrMV0sej0yNTUqc1s0KmYrMl0sST0yNTUqc1s0KmYrM107CmZvcih2YXIgcD0wO3A8ay5jb29yZHMubGVuZ3RoO3ArPTIpeVsyKnddPUEseVsyKncrMV09VCxiWzIqd109LShFKihrLmNvb3Jkc1twXS1QKStSKmsubm9ybWFsc1twXSksYlsyKncrMV09LShFKihrLmNvb3Jkc1twKzFdLUMpK1Iqay5ub3JtYWxzW3ArMV0pLHhbNCp3XT1TLHhbNCp3KzFdPUwseFs0KncrMl09eix4WzQqdyszXT1JLF9bd109Zix3Kz0xfXRoaXMubnVtUG9pbnRzPWkubGVuZ3RoLHRoaXMubnVtVmVydGljZXM9aCx0aGlzLnBvc2l0aW9uQnVmZmVyLnVwZGF0ZSh5KSx0aGlzLm9mZnNldEJ1ZmZlci51cGRhdGUoYiksdGhpcy5jb2xvckJ1ZmZlci51cGRhdGUoeCksdGhpcy5pZEJ1ZmZlci51cGRhdGUoXyksdS5mcmVlKHkpLHUuZnJlZShiKSx1LmZyZWUoeCksdS5mcmVlKF8pfSxwLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvc2l0aW9uQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLm9mZnNldEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5jb2xvckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5pZEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX19LHsiLi9saWIvc2hhZGVycyI6MTk1LCJnbC1idWZmZXIiOjEyOSwiZ2wtc2hhZGVyIjoyMDgsInRleHQtY2FjaGUiOjQ3NiwidHlwZWRhcnJheS1wb29sIjo0ODEsInZlY3Rvcml6ZS10ZXh0Ijo0ODN9XSwxOTc6W2Z1bmN0aW9uKHQsZSxyKXtyLnBvaW50VmVydGV4PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuYXR0cmlidXRlIGZsb2F0IHdlaWdodDtcblxudW5pZm9ybSBtYXQzIG1hdHJpeDtcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplLCB1c2VXZWlnaHQ7XG5cbnZhcnlpbmcgZmxvYXQgZnJhZ1dlaWdodDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGhnUG9zaXRpb24gPSBtYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxKTtcbiAgZ2xfUG9zaXRpb24gID0gdmVjNChoZ1Bvc2l0aW9uLnh5LCAwLCBoZ1Bvc2l0aW9uLnopO1xuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XG4gIGZyYWdXZWlnaHQgPSBtaXgoMS4wLCB3ZWlnaHQsIHVzZVdlaWdodCk7XG59XG4iLHIucG9pbnRGcmFnbWVudD0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3IsIGJvcmRlckNvbG9yO1xudW5pZm9ybSBmbG9hdCBjZW50ZXJGcmFjdGlvbjtcblxudmFyeWluZyBmbG9hdCBmcmFnV2VpZ2h0O1xuXG5mbG9hdCBzbW9vdGhTdGVwKGZsb2F0IHgsIGZsb2F0IHkpIHtcbiAgcmV0dXJuIDEuMCAvICgxLjAgKyBleHAoNTAuMCooeCAtIHkpKSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgcmFkaXVzID0gbGVuZ3RoKDIuMCpnbF9Qb2ludENvb3JkLnh5LTEuMCk7XG4gIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgdmVjNCBiYXNlQ29sb3IgPSBtaXgoYm9yZGVyQ29sb3IsIGNvbG9yLCBzbW9vdGhTdGVwKHJhZGl1cywgY2VudGVyRnJhY3Rpb24pKTtcbiAgZmxvYXQgYWxwaGEgPSAxLjAgLSBwb3coMS4wIC0gYmFzZUNvbG9yLmEsIGZyYWdXZWlnaHQpO1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGJhc2VDb2xvci5yZ2IgKiBhbHBoYSwgYWxwaGEpO1xufVxuIixyLnBpY2tWZXJ0ZXg9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBwaWNrSWQ7XG5cbnVuaWZvcm0gbWF0MyBtYXRyaXg7XG51bmlmb3JtIGZsb2F0IHBvaW50U2l6ZTtcbnVuaWZvcm0gdmVjNCBwaWNrT2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgaGdQb3NpdGlvbiA9IG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEpO1xuICBnbF9Qb3NpdGlvbiAgPSB2ZWM0KGhnUG9zaXRpb24ueHksIDAsIGhnUG9zaXRpb24ueik7XG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcblxuICB2ZWM0IGlkID0gcGlja0lkICsgcGlja09mZnNldDtcbiAgaWQueSArPSBmbG9vcihpZC54IC8gMjU2LjApO1xuICBpZC54IC09IGZsb29yKGlkLnggLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC56ICs9IGZsb29yKGlkLnkgLyAyNTYuMCk7XG4gIGlkLnkgLT0gZmxvb3IoaWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLncgKz0gZmxvb3IoaWQueiAvIDI1Ni4wKTtcbiAgaWQueiAtPSBmbG9vcihpZC56IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZnJhZ0lkID0gaWQ7XG59XG4iLHIucGlja0ZyYWdtZW50PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgcmFkaXVzID0gbGVuZ3RoKDIuMCpnbF9Qb2ludENvb3JkLnh5LTEuMCk7XG4gIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0lkIC8gMjU1LjA7XG59XG4ifSx7fV0sMTk4OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzczXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6NzN9XSwxOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLG8pezQqZj49bz9pKDAsby0xLHQsZSxyLG4pOmgoMCxvLTEsdCxlLHIsbil9ZnVuY3Rpb24gaSh0LGUscixuLGksbyl7Zm9yKHZhciBhPXQrMTtlPj1hOysrYSl7Zm9yKHZhciBzPXJbYV0sbD1uWzIqYV0sdT1uWzIqYSsxXSxjPWlbYV0saD1vW2FdLGY9YTtmPnQ7KXt2YXIgcD1yW2YtMV0sZD1uWzIqKGYtMSldO2lmKChwLXN8fGwtZCk+PTApYnJlYWs7cltmXT1wLG5bMipmXT1kLG5bMipmKzFdPW5bMipmLTFdLGlbZl09aVtmLTFdLG9bZl09b1tmLTFdLGYtPTF9cltmXT1zLG5bMipmXT1sLG5bMipmKzFdPXUsaVtmXT1jLG9bZl09aH19ZnVuY3Rpb24gbyh0LGUscixuLGksbyl7dmFyIGE9clt0XSxzPW5bMip0XSxsPW5bMip0KzFdLHU9aVt0XSxjPW9bdF07clt0XT1yW2VdLG5bMip0XT1uWzIqZV0sblsyKnQrMV09blsyKmUrMV0saVt0XT1pW2VdLG9bdF09b1tlXSxyW2VdPWEsblsyKmVdPXMsblsyKmUrMV09bCxpW2VdPXUsb1tlXT1jfWZ1bmN0aW9uIGEodCxlLHIsbixpLG8pe3JbdF09cltlXSxuWzIqdF09blsyKmVdLG5bMip0KzFdPW5bMiplKzFdLGlbdF09aVtlXSxvW3RdPW9bZV19ZnVuY3Rpb24gcyh0LGUscixuLGksbyxhKXt2YXIgcz1uW3RdLGw9aVsyKnRdLHU9aVsyKnQrMV0sYz1vW3RdLGg9YVt0XTtuW3RdPW5bZV0saVsyKnRdPWlbMiplXSxpWzIqdCsxXT1pWzIqZSsxXSxvW3RdPW9bZV0sYVt0XT1hW2VdLG5bZV09bltyXSxpWzIqZV09aVsyKnJdLGlbMiplKzFdPWlbMipyKzFdLG9bZV09b1tyXSxhW2VdPWFbcl0sbltyXT1zLGlbMipyXT1sLGlbMipyKzFdPXUsb1tyXT1jLGFbcl09aH1mdW5jdGlvbiBsKHQsZSxyLG4saSxvLGEscyxsLHUsYyl7c1t0XT1zW2VdLGxbMip0XT1sWzIqZV0sbFsyKnQrMV09bFsyKmUrMV0sdVt0XT11W2VdLGNbdF09Y1tlXSxzW2VdPXIsbFsyKmVdPW4sbFsyKmUrMV09aSx1W2VdPW8sY1tlXT1hfWZ1bmN0aW9uIHUodCxlLHIsbixpKXtyZXR1cm4oclt0XS1yW2VdfHxuWzIqZV0tblsyKnRdfHxpW3RdLWlbZV0pPDB9ZnVuY3Rpb24gYyh0LGUscixuLGksbyxhLHMpe3JldHVybihlLW9bdF18fGFbMip0XS1yfHxpLXNbdF0pPDB9ZnVuY3Rpb24gaCh0LGUscixuLHAsZCl7dmFyIG09KGUtdCsxKS82fDAsZz10K20sdj1lLW0seT10K2U+PjEsYj15LW0seD15K20sXz1nLHc9YixNPXksaz14LEE9dixUPXQrMSxFPWUtMSxTPTA7dShfLHcscixuLHAsZCkmJihTPV8sXz13LHc9UyksdShrLEEscixuLHAsZCkmJihTPWssaz1BLEE9UyksdShfLE0scixuLHAsZCkmJihTPV8sXz1NLE09UyksdSh3LE0scixuLHAsZCkmJihTPXcsdz1NLE09UyksdShfLGsscixuLHAsZCkmJihTPV8sXz1rLGs9UyksdShNLGsscixuLHAsZCkmJihTPU0sTT1rLGs9UyksdSh3LEEscixuLHAsZCkmJihTPXcsdz1BLEE9UyksdSh3LE0scixuLHAsZCkmJihTPXcsdz1NLE09UyksdShrLEEscixuLHAsZCkmJihTPWssaz1BLEE9Uyk7dmFyIEw9clt3XSx6PW5bMip3XSxJPW5bMip3KzFdLFA9cFt3XSxDPWRbd10sUj1yW2tdLGo9blsyKmtdLEQ9blsyKmsrMV0sTz1wW2tdLEY9ZFtrXSxOPV8sQj1NLFU9QSxWPWcscT15LEc9dixIPXJbTl0sWD1yW0JdLFk9cltVXTtyW1ZdPUgscltxXT1YLHJbR109WTtmb3IodmFyIFc9MDsyPlc7KytXKXt2YXIgWj1uWzIqTitXXSxRPW5bMipCK1ddLEs9blsyKlUrV107blsyKlYrV109WixuWzIqcStXXT1RLG5bMipHK1ddPUt9dmFyIEo9cFtOXSwkPXBbQl0sdHQ9cFtVXTtwW1ZdPUoscFtxXT0kLHBbR109dHQ7dmFyIGV0PWRbTl0scnQ9ZFtCXSxudD1kW1VdO2RbVl09ZXQsZFtxXT1ydCxkW0ddPW50LGEoYix0LHIsbixwLGQpLGEoeCxlLHIsbixwLGQpO2Zvcih2YXIgaXQ9VDtFPj1pdDsrK2l0KWlmKGMoaXQsTCx6LEksUCxyLG4scCkpaXQhPT1UJiZvKGl0LFQscixuLHAsZCksKytUO2Vsc2UgaWYoIWMoaXQsUixqLEQsTyxyLG4scCkpZm9yKDs7KXtpZihjKEUsUixqLEQsTyxyLG4scCkpe2MoRSxMLHosSSxQLHIsbixwKT8ocyhpdCxULEUscixuLHAsZCksKytULC0tRSk6KG8oaXQsRSxyLG4scCxkKSwtLUUpO2JyZWFrfWlmKC0tRTxpdClicmVha31sKHQsVC0xLEwseixJLFAsQyxyLG4scCxkKSxsKGUsRSsxLFIsaixELE8sRixyLG4scCxkKSxmPj1ULTItdD9pKHQsVC0yLHIsbixwLGQpOmgodCxULTIscixuLHAsZCksZj49ZS0oRSsyKT9pKEUrMixlLHIsbixwLGQpOmgoRSsyLGUscixuLHAsZCksZj49RS1UP2koVCxFLHIsbixwLGQpOmgoVCxFLHIsbixwLGQpfWUuZXhwb3J0cz1uO3ZhciBmPTMyfSx7fV0sMjAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLG8sYSxzKXtmb3IodmFyIGw9cix1PXI7bj51OysrdSl7dmFyIGM9dFsyKnVdLGg9dFsyKnUrMV0sZj1lW3VdO2M+PWkmJmE+PWMmJmg+PW8mJnM+PWgmJih1PT09bD9sKz0xOih0WzIqdV09dFsyKmxdLHRbMip1KzFdPXRbMipsKzFdLGVbdV09ZVtsXSx0WzIqbF09Yyx0WzIqbCsxXT1oLGVbbF09ZixsKz0xKSl9cmV0dXJuIGx9ZnVuY3Rpb24gaSh0LGUscil7dGhpcy5waXhlbFNpemU9dCx0aGlzLm9mZnNldD1lLHRoaXMuY291bnQ9cn1mdW5jdGlvbiBvKHQsZSxyLG8pe2Z1bmN0aW9uIGwoaSxvLGEscyx1LGMpe3ZhciBoPS41KmEsZj1zKzEscD11LXM7cltfXT1wLHhbXysrXT1jO2Zvcih2YXIgZD0wOzI+ZDsrK2QpZm9yKHZhciBtPTA7Mj5tOysrbSl7dmFyIGc9aStkKmgsdj1vK20qaCx5PW4odCxlLGYsdSxnLHYsZytoLHYraCk7aWYoeSE9PWYpe2lmKHktZj49TWF0aC5tYXgoLjkqcCwzMikpe3ZhciBiPXUrcz4+PjE7bChnLHYsaCxmLGIsYysxKSxmPWJ9bChnLHYsaCxmLHksYysxKSxmPXl9fX12YXIgdT10Lmxlbmd0aD4+PjE7aWYoMT51KXJldHVybltdO2Zvcih2YXIgYz0xLzAsaD0xLzAsZj0tKDEvMCkscD0tKDEvMCksZD0wO3U+ZDsrK2Qpe3ZhciBtPXRbMipkXSxnPXRbMipkKzFdO2M9TWF0aC5taW4oYyxtKSxmPU1hdGgubWF4KGYsbSksaD1NYXRoLm1pbihoLGcpLHA9TWF0aC5tYXgocCxnKSxlW2RdPWR9Yz09PWYmJihmKz0xK01hdGguYWJzKGYpKSxoPT09cCYmKHArPTErTWF0aC5hYnMoZikpO3ZhciB2PTEvKGYtYykseT0xLyhwLWgpLGI9TWF0aC5tYXgoZi1jLHAtaCk7bz1vfHxbMCwwLDAsMF0sb1swXT1jLG9bMV09aCxvWzJdPWYsb1szXT1wO3ZhciB4PWEubWFsbG9jSW50MzIodSksXz0wO2woYyxoLGIsMCx1LDApLHMoeCx0LGUscix1KTtmb3IodmFyIHc9W10sTT0wLGs9dSxfPXUtMTtfPj0wOy0tXyl7dFsyKl9dPSh0WzIqX10tYykqdix0WzIqXysxXT0odFsyKl8rMV0taCkqeTt2YXIgQT14W19dO0EhPT1NJiYody5wdXNoKG5ldyBpKGIqTWF0aC5wb3coLjUsQSksXysxLGstKF8rMSkpKSxrPV8rMSxNPUEpfXJldHVybiB3LnB1c2gobmV3IGkoYipNYXRoLnBvdyguNSxBKzEpLDAsaykpLGEuZnJlZSh4KSx3fXZhciBhPXQoInR5cGVkYXJyYXktcG9vbCIpLHM9dCgiLi9saWIvc29ydCIpO2UuZXhwb3J0cz1vfSx7Ii4vbGliL3NvcnQiOjE5OSwidHlwZWRhcnJheS1wb29sIjo0ODF9XSwyMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksbyl7dGhpcy5wbG90PXQsdGhpcy5vZmZzZXRCdWZmZXI9ZSx0aGlzLnBpY2tCdWZmZXI9cix0aGlzLndlaWdodEJ1ZmZlcj1uLHRoaXMuc2hhZGVyPWksdGhpcy5waWNrU2hhZGVyPW8sdGhpcy5zY2FsZXM9W10sdGhpcy5zaXplPTEyLHRoaXMuYm9yZGVyU2l6ZT0xLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29sb3I9WzEsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDFdLHRoaXMuYm91bmRzPVsxLzAsMS8wLC0oMS8wKSwtKDEvMCldLHRoaXMucGlja09mZnNldD0wLHRoaXMucG9pbnRzPW51bGwsdGhpcy54Q29vcmRzPW51bGx9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXQuZ2wsaT1hKHIpLHM9YShyKSxsPWEociksdT1vKHIsYy5wb2ludFZlcnRleCxjLnBvaW50RnJhZ21lbnQpLGg9byhyLGMucGlja1ZlcnRleCxjLnBpY2tGcmFnbWVudCksZj1uZXcgbih0LGkscyxsLHUsaCk7cmV0dXJuIGYudXBkYXRlKGUpLHQuYWRkT2JqZWN0KGYpLGZ9dmFyIG89dCgiZ2wtc2hhZGVyIiksYT10KCJnbC1idWZmZXIiKSxzPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksbD10KCJzbmFwLXBvaW50cy0yZCIpLHU9dCgidHlwZWRhcnJheS1wb29sIiksYz10KCIuL2xpYi9zaGFkZXIiKTtlLmV4cG9ydHM9aTt2YXIgaD1uLnByb3RvdHlwZTtoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9mZnNldEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5waWNrQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnhDb29yZHMmJnUuZnJlZSh0aGlzLnhDb29yZHMpLHRoaXMucGxvdC5yZW1vdmVPYmplY3QodGhpcyl9LGgudXBkYXRlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXtyZXR1cm4gZSBpbiB0P3RbZV06cn10PXR8fHt9LHRoaXMuc2l6ZT1lKCJzaXplIiwxMiksdGhpcy5jb2xvcj1lKCJjb2xvciIsWzEsMCwwLDFdKS5zbGljZSgpLHRoaXMuYm9yZGVyU2l6ZT1lKCJib3JkZXJTaXplIiwxKSx0aGlzLmJvcmRlckNvbG9yPWUoImJvcmRlckNvbG9yIixbMCwwLDAsMV0pLnNsaWNlKCksdGhpcy54Q29vcmRzJiZ1LmZyZWUodGhpcy54Q29vcmRzKTt2YXIgcj10LnBvc2l0aW9ucyxuPXUubWFsbG9jRmxvYXQzMihyLmxlbmd0aCksaT11Lm1hbGxvY0ludDMyKHIubGVuZ3RoPj4+MSk7bi5zZXQocik7dmFyIG89dS5tYWxsb2NGbG9hdDMyKHIubGVuZ3RoKTt0aGlzLnBvaW50cz1yLHRoaXMuc2NhbGVzPWwobixpLG8sdGhpcy5ib3VuZHMpLHRoaXMub2Zmc2V0QnVmZmVyLnVwZGF0ZShuKSx0aGlzLnBpY2tCdWZmZXIudXBkYXRlKGkpLHRoaXMud2VpZ2h0QnVmZmVyLnVwZGF0ZShvKTtmb3IodmFyIGE9dS5tYWxsb2NGbG9hdDMyKHIubGVuZ3RoPj4+MSkscz0wLGM9MDtzPHIubGVuZ3RoO3MrPTIsKytjKWFbY109bltzXTt1LmZyZWUoaSksdS5mcmVlKG4pLHUuZnJlZShvKSx0aGlzLnhDb29yZHM9YSx0aGlzLnBvaW50Q291bnQ9ci5sZW5ndGg+Pj4xLHRoaXMucGlja09mZnNldD0wfSxoLmRyYXdQaWNrPWZ1bmN0aW9uKCl7dmFyIHQ9WzEsMCwwLDAsMSwwLDAsMCwxXSxlPVswLDAsMCwwXTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dGhpcy5wbG90LGk9dGhpcy5waWNrU2hhZGVyLG89dGhpcy5zY2FsZXMsYT10aGlzLm9mZnNldEJ1ZmZlcixsPXRoaXMucGlja0J1ZmZlcix1PXRoaXMuYm91bmRzLGM9dGhpcy5zaXplLGg9dGhpcy5ib3JkZXJTaXplLGY9bi5nbCxwPW4ucGlja1BpeGVsUmF0aW8sZD1uLnZpZXdCb3gsbT1uLmRhdGFCb3g7aWYoMD09PXRoaXMucG9pbnRDb3VudClyZXR1cm4gcjt2YXIgZz11WzJdLXVbMF0sdj11WzNdLXVbMV0seT1tWzJdLW1bMF0sYj1tWzNdLW1bMV0seD0oZFsyXS1kWzBdKSpwL24ucGl4ZWxSYXRpbyxfPShkWzNdLWRbMV0pKnAvbi5waXhlbFJhdGlvLHc9TWF0aC5taW4oeS94LGIvXyk7dFswXT0yKmcveSx0WzRdPTIqdi9iLHRbNl09MioodVswXS1tWzBdKS95LTEsdFs3XT0yKih1WzFdLW1bMV0pL2ItMSx0aGlzLnBpY2tPZmZzZXQ9cixlWzBdPTI1NSZyLGVbMV09cj4+OCYyNTUsZVsyXT1yPj4xNiYyNTUsZVszXT1yPj4yNCYyNTUsaS5iaW5kKCksaS51bmlmb3Jtcy5tYXRyaXg9dCxpLnVuaWZvcm1zLmNvbG9yPXRoaXMuY29sb3IsaS51bmlmb3Jtcy5ib3JkZXJDb2xvcj10aGlzLmJvcmRlckNvbG9yLGkudW5pZm9ybXMucG9pbnRTaXplPXAqKGMraCksaS51bmlmb3Jtcy5waWNrT2Zmc2V0PWUsMD09PXRoaXMuYm9yZGVyU2l6ZT9pLnVuaWZvcm1zLmNlbnRlckZyYWN0aW9uPTI6aS51bmlmb3Jtcy5jZW50ZXJGcmFjdGlvbj1jLyhjK2grMS4yNSksYS5iaW5kKCksaS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnBvaW50ZXIoKSxsLmJpbmQoKSxpLmF0dHJpYnV0ZXMucGlja0lkLnBvaW50ZXIoZi5VTlNJR05FRF9CWVRFKTtmb3IodmFyIE09dGhpcy54Q29vcmRzLGs9KG1bMF0tdVswXS13KmMqcCkvZyxBPShtWzJdLXVbMF0rdypjKnApL2csVD1vLmxlbmd0aC0xO1Q+PTA7LS1UKXt2YXIgRT1vW1RdO2lmKCEoRS5waXhlbFNpemU8dyYmVD4xKSl7dmFyIFM9RS5vZmZzZXQsTD1FLmNvdW50K1Msej1zLmdlKE0sayxTLEwtMSksST1zLmx0KE0sQSx6LEwtMSkrMTtJPnomJmYuZHJhd0FycmF5cyhmLlBPSU5UUyx6LEkteil9fXJldHVybiByK3RoaXMucG9pbnRDb3VudH19KCksaC5kcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9WzEsMCwwLDAsMSwwLDAsMCwxXTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBsb3Qscj10aGlzLnNoYWRlcixuPXRoaXMuc2NhbGVzLGk9dGhpcy5vZmZzZXRCdWZmZXIsbz10aGlzLmJvdW5kcyxhPXRoaXMuc2l6ZSxsPXRoaXMuYm9yZGVyU2l6ZSx1PWUuZ2wsYz1lLnBpeGVsUmF0aW8saD1lLnZpZXdCb3gsZj1lLmRhdGFCb3g7aWYoMCE9PXRoaXMucG9pbnRDb3VudCl7dmFyIHA9b1syXS1vWzBdLGQ9b1szXS1vWzFdLG09ZlsyXS1mWzBdLGc9ZlszXS1mWzFdLHY9aFsyXS1oWzBdLHk9aFszXS1oWzFdLGI9TWF0aC5taW4obS92LGcveSk7dFswXT0yKnAvbSx0WzRdPTIqZC9nLHRbNl09Mioob1swXS1mWzBdKS9tLTEsdFs3XT0yKihvWzFdLWZbMV0pL2ctMSxyLmJpbmQoKSxyLnVuaWZvcm1zLm1hdHJpeD10LHIudW5pZm9ybXMuY29sb3I9dGhpcy5jb2xvcixyLnVuaWZvcm1zLmJvcmRlckNvbG9yPXRoaXMuYm9yZGVyQ29sb3Isci51bmlmb3Jtcy5wb2ludFNpemU9YyooYStsKSxyLnVuaWZvcm1zLnVzZVdlaWdodD0xLDA9PT10aGlzLmJvcmRlclNpemU/ci51bmlmb3Jtcy5jZW50ZXJGcmFjdGlvbj0yOnIudW5pZm9ybXMuY2VudGVyRnJhY3Rpb249YS8oYStsKzEuMjUpLGkuYmluZCgpLHIuYXR0cmlidXRlcy5wb3NpdGlvbi5wb2ludGVyKCksdGhpcy53ZWlnaHRCdWZmZXIuYmluZCgpLHIuYXR0cmlidXRlcy53ZWlnaHQucG9pbnRlcigpO2Zvcih2YXIgeD10aGlzLnhDb29yZHMsXz0oZlswXS1vWzBdLWIqYSpjKS9wLHc9KGZbMl0tb1swXStiKmEqYykvcCxNPSEwLGs9bi5sZW5ndGgtMTtrPj0wOy0tayl7dmFyIEE9bltrXTtpZighKEEucGl4ZWxTaXplPGImJms+MSkpe3ZhciBUPUEub2Zmc2V0LEU9QS5jb3VudCtULFM9cy5nZSh4LF8sVCxFLTEpLEw9cy5sdCh4LHcsUyxFLTEpKzE7TD5TJiZ1LmRyYXdBcnJheXModS5QT0lOVFMsUyxMLVMpLE0mJihNPSExLHIudW5pZm9ybXMudXNlV2VpZ2h0PTApfX19fX0oKSxoLnBpY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucGlja09mZnNldCxpPXRoaXMucG9pbnRDb3VudDtpZihuPnJ8fHI+PW4raSlyZXR1cm4gbnVsbDt2YXIgbz1yLW4sYT10aGlzLnBvaW50cztyZXR1cm57b2JqZWN0OnRoaXMscG9pbnRJZDpvLGRhdGFDb29yZDpbYVsyKm9dLGFbMipvKzFdXX19fSx7Ii4vbGliL3NoYWRlciI6MTk3LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTk4LCJnbC1idWZmZXIiOjEyOSwiZ2wtc2hhZGVyIjoyMDgsInNuYXAtcG9pbnRzLTJkIjoyMDAsInR5cGVkYXJyYXktcG9vbCI6NDgxfV0sMjAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1vW2VdO2lmKHJ8fChyPW9bZV09e30pLHQgaW4gcilyZXR1cm4gclt0XTtmb3IodmFyIG49aSh0LHt0ZXh0QWxpZ246ImNlbnRlciIsdGV4dEJhc2VsaW5lOiJtaWRkbGUiLGxpbmVIZWlnaHQ6MSxmb250OmV9KSxhPWkodCx7dHJpYW5nbGVzOiEwLHRleHRBbGlnbjoiY2VudGVyIix0ZXh0QmFzZWxpbmU6Im1pZGRsZSIsbGluZUhlaWdodDoxLGZvbnQ6ZX0pLHM9W1sxLzAsMS8wXSxbLSgxLzApLC0oMS8wKV1dLGw9MDtsPG4ucG9zaXRpb25zLmxlbmd0aDsrK2wpZm9yKHZhciB1PW4ucG9zaXRpb25zW2xdLGM9MDsyPmM7KytjKXNbMF1bY109TWF0aC5taW4oc1swXVtjXSx1W2NdKSxzWzFdW2NdPU1hdGgubWF4KHNbMV1bY10sdVtjXSk7cmV0dXJuIHJbdF09W2EsbixzXX12YXIgaT10KCJ2ZWN0b3JpemUtdGV4dCIpO2UuZXhwb3J0cz1uO3ZhciBvPXt9fSx7InZlY3Rvcml6ZS10ZXh0Ijo0ODN9XSwyMDM6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9aSh0LGUpLG49ci5hdHRyaWJ1dGVzO3JldHVybiBuLnBvc2l0aW9uLmxvY2F0aW9uPTAsbi5jb2xvci5sb2NhdGlvbj0xLG4uZ2x5cGgubG9jYXRpb249MixuLmlkLmxvY2F0aW9uPTMscn12YXIgaT10KCJnbC1zaGFkZXIiKSxvPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG5cbnVuaWZvcm0gdmVjNCBoaWdobGlnaHRJZDtcbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGU7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSAgIHx8IFxuICAgICBhbnkoZ3JlYXRlclRoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMV0pKSApIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvYXQgc2NhbGUgPSAxLjA7XG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQsIGlkKSA8IDAuMDAwMSkge1xuICAgICAgc2NhbGUgPSBoaWdobGlnaHRTY2FsZTtcbiAgICB9XG5cbiAgICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEpO1xuICAgIHZlYzQgdmlld1Bvc2l0aW9uID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gICAgdmlld1Bvc2l0aW9uID0gdmlld1Bvc2l0aW9uIC8gdmlld1Bvc2l0aW9uLnc7XG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogKHZpZXdQb3NpdGlvbiArIHNjYWxlICogdmVjNChnbHlwaC54LCAtZ2x5cGgueSwgMCwgMCkpO1xuICAgIFxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcbiAgfVxufSIsYT0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGUsIHBpeGVsUmF0aW87XG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XG5cbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKHBvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgYW55KGdyZWF0ZXJUaGFuKHBvc2l0aW9uLCBjbGlwQm91bmRzWzFdKSkpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvYXQgc2NhbGUgPSBwaXhlbFJhdGlvO1xuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLmJnciwgaWQuYmdyKSA8IDAuMDAxKSB7XG4gICAgICBzY2FsZSAqPSBoaWdobGlnaHRTY2FsZTtcbiAgICB9XG5cbiAgICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3UG9zaXRpb247XG4gICAgY2xpcFBvc2l0aW9uIC89IGNsaXBQb3NpdGlvbi53O1xuICAgIFxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uICsgdmVjNChzY3JlZW5TaXplICogc2NhbGUgKiB2ZWMyKGdseXBoLngsIC1nbHlwaC55KSwgMC4wLCAwLjApO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcbiAgfVxufSIscz0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcbnVuaWZvcm0gdmVjNCBoaWdobGlnaHRJZDtcbnVuaWZvcm0gdmVjMyBheGVzWzJdO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIHBpeGVsUmF0aW87XG5cbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKHBvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgICB8fFxuICAgICBhbnkoZ3JlYXRlclRoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMV0pKSApIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvYXQgbHNjYWxlID0gcGl4ZWxSYXRpbyAqIHNjYWxlO1xuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLCBpZCkgPCAwLjAwMDEpIHtcbiAgICAgIGxzY2FsZSAqPSBoaWdobGlnaHRTY2FsZTtcbiAgICB9XG5cbiAgICB2ZWM0IGNsaXBDZW50ZXIgICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxKTtcbiAgICB2ZWMzIGRhdGFQb3NpdGlvbiA9IHBvc2l0aW9uICsgMC41KmxzY2FsZSooYXhlc1swXSAqIGdseXBoLnggKyBheGVzWzFdICogZ2x5cGgueSkgKiBjbGlwQ2VudGVyLncgKiBzY3JlZW5TaXplLnk7XG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChkYXRhUG9zaXRpb24sIDEpO1xuXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IGRhdGFQb3NpdGlvbjtcbiAgfVxufVxuIixsPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjMyBmcmFnQ2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4oZGF0YUNvb3JkaW5hdGUsIGZyYWdDbGlwQm91bmRzWzBdKSkgICB8fFxuICAgICBhbnkoZ3JlYXRlclRoYW4oZGF0YUNvb3JkaW5hdGUsIGZyYWdDbGlwQm91bmRzWzFdKSkgKSB7XG4gICAgZGlzY2FyZDtcbiAgfSBlbHNlIHtcbiAgICBnbF9GcmFnQ29sb3IgPSBpbnRlcnBDb2xvciAqIG9wYWNpdHk7XG4gIH1cbn1cbiIsdT0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzMgZnJhZ0NsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHBpY2tHcm91cDtcblxudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4oZGF0YUNvb3JkaW5hdGUsIGZyYWdDbGlwQm91bmRzWzBdKSkgICB8fCBcbiAgICAgYW55KGdyZWF0ZXJUaGFuKGRhdGFDb29yZGluYXRlLCBmcmFnQ2xpcEJvdW5kc1sxXSkpICkge1xuICAgIGRpc2NhcmQ7XG4gIH0gZWxzZSB7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrR3JvdXAsIHBpY2tJZC5iZ3IpO1xuICB9XG59IixjPVt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToiZ2x5cGgiLHR5cGU6InZlYzIifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV0saD17dmVydGV4Om8sZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOmN9LGY9e3ZlcnRleDphLGZyYWdtZW50OmwsYXR0cmlidXRlczpjfSxwPXt2ZXJ0ZXg6cyxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6Y30sZD17dmVydGV4Om8sZnJhZ21lbnQ6dSxhdHRyaWJ1dGVzOmN9LG09e3ZlcnRleDphLGZyYWdtZW50OnUsYXR0cmlidXRlczpjfSxnPXt2ZXJ0ZXg6cyxmcmFnbWVudDp1LGF0dHJpYnV0ZXM6Y307ci5jcmVhdGVQZXJzcGVjdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbih0LGgpfSxyLmNyZWF0ZU9ydGhvPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsZil9LHIuY3JlYXRlUHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gbih0LHApfSxyLmNyZWF0ZVBpY2tQZXJzcGVjdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbih0LGQpfSxyLmNyZWF0ZVBpY2tPcnRobz1mdW5jdGlvbih0KXtyZXR1cm4gbih0LG0pfSxyLmNyZWF0ZVBpY2tQcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsZyl9fSx7ImdsLXNoYWRlciI6MjA4fV0sMjA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdO3JldHVybiB0WzBdPWVbMF0qcitlWzRdKm4rZVs4XSppK2VbMTJdKm8sdFsxXT1lWzFdKnIrZVs1XSpuK2VbOV0qaStlWzEzXSpvLHRbMl09ZVsyXSpyK2VbNl0qbitlWzEwXSppK2VbMTRdKm8sdFszXT1lWzNdKnIrZVs3XSpuK2VbMTFdKmkrZVsxNV0qbyx0fWZ1bmN0aW9uIGkodCxlLHIsaSl7cmV0dXJuIG4oaSxpLHIpLG4oaSxpLGUpLG4oaSxpLHQpfWZ1bmN0aW9uIG8odCxlKXt0aGlzLmluZGV4PXQsdGhpcy5kYXRhQ29vcmRpbmF0ZT10aGlzLnBvc2l0aW9uPWV9ZnVuY3Rpb24gYSh0LGUscixuLGksYSxzLGwsdSxjLGgsZil7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuc2hhZGVyPWUsdGhpcy5vcnRob1NoYWRlcj1yLHRoaXMucHJvamVjdFNoYWRlcj1uLHRoaXMucG9pbnRCdWZmZXI9aSx0aGlzLmNvbG9yQnVmZmVyPWEsdGhpcy5nbHlwaEJ1ZmZlcj1zLHRoaXMuaWRCdWZmZXI9bCx0aGlzLnZhbz11LHRoaXMudmVydGV4Q291bnQ9MCx0aGlzLmxpbmVWZXJ0ZXhDb3VudD0wLHRoaXMub3BhY2l0eT0xLHRoaXMubGluZVdpZHRoPTAsdGhpcy5wcm9qZWN0U2NhbGU9WzIvMywyLzMsMi8zXSx0aGlzLnByb2plY3RPcGFjaXR5PVsxLDEsMV0sdGhpcy5waWNrSWQ9MCx0aGlzLnBpY2tQZXJzcGVjdGl2ZVNoYWRlcj1jLHRoaXMucGlja09ydGhvU2hhZGVyPWgsdGhpcy5waWNrUHJvamVjdFNoYWRlcj1mLHRoaXMucG9pbnRzPVtdLHRoaXMuX3NlbGVjdFJlc3VsdD1uZXcgbygwLFswLDAsMF0pLHRoaXMudXNlT3J0aG89ITAsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0oMS8wKSwtKDEvMCksLSgxLzApXV0sdGhpcy5heGVzUHJvamVjdD1bITAsITAsITBdLHRoaXMuYXhlc0JvdW5kcz1bWy0oMS8wKSwtKDEvMCksLSgxLzApXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmhpZ2hsaWdodElkPVsxLDEsMSwxXSx0aGlzLmhpZ2hsaWdodFNjYWxlPTIsdGhpcy5jbGlwQm91bmRzPVtbLSgxLzApLC0oMS8wKSwtKDEvMCldLFsxLzAsMS8wLDEvMF1dLHRoaXMuZGlydHk9ITB9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdFswXT10WzFdPXRbMl09MCx0fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT0xLHR9ZnVuY3Rpb24gdSh0LGUscixuKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFtyXT1uLHR9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9TCxyPTA7Mj5yOysrcilmb3IodmFyIG49MDszPm47KytuKWVbcl1bbl09TWF0aC5tYXgoTWF0aC5taW4odFtyXVtuXSwxZTgpLC0xZTgpO3JldHVybiBlfWZ1bmN0aW9uIGgodCxlLHIsbixvKXt2YXIgYSxoPWUuYXhlc1Byb2plY3QsZj1lLmdsLHA9dC51bmlmb3JtcyxkPXIubW9kZWx8fHgsbT1yLnZpZXd8fHgsZz1yLnByb2plY3Rpb258fHgseT1lLmF4ZXNCb3VuZHMsYj1jKGUuY2xpcEJvdW5kcyk7YT1lLmF4ZXM/ZS5heGVzLmxhc3RDdWJlUHJvcHMuYXhpczpbMSwxLDFdLHdbMF09Mi9mLmRyYXdpbmdCdWZmZXJXaWR0aCx3WzFdPTIvZi5kcmF3aW5nQnVmZmVySGVpZ2h0LHQuYmluZCgpLHAudmlldz1tLHAucHJvamVjdGlvbj1nLHAuc2NyZWVuU2l6ZT13LHAuaGlnaGxpZ2h0SWQ9ZS5oaWdobGlnaHRJZCxwLmhpZ2hsaWdodFNjYWxlPWUuaGlnaGxpZ2h0U2NhbGUscC5jbGlwQm91bmRzPWIscC5waWNrR3JvdXA9ZS5waWNrSWQvMjU1LHAucGl4ZWxSYXRpbz1lLnBpeGVsUmF0aW87Zm9yKHZhciBfPTA7Mz5fOysrXylpZihoW19dJiZlLnByb2plY3RPcGFjaXR5W19dPDE9PT1uKXtwLnNjYWxlPWUucHJvamVjdFNjYWxlW19dLHAub3BhY2l0eT1lLnByb2plY3RPcGFjaXR5W19dO2Zvcih2YXIgTD1FLHo9MDsxNj56OysreilMW3pdPTA7Zm9yKHZhciB6PTA7ND56OysreilMWzUqel09MTtMWzUqX109MCxhW19dPDA/TFsxMitfXT15WzBdW19dOkxbMTIrX109eVsxXVtfXSx2KEwsZCxMKSxwLm1vZGVsPUw7dmFyIEk9KF8rMSklMyxQPShfKzIpJTMsQz1zKE0pLFI9cyhrKTtDW0ldPTEsUltQXT0xO3ZhciBqPWkoZyxtLGQsbChBLEMpKSxEPWkoZyxtLGQsbChULFIpKTtpZihNYXRoLmFicyhqWzFdKT5NYXRoLmFicyhEWzFdKSl7dmFyIE89ajtqPUQsRD1PLE89QyxDPVIsUj1PO3ZhciBGPUk7ST1QLFA9Rn1qWzBdPDAmJihDW0ldPS0xKSxEWzFdPjAmJihSW1BdPS0xKTtmb3IodmFyIE49MCxCPTAsej0wOzQ+ejsrK3opTis9TWF0aC5wb3coZFs0Kkkrel0sMiksQis9TWF0aC5wb3coZFs0KlArel0sMik7Q1tJXS89TWF0aC5zcXJ0KE4pLFJbUF0vPU1hdGguc3FydChCKSxwLmF4ZXNbMF09QyxwLmF4ZXNbMV09UixwLmZyYWdDbGlwQm91bmRzWzBdPXUoUyxiWzBdLF8sLTFlOCkscC5mcmFnQ2xpcEJvdW5kc1sxXT11KFMsYlsxXSxfLDFlOCksZS52YW8uZHJhdyhmLlRSSUFOR0xFUyxlLnZlcnRleENvdW50KSxlLmxpbmVXaWR0aD4wJiYoZi5saW5lV2lkdGgoZS5saW5lV2lkdGgpLGUudmFvLmRyYXcoZi5MSU5FUyxlLmxpbmVWZXJ0ZXhDb3VudCxlLnZlcnRleENvdW50KSl9fWZ1bmN0aW9uIGYodCxlLHIsbixpLG8pe3ZhciBhPXIuZ2w7aWYoci52YW8uYmluZCgpLGk9PT1yLm9wYWNpdHk8MXx8byl7dC5iaW5kKCk7dmFyIHM9dC51bmlmb3JtcztzLm1vZGVsPW4ubW9kZWx8fHgscy52aWV3PW4udmlld3x8eCxzLnByb2plY3Rpb249bi5wcm9qZWN0aW9ufHx4LHdbMF09Mi9hLmRyYXdpbmdCdWZmZXJXaWR0aCx3WzFdPTIvYS5kcmF3aW5nQnVmZmVySGVpZ2h0LHMuc2NyZWVuU2l6ZT13LHMuaGlnaGxpZ2h0SWQ9ci5oaWdobGlnaHRJZCxzLmhpZ2hsaWdodFNjYWxlPXIuaGlnaGxpZ2h0U2NhbGUscy5mcmFnQ2xpcEJvdW5kcz1QLHMuY2xpcEJvdW5kcz1yLmF4ZXMuYm91bmRzLHMub3BhY2l0eT1yLm9wYWNpdHkscy5waWNrR3JvdXA9ci5waWNrSWQvMjU1LHMucGl4ZWxSYXRpbz1yLnBpeGVsUmF0aW8sci52YW8uZHJhdyhhLlRSSUFOR0xFUyxyLnZlcnRleENvdW50KSxyLmxpbmVXaWR0aD4wJiYoYS5saW5lV2lkdGgoci5saW5lV2lkdGgpLHIudmFvLmRyYXcoYS5MSU5FUyxyLmxpbmVWZXJ0ZXhDb3VudCxyLnZlcnRleENvdW50KSl9aChlLHIsbixpLG8pLHIudmFvLnVuYmluZCgpfWZ1bmN0aW9uIHAodCl7dmFyIGU9dC5nbCxyPXkuY3JlYXRlUGVyc3BlY3RpdmUoZSksbj15LmNyZWF0ZU9ydGhvKGUpLGk9eS5jcmVhdGVQcm9qZWN0KGUpLG89eS5jcmVhdGVQaWNrUGVyc3BlY3RpdmUoZSkscz15LmNyZWF0ZVBpY2tPcnRobyhlKSxsPXkuY3JlYXRlUGlja1Byb2plY3QoZSksdT1kKGUpLGM9ZChlKSxoPWQoZSksZj1kKGUpLHA9bShlLFt7YnVmZmVyOnUsc2l6ZTozLHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpjLHNpemU6NCx0eXBlOmUuRkxPQVR9LHtidWZmZXI6aCxzaXplOjIsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmYsc2l6ZTo0LHR5cGU6ZS5VTlNJR05FRF9CWVRFLG5vcm1hbGl6ZWQ6ITB9XSksZz1uZXcgYShlLHIsbixpLHUsYyxoLGYscCxvLHMsbCk7cmV0dXJuIGcudXBkYXRlKHQpLGd9dmFyIGQ9dCgiZ2wtYnVmZmVyIiksbT10KCJnbC12YW8iKSxnPXQoInR5cGVkYXJyYXktcG9vbCIpLHY9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLHk9dCgiLi9saWIvc2hhZGVycyIpLGI9dCgiLi9saWIvZ2x5cGhzIikseD1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZS5leHBvcnRzPXA7dmFyIF89YS5wcm90b3R5cGU7Xy5waWNrU2xvdHM9MSxfLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LF8uaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe2lmKHRoaXMub3BhY2l0eTwxKXJldHVybiEwO2Zvcih2YXIgdD0wOzM+dDsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmdGhpcy5wcm9qZWN0T3BhY2l0eVt0XTwxKXJldHVybiEwO3JldHVybiExfSxfLmlzT3BhcXVlPWZ1bmN0aW9uKCl7aWYodGhpcy5vcGFjaXR5Pj0xKXJldHVybiEwO2Zvcih2YXIgdD0wOzM+dDsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmdGhpcy5wcm9qZWN0T3BhY2l0eVt0XT49MSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHc9WzAsMF0sTT1bMCwwLDBdLGs9WzAsMCwwXSxBPVswLDAsMCwxXSxUPVswLDAsMCwxXSxFPXguc2xpY2UoKSxTPVswLDAsMF0sTD1bWzAsMCwwXSxbMCwwLDBdXSx6PVstMWU4LC0xZTgsLTFlOF0sST1bMWU4LDFlOCwxZThdLFA9W3osSV07Xy5kcmF3PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcjtmKGUsdGhpcy5wcm9qZWN0U2hhZGVyLHRoaXMsdCwhMSwhMSl9LF8uZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcjtmKGUsdGhpcy5wcm9qZWN0U2hhZGVyLHRoaXMsdCwhMCwhMSl9LF8uZHJhd1BpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy51c2VPcnRobz90aGlzLnBpY2tPcnRob1NoYWRlcjp0aGlzLnBpY2tQZXJzcGVjdGl2ZVNoYWRlcjtmKGUsdGhpcy5waWNrUHJvamVjdFNoYWRlcix0aGlzLHQsITEsITApfSxfLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXQudmFsdWVbMl0rKHQudmFsdWVbMV08PDgpKyh0LnZhbHVlWzBdPDwxNik7aWYoZT49dGhpcy5wb2ludENvdW50fHwwPmUpcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5wb2ludHNbZV0sbj10aGlzLl9zZWxlY3RSZXN1bHQ7bi5pbmRleD1lO2Zvcih2YXIgaT0wOzM+aTsrK2kpbi5wb3NpdGlvbltpXT1uLmRhdGFDb29yZGluYXRlW2ldPXJbaV07cmV0dXJuIG59LF8uaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPXQuaW5kZXgscj0yNTUmZSxuPWU+PjgmMjU1LGk9ZT4+MTYmMjU1O3RoaXMuaGlnaGxpZ2h0SWQ9W3IvMjU1LG4vMjU1LGkvMjU1LDBdfWVsc2UgdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV19LF8udXBkYXRlPWZ1bmN0aW9uKHQpe2lmKHQ9dHx8e30sInBlcnNwZWN0aXZlImluIHQmJih0aGlzLnVzZU9ydGhvPSF0LnBlcnNwZWN0aXZlKSwib3J0aG9ncmFwaGljImluIHQmJih0aGlzLnVzZU9ydGhvPSEhdC5vcnRob2dyYXBoaWMpLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwicHJvamVjdCJpbiB0KWlmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0KSl0aGlzLmF4ZXNQcm9qZWN0PXQucHJvamVjdDtlbHNle3ZhciBlPSEhdC5wcm9qZWN0O3RoaXMuYXhlc1Byb2plY3Q9W2UsZSxlXX1pZigicHJvamVjdFNjYWxlImluIHQpaWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3RTY2FsZSkpdGhpcy5wcm9qZWN0U2NhbGU9dC5wcm9qZWN0U2NhbGUuc2xpY2UoKTtlbHNle3ZhciByPSt0LnByb2plY3RTY2FsZTt0aGlzLnByb2plY3RTY2FsZT1bcixyLHJdfWlmKCJwcm9qZWN0T3BhY2l0eSJpbiB0KWlmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0T3BhY2l0eSkpdGhpcy5wcm9qZWN0T3BhY2l0eT10LnByb2plY3RPcGFjaXR5LnNsaWNlKCk7ZWxzZXt2YXIgcj0rdC5wcm9qZWN0T3BhY2l0eTt0aGlzLnByb2plY3RPcGFjaXR5PVtyLHIscl19Im9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLHRoaXMuZGlydHk9ITA7dmFyIG49dC5wb3NpdGlvbjtpZihuKXt2YXIgaT10LmZvbnR8fCJub3JtYWwiLG89dC5hbGlnbm1lbnR8fFswLDBdLGE9WzEvMCwxLzAsMS8wXSxzPVstKDEvMCksLSgxLzApLC0oMS8wKV0sbD10LmdseXBoLHU9dC5jb2xvcixjPXQuc2l6ZSxoPXQuYW5nbGUsZj10LmxpbmVDb2xvcixwPTAsZD0wLG09MCx2PW4ubGVuZ3RoO3Q6Zm9yKHZhciB5PTA7dj55OysreSl7Zm9yKHZhciB4PW5beV0sXz0wOzM+XzsrK18paWYoaXNOYU4oeFtfXSl8fCFpc0Zpbml0ZSh4W19dKSljb250aW51ZSB0O3ZhciB3O3c9QXJyYXkuaXNBcnJheShsKT9iKGxbeV0saSk6bD9iKGwsaSk6YigiXHUyNWNmIixpKTt2YXIgTT13WzBdLGs9d1sxXSxBPXdbMl07ZCs9MypNLmNlbGxzLmxlbmd0aCxtKz0yKmsuZWRnZXMubGVuZ3RofXZhciBUPWQrbSxFPWcubWFsbG9jRmxvYXQoMypUKSxTPWcubWFsbG9jRmxvYXQoNCpUKSxMPWcubWFsbG9jRmxvYXQoMipUKSx6PWcubWFsbG9jVWludDMyKFQpLEk9WzAsb1sxXV0sUD0wLEM9ZCxSPVswLDAsMCwxXSxqPVswLDAsMCwxXSxEPUFycmF5LmlzQXJyYXkodSkmJkFycmF5LmlzQXJyYXkodVswXSksTz1BcnJheS5pc0FycmF5KGYpJiZBcnJheS5pc0FycmF5KGZbMF0pO3Q6Zm9yKHZhciB5PTA7dj55OysreSl7Zm9yKHZhciB4PW5beV0sXz0wOzM+XzsrK18pe2lmKGlzTmFOKHhbX10pfHwhaXNGaW5pdGUoeFtfXSkpe3ArPTE7Y29udGludWUgdH1zW19dPU1hdGgubWF4KHNbX10seFtfXSksYVtfXT1NYXRoLm1pbihhW19dLHhbX10pfXZhciB3O3c9QXJyYXkuaXNBcnJheShsKT9iKGxbeV0saSk6bD9iKGwsaSk6YigiXHUyNWNmIixpKTt2YXIgTT13WzBdLGs9d1sxXSxBPXdbMl07aWYoQXJyYXkuaXNBcnJheSh1KSl7dmFyIEY7aWYoRj1EP3VbeV06dSwzPT09Ri5sZW5ndGgpe2Zvcih2YXIgXz0wOzM+XzsrK18pUltfXT1GW19dO1JbM109MX1lbHNlIGlmKDQ9PT1GLmxlbmd0aClmb3IodmFyIF89MDs0Pl87KytfKVJbX109RltfXX1lbHNlIFJbMF09UlsxXT1SWzJdPTAsUlszXT0xO2lmKEFycmF5LmlzQXJyYXkoZikpe3ZhciBGO2lmKEY9Tz9mW3ldOmYsMz09PUYubGVuZ3RoKXtmb3IodmFyIF89MDszPl87KytfKWpbX109RltfXTtqW19dPTF9ZWxzZSBpZig0PT09Ri5sZW5ndGgpZm9yKHZhciBfPTA7ND5fOysrXylqW19dPUZbX119ZWxzZSBqWzBdPWpbMV09alsyXT0wLGpbM109MTt2YXIgTj0uNTtBcnJheS5pc0FycmF5KGMpP049K2NbeV06Yz9OPStjOnRoaXMudXNlT3J0aG8mJihOPTEyKTt2YXIgQj0wO0FycmF5LmlzQXJyYXkoaCk/Qj0raFt5XTpoJiYoQj0raCk7Zm9yKHZhciBVPU1hdGguY29zKEIpLFY9TWF0aC5zaW4oQikseD1uW3ldLF89MDszPl87KytfKXNbX109TWF0aC5tYXgoc1tfXSx4W19dKSxhW19dPU1hdGgubWluKGFbX10seFtfXSk7b1swXTwwP0lbMF09b1swXSooMStBWzFdWzBdKTpvWzBdPjAmJihJWzBdPS1vWzBdKigxK0FbMF1bMF0pKTtmb3IodmFyIHE9TS5jZWxscyxHPU0ucG9zaXRpb25zLF89MDtfPHEubGVuZ3RoOysrXylmb3IodmFyIEg9cVtfXSxYPTA7Mz5YOysrWCl7Zm9yKHZhciBZPTA7Mz5ZOysrWSlFWzMqUCtZXT14W1ldO2Zvcih2YXIgWT0wOzQ+WTsrK1kpU1s0KlArWV09UltZXTt6W1BdPXA7dmFyIFc9R1tIW1hdXTtMWzIqUF09TiooVSpXWzBdLVYqV1sxXStJWzBdKSxMWzIqUCsxXT1OKihWKldbMF0rVSpXWzFdK0lbMV0pLFArPTF9Zm9yKHZhciBxPWsuZWRnZXMsRz1rLnBvc2l0aW9ucyxfPTA7XzxxLmxlbmd0aDsrK18pZm9yKHZhciBIPXFbX10sWD0wOzI+WDsrK1gpe2Zvcih2YXIgWT0wOzM+WTsrK1kpRVszKkMrWV09eFtZXTtmb3IodmFyIFk9MDs0Plk7KytZKVNbNCpDK1ldPWpbWV07eltDXT1wO3ZhciBXPUdbSFtYXV07TFsyKkNdPU4qKFUqV1swXS1WKldbMV0rSVswXSksTFsyKkMrMV09TiooVipXWzBdK1UqV1sxXStJWzFdKSxDKz0xfXArPTF9dGhpcy52ZXJ0ZXhDb3VudD1kLHRoaXMubGluZVZlcnRleENvdW50PW0sdGhpcy5wb2ludEJ1ZmZlci51cGRhdGUoRSksdGhpcy5jb2xvckJ1ZmZlci51cGRhdGUoUyksdGhpcy5nbHlwaEJ1ZmZlci51cGRhdGUoTCksdGhpcy5pZEJ1ZmZlci51cGRhdGUobmV3IFVpbnQzMkFycmF5KHopKSxnLmZyZWUoRSksZy5mcmVlKFMpLGcuZnJlZShMKSxnLmZyZWUoeiksdGhpcy5ib3VuZHM9W2Esc10sdGhpcy5wb2ludHM9bix0aGlzLnBvaW50Q291bnQ9bi5sZW5ndGh9fSxfLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5vcnRob1NoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja09ydGhvU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5wb2ludEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5jb2xvckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5nbHlwaEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5pZEJ1ZmZlci5kaXNwb3NlKCl9fSx7Ii4vbGliL2dseXBocyI6MjAyLCIuL2xpYi9zaGFkZXJzIjoyMDMsImdsLWJ1ZmZlciI6MTI5LCJnbC1tYXQ0L211bHRpcGx5IjoxNTAsImdsLXZhbyI6MjM3LCJ0eXBlZGFycmF5LXBvb2wiOjQ4MX1dLDIwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmJveFZlcnRleD0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiB2ZXJ0ZXg7XG5cbnVuaWZvcm0gdmVjMiBjb3JuZXJBLCBjb3JuZXJCO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChtaXgoY29ybmVyQSwgY29ybmVyQiwgdmVydGV4KSwgMCwgMSk7XG59XG4iLHIuYm94RnJhZ21lbnQ9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufVxuIn0se31dLDIwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLmJveEJ1ZmZlcj1lLHRoaXMuYm94U2hhZGVyPXIsdGhpcy5lbmFibGVkPSEwLHRoaXMuc2VsZWN0Qm94PVsxLzAsMS8wLC0oMS8wKSwtKDEvMCldLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDFdLHRoaXMuaW5uZXJGaWxsPSExLHRoaXMuaW5uZXJDb2xvcj1bMCwwLDAsLjI1XSx0aGlzLm91dGVyRmlsbD0hMCx0aGlzLm91dGVyQ29sb3I9WzAsMCwwLC41XSx0aGlzLmJvcmRlcldpZHRoPTEwfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj10LmdsLGk9YShyLFswLDAsMCwxLDEsMCwxLDFdKSxsPW8ocixzLmJveFZlcnRleCxzLmJveEZyYWdtZW50KSx1PW5ldyBuKHQsaSxsKTtyZXR1cm4gdS51cGRhdGUoZSksdC5hZGRPdmVybGF5KHUpLHV9dmFyIG89dCgiZ2wtc2hhZGVyIiksYT10KCJnbC1idWZmZXIiKSxzPXQoIi4vbGliL3NoYWRlcnMiKTtlLmV4cG9ydHM9aTt2YXIgbD1uLnByb3RvdHlwZTtsLmRyYXc9ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWQpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2VsZWN0Qm94LHI9dGhpcy5ib3JkZXJXaWR0aCxuPSh0aGlzLmlubmVyRmlsbCx0aGlzLmlubmVyQ29sb3IpLGk9KHRoaXMub3V0ZXJGaWxsLHRoaXMub3V0ZXJDb2xvciksbz10aGlzLmJvcmRlckNvbG9yLGE9dC5ib3gscz10LnNjcmVlbkJveCxsPXQuZGF0YUJveCx1PXQudmlld0JveCxjPXQucGl4ZWxSYXRpbyxoPShlWzBdLWxbMF0pKih1WzJdLXVbMF0pLyhsWzJdLWxbMF0pK3VbMF0sZj0oZVsxXS1sWzFdKSoodVszXS11WzFdKS8obFszXS1sWzFdKSt1WzFdLHA9KGVbMl0tbFswXSkqKHVbMl0tdVswXSkvKGxbMl0tbFswXSkrdVswXSxkPShlWzNdLWxbMV0pKih1WzNdLXVbMV0pLyhsWzNdLWxbMV0pK3VbMV07aWYoaD1NYXRoLm1heChoLHVbMF0pLGY9TWF0aC5tYXgoZix1WzFdKSxwPU1hdGgubWluKHAsdVsyXSksZD1NYXRoLm1pbihkLHVbM10pLCEoaD5wfHxmPmQpKXthLmJpbmQoKTt2YXIgbT1zWzJdLXNbMF0sZz1zWzNdLXNbMV07aWYodGhpcy5vdXRlckZpbGwmJihhLmRyYXdCb3goMCwwLG0sZixpKSxhLmRyYXdCb3goMCxmLGgsZCxpKSxhLmRyYXdCb3goMCxkLG0sZyxpKSxhLmRyYXdCb3gocCxmLG0sZCxpKSksdGhpcy5pbm5lckZpbGwmJmEuZHJhd0JveChoLGYscCxkLG4pLHI+MCl7dmFyIHY9cipjO2EuZHJhd0JveChoLXYsZi12LHArdixmK3YsbyksYS5kcmF3Qm94KGgtdixkLXYscCt2LGQrdixvKSxhLmRyYXdCb3goaC12LGYtdixoK3YsZCt2LG8pLGEuZHJhd0JveChwLXYsZi12LHArdixkK3Ysbyl9fX19LGwudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5pbm5lckZpbGw9ISF0LmlubmVyRmlsbCx0aGlzLm91dGVyRmlsbD0hIXQub3V0ZXJGaWxsLHRoaXMuaW5uZXJDb2xvcj0odC5pbm5lckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMub3V0ZXJDb2xvcj0odC5vdXRlckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMuYm9yZGVyQ29sb3I9KHQuYm9yZGVyQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJvcmRlcldpZHRoPXQuYm9yZGVyV2lkdGh8fDAsdGhpcy5zZWxlY3RCb3g9KHQuc2VsZWN0Qm94fHx0aGlzLnNlbGVjdEJveCkuc2xpY2UoKX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5ib3hCdWZmZXIuZGlzcG9zZSgpLHRoaXMuYm94U2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT3ZlcmxheSh0aGlzKX19LHsiLi9saWIvc2hhZGVycyI6MjA1LCJnbC1idWZmZXIiOjEyOSwiZ2wtc2hhZGVyIjoyMDh9XSwyMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3RoaXMuY29vcmQ9W3QsZV0sdGhpcy5pZD1yLHRoaXMudmFsdWU9bix0aGlzLmRpc3RhbmNlPWl9ZnVuY3Rpb24gaSh0LGUscil7dGhpcy5nbD10LHRoaXMuZmJvPWUsdGhpcy5idWZmZXI9cix0aGlzLl9yZWFkVGltZW91dD1udWxsO3ZhciBuPXRoaXM7dGhpcy5fcmVhZENhbGxiYWNrPWZ1bmN0aW9uKCl7bi5nbCYmKGUuYmluZCgpLHQucmVhZFBpeGVscygwLDAsZS5zaGFwZVswXSxlLnNoYXBlWzFdLHQuUkdCQSx0LlVOU0lHTkVEX0JZVEUsbi5idWZmZXIpLG4uX3JlYWRUaW1lb3V0PW51bGwpfX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9YSh0LGUpLG49cy5tYWxsb2NVaW50OChlWzBdKmVbMV0qNCk7cmV0dXJuIG5ldyBpKHQscixuKX1lLmV4cG9ydHM9bzt2YXIgYT10KCJnbC1mYm8iKSxzPXQoInR5cGVkYXJyYXktcG9vbCIpLGw9dCgibmRhcnJheSIpLHU9dCgiYml0LXR3aWRkbGUiKS5uZXh0UG93MixjPXQoImN3aXNlL2xpYi93cmFwcGVyIikoe2FyZ3M6WyJhcnJheSIse29mZnNldDpbMCwwLDFdLGFycmF5OjB9LHtvZmZzZXQ6WzAsMCwyXSxhcnJheTowfSx7b2Zmc2V0OlswLDAsM10sYXJyYXk6MH0sInNjYWxhciIsInNjYWxhciIsImluZGV4Il0scHJlOntib2R5OiJ7dGhpc19jbG9zZXN0RDI9MWU4LHRoaXNfY2xvc2VzdFg9LTEsdGhpc19jbG9zZXN0WT0tMX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2Nsb3Nlc3REMiIsInRoaXNfY2xvc2VzdFgiLCJ0aGlzX2Nsb3Nlc3RZIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7aWYoMjU1Pl9pbmxpbmVfNDZfYXJnMF98fDI1NT5faW5saW5lXzQ2X2FyZzFffHwyNTU+X2lubGluZV80Nl9hcmcyX3x8MjU1Pl9pbmxpbmVfNDZfYXJnM18pe3ZhciBfaW5saW5lXzQ2X2w9X2lubGluZV80Nl9hcmc0Xy1faW5saW5lXzQ2X2FyZzZfWzBdLF9pbmxpbmVfNDZfYT1faW5saW5lXzQ2X2FyZzVfLV9pbmxpbmVfNDZfYXJnNl9bMV0sX2lubGluZV80Nl9mPV9pbmxpbmVfNDZfbCpfaW5saW5lXzQ2X2wrX2lubGluZV80Nl9hKl9pbmxpbmVfNDZfYTtfaW5saW5lXzQ2X2Y8dGhpc19jbG9zZXN0RDImJih0aGlzX2Nsb3Nlc3REMj1faW5saW5lXzQ2X2YsdGhpc19jbG9zZXN0WD1faW5saW5lXzQ2X2FyZzZfWzBdLHRoaXNfY2xvc2VzdFk9X2lubGluZV80Nl9hcmc2X1sxXSl9fSIsYXJnczpbe25hbWU6Il9pbmxpbmVfNDZfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNDZfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNDZfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNDZfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNDZfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNDZfYXJnNV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNDZfYXJnNl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6NH1dLHRoaXNWYXJzOlsidGhpc19jbG9zZXN0RDIiLCJ0aGlzX2Nsb3Nlc3RYIiwidGhpc19jbG9zZXN0WSJdLGxvY2FsVmFyczpbIl9pbmxpbmVfNDZfYSIsIl9pbmxpbmVfNDZfZiIsIl9pbmxpbmVfNDZfbCJdfSxwb3N0Ontib2R5OiJ7cmV0dXJuW3RoaXNfY2xvc2VzdFgsdGhpc19jbG9zZXN0WSx0aGlzX2Nsb3Nlc3REMl19IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc19jbG9zZXN0RDIiLCJ0aGlzX2Nsb3Nlc3RYIiwidGhpc19jbG9zZXN0WSJdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6ImN3aXNlIixibG9ja1NpemU6NjR9KSxoPWkucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJzaGFwZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdsP3RoaXMuZmJvLnNoYXBlLnNsaWNlKCk6WzAsMF19LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmdsKXt0aGlzLmZiby5zaGFwZT10O3ZhciBlPXRoaXMuZmJvLnNoYXBlWzBdLHI9dGhpcy5mYm8uc2hhcGVbMV07aWYociplKjQ+dGhpcy5idWZmZXIubGVuZ3RoKXtzLmZyZWUodGhpcy5idWZmZXIpO2Zvcih2YXIgbj10aGlzLmJ1ZmZlcj1zLm1hbGxvY1VpbnQ4KHUociplKjQpKSxpPTA7ciplKjQ+aTsrK2kpbltpXT0yNTV9cmV0dXJuIHR9fX0pLGguYmVnaW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3RoaXMuc2hhcGU7dCYmKHRoaXMuZmJvLmJpbmQoKSx0LmNsZWFyQ29sb3IoMSwxLDEsMSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKSl9LGguZW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDt0JiYodC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixudWxsKSx0aGlzLl9yZWFkVGltZW91dHx8Y2xlYXJUaW1lb3V0KHRoaXMuX3JlYWRUaW1lb3V0KSx0aGlzLl9yZWFkVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX3JlYWRDYWxsYmFjaywxKSl9LGgucXVlcnk9ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLmdsKXJldHVybiBudWxsO3ZhciBpPXRoaXMuZmJvLnNoYXBlLnNsaWNlKCk7dD0wfHQsZT0wfGUsIm51bWJlciIhPXR5cGVvZiByJiYocj0xKTt2YXIgbz0wfE1hdGgubWluKE1hdGgubWF4KHQtciwwKSxpWzBdKSxhPTB8TWF0aC5taW4oTWF0aC5tYXgodCtyLDApLGlbMF0pLHM9MHxNYXRoLm1pbihNYXRoLm1heChlLXIsMCksaVsxXSksdT0wfE1hdGgubWluKE1hdGgubWF4KGUrciwwKSxpWzFdKTtpZihvPj1hfHxzPj11KXJldHVybiBudWxsO3ZhciBoPVthLW8sdS1zXSxmPWwodGhpcy5idWZmZXIsW2hbMF0saFsxXSw0XSxbNCw0KmlbMF0sMV0sNCoobytpWzBdKnMpKSxwPWMoZi5oaShoWzBdLGhbMV0sMSkscixyKSxkPXBbMF0sbT1wWzFdO2lmKDA+ZHx8TWF0aC5wb3codGhpcy5yYWRpdXMsMik8cFsyXSlyZXR1cm4gbnVsbDt2YXIgZz1mLmdldChkLG0sMCksdj1mLmdldChkLG0sMSkseT1mLmdldChkLG0sMiksYj1mLmdldChkLG0sMyk7cmV0dXJuIG5ldyBuKGQrb3wwLG0rc3wwLGcsW3YseSxiXSxNYXRoLnNxcnQocFsyXSkpfSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsJiYodGhpcy5mYm8uZGlzcG9zZSgpLHMuZnJlZSh0aGlzLmJ1ZmZlciksdGhpcy5nbD1udWxsLHRoaXMuX3JlYWRUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpKX19LHsiYml0LXR3aWRkbGUiOjUxLCJjd2lzZS9saWIvd3JhcHBlciI6MTIzLCJnbC1mYm8iOjEzNCxuZGFycmF5OjQ1NiwidHlwZWRhcnJheS1wb29sIjo0ODF9XSwyMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmdsPXQsdGhpcy5fdnJlZj10aGlzLl9mcmVmPXRoaXMuX3JlbGluaz10aGlzLnZlcnRTaGFkZXI9dGhpcy5mcmFnU2hhZGVyPXRoaXMucHJvZ3JhbT10aGlzLmF0dHJpYnV0ZXM9dGhpcy51bmlmb3Jtcz10aGlzLnR5cGVzPW51bGx9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0Lm5hbWU8ZS5uYW1lPy0xOjF9ZnVuY3Rpb24gbyh0LGUscixpLG8pe3ZhciBhPW5ldyBuKHQpO3JldHVybiBhLnVwZGF0ZShlLHIsaSxvKSxhfXZhciBhPXQoIi4vbGliL2NyZWF0ZS11bmlmb3JtcyIpLHM9dCgiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXMiKSxsPXQoIi4vbGliL3JlZmxlY3QiKSx1PXQoIi4vbGliL3NoYWRlci1jYWNoZSIpLGM9dCgiLi9saWIvcnVudGltZS1yZWZsZWN0IiksaD10KCIuL2xpYi9HTEVycm9yIiksZj1uLnByb3RvdHlwZTtmLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLnByb2dyYW18fHRoaXMuX3JlbGluaygpLHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9mcmVmJiZ0aGlzLl9mcmVmLmRpc3Bvc2UoKSx0aGlzLl92cmVmJiZ0aGlzLl92cmVmLmRpc3Bvc2UoKSx0aGlzLmF0dHJpYnV0ZXM9dGhpcy50eXBlcz10aGlzLnZlcnRTaGFkZXI9dGhpcy5mcmFnU2hhZGVyPXRoaXMucHJvZ3JhbT10aGlzLl9yZWxpbms9dGhpcy5fZnJlZj10aGlzLl92cmVmPW51bGx9LGYudXBkYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIG8oKXtwLnByb2dyYW09dS5wcm9ncmFtKGQscC5fdnJlZixwLl9mcmVmLHgsXyk7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpU1t0XT1kLmdldFVuaWZvcm1Mb2NhdGlvbihwLnByb2dyYW0sclt0XS5uYW1lKX1pZighZXx8MT09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBmPXQ7dD1mLnZlcnRleCxlPWYuZnJhZ21lbnQscj1mLnVuaWZvcm1zLG49Zi5hdHRyaWJ1dGVzfXZhciBwPXRoaXMsZD1wLmdsLG09cC5fdnJlZjtwLl92cmVmPXUuc2hhZGVyKGQsZC5WRVJURVhfU0hBREVSLHQpLG0mJm0uZGlzcG9zZSgpLHAudmVydFNoYWRlcj1wLl92cmVmLnNoYWRlcjt2YXIgZz10aGlzLl9mcmVmO2lmKHAuX2ZyZWY9dS5zaGFkZXIoZCxkLkZSQUdNRU5UX1NIQURFUixlKSxnJiZnLmRpc3Bvc2UoKSxwLmZyYWdTaGFkZXI9cC5fZnJlZi5zaGFkZXIsIXJ8fCFuKXt2YXIgdj1kLmNyZWF0ZVByb2dyYW0oKTtpZihkLmF0dGFjaFNoYWRlcih2LHAuZnJhZ1NoYWRlciksZC5hdHRhY2hTaGFkZXIodixwLnZlcnRTaGFkZXIpLGQubGlua1Byb2dyYW0odiksIWQuZ2V0UHJvZ3JhbVBhcmFtZXRlcih2LGQuTElOS19TVEFUVVMpKXt2YXIgeT1kLmdldFByb2dyYW1JbmZvTG9nKHYpO3Rocm93IG5ldyBoKHksIkVycm9yIGxpbmtpbmcgcHJvZ3JhbToiK3kpfXI9cnx8Yy51bmlmb3JtcyhkLHYpLG49bnx8Yy5hdHRyaWJ1dGVzKGQsdiksZC5kZWxldGVQcm9ncmFtKHYpfW49bi5zbGljZSgpLG4uc29ydChpKTtmb3IodmFyIGI9W10seD1bXSxfPVtdLHc9MDt3PG4ubGVuZ3RoOysrdyl7dmFyIE09blt3XTtpZihNLnR5cGUuaW5kZXhPZigibWF0Iik+PTApe2Zvcih2YXIgaz0wfE0udHlwZS5jaGFyQXQoTS50eXBlLmxlbmd0aC0xKSxBPW5ldyBBcnJheShrKSxUPTA7az5UOysrVClBW1RdPV8ubGVuZ3RoLHgucHVzaChNLm5hbWUrIlsiK1QrIl0iKSwibnVtYmVyIj09dHlwZW9mIE0ubG9jYXRpb24/Xy5wdXNoKE0ubG9jYXRpb24rVCk6QXJyYXkuaXNBcnJheShNLmxvY2F0aW9uKSYmTS5sb2NhdGlvbi5sZW5ndGg9PT1rJiYibnVtYmVyIj09dHlwZW9mIE0ubG9jYXRpb25bVF0/Xy5wdXNoKDB8TS5sb2NhdGlvbltUXSk6Xy5wdXNoKC0xKTtiLnB1c2goe25hbWU6TS5uYW1lLHR5cGU6TS50eXBlLGxvY2F0aW9uczpBfSl9ZWxzZSBiLnB1c2goe25hbWU6TS5uYW1lLHR5cGU6TS50eXBlLGxvY2F0aW9uczpbXy5sZW5ndGhdfSkseC5wdXNoKE0ubmFtZSksIm51bWJlciI9PXR5cGVvZiBNLmxvY2F0aW9uP18ucHVzaCgwfE0ubG9jYXRpb24pOl8ucHVzaCgtMSl9Zm9yKHZhciBFPTAsdz0wO3c8Xy5sZW5ndGg7Kyt3KWlmKF9bd108MCl7Zm9yKDtfLmluZGV4T2YoRSk+PTA7KUUrPTE7X1t3XT1FfXZhciBTPW5ldyBBcnJheShyLmxlbmd0aCk7bygpLHAuX3JlbGluaz1vLHAudHlwZXM9e3VuaWZvcm1zOmwociksYXR0cmlidXRlczpsKG4pfSxwLmF0dHJpYnV0ZXM9cyhkLHAsYixfKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCwidW5pZm9ybXMiLGEoZCxwLHIsUykpfSxlLmV4cG9ydHM9b30seyIuL2xpYi9HTEVycm9yIjoyMDksIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIjoyMTAsIi4vbGliL2NyZWF0ZS11bmlmb3JtcyI6MjExLCIuL2xpYi9yZWZsZWN0IjoyMTIsIi4vbGliL3J1bnRpbWUtcmVmbGVjdCI6MjEzLCIuL2xpYi9zaGFkZXItY2FjaGUiOjIxNH1dLDIwOTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMuc2hvcnRNZXNzYWdlPWV8fCIiLHRoaXMubG9uZ01lc3NhZ2U9cnx8IiIsdGhpcy5yYXdFcnJvcj10fHwiIix0aGlzLm1lc3NhZ2U9ImdsLXNoYWRlcjogIisoZXx8dHx8IiIpKyhyPyJcbiIrcjoiIiksdGhpcy5zdGFjaz0obmV3IEVycm9yKS5zdGFja31uLnByb3RvdHlwZT1uZXcgRXJyb3Isbi5wcm90b3R5cGUubmFtZT0iR0xFcnJvciIsbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixlLmV4cG9ydHM9bn0se31dLDIxMDpbZnVuY3Rpb24odCxlLHIpewoidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksbyl7dGhpcy5fZ2w9dCx0aGlzLl93cmFwcGVyPWUsdGhpcy5faW5kZXg9cix0aGlzLl9sb2NhdGlvbnM9bix0aGlzLl9kaW1lbnNpb249aSx0aGlzLl9jb25zdEZ1bmM9b31mdW5jdGlvbiBpKHQsZSxyLGksbyxhLHMpe2Zvcih2YXIgbD1bImdsIiwidiJdLHU9W10sYz0wO28+YzsrK2MpbC5wdXNoKCJ4IitjKSx1LnB1c2goIngiK2MpO2wucHVzaCgiaWYoeDAubGVuZ3RoPT09dm9pZCAwKXtyZXR1cm4gZ2wudmVydGV4QXR0cmliIitvKyJmKHYsIit1LmpvaW4oKSsiKX1lbHNle3JldHVybiBnbC52ZXJ0ZXhBdHRyaWIiK28rImZ2KHYseDApfSIpO3ZhciBoPUZ1bmN0aW9uLmFwcGx5KG51bGwsbCksZj1uZXcgbih0LGUscixpLG8saCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEscyx7c2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpW3JdKSxoKHQsaVtyXSxlKSxlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sZW51bWVyYWJsZTohMH0pfWZ1bmN0aW9uIG8odCxlLHIsbixvLGEscyl7Zm9yKHZhciBsPW5ldyBBcnJheShvKSx1PW5ldyBBcnJheShvKSxjPTA7bz5jOysrYylpKHQsZSxyW2NdLG4sbyxsLGMpLHVbY109bFtjXTtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwibG9jYXRpb24iLHtzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGU9MDtvPmU7KytlKXVbZV0ubG9jYXRpb249dFtlXTtlbHNlIGZvcih2YXIgZT0wO28+ZTsrK2UpdVtlXS5sb2NhdGlvbj10K2U7cmV0dXJuIHR9LGdldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkobyksZT0wO28+ZTsrK2UpdFtlXT1uW3JbZV1dO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwfSksbC5wb2ludGVyPWZ1bmN0aW9uKGUsaSxhLHMpe2U9ZXx8dC5GTE9BVCxpPSEhaSxhPWF8fG8qbyxzPXN8fDA7Zm9yKHZhciBsPTA7bz5sOysrbCl7dmFyIHU9bltyW2xdXTt0LnZlcnRleEF0dHJpYlBvaW50ZXIodSxvLGUsaSxhLHMrbCpvKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHUpfX07dmFyIGg9bmV3IEFycmF5KG8pLGY9dFsidmVydGV4QXR0cmliIitvKyJmdiJdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLHMse3NldDpmdW5jdGlvbihlKXtmb3IodmFyIGk9MDtvPmk7KytpKXt2YXIgYT1uW3JbaV1dO2lmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGEpLEFycmF5LmlzQXJyYXkoZVswXSkpZi5jYWxsKHQsYSxlW2ldKTtlbHNle2Zvcih2YXIgcz0wO28+czsrK3MpaFtzXT1lW28qaStzXTtmLmNhbGwodCxhLGgpfX1yZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGVudW1lcmFibGU6ITB9KX1mdW5jdGlvbiBhKHQsZSxyLG4pe2Zvcih2YXIgYT17fSxsPTAsdT1yLmxlbmd0aDt1Pmw7KytsKXt2YXIgYz1yW2xdLGg9Yy5uYW1lLGY9Yy50eXBlLHA9Yy5sb2NhdGlvbnM7c3dpdGNoKGYpe2Nhc2UiYm9vbCI6Y2FzZSJpbnQiOmNhc2UiZmxvYXQiOmkodCxlLHBbMF0sbiwxLGEsaCk7YnJlYWs7ZGVmYXVsdDppZihmLmluZGV4T2YoInZlYyIpPj0wKXt2YXIgZD1mLmNoYXJDb2RlQXQoZi5sZW5ndGgtMSktNDg7aWYoMj5kfHxkPjQpdGhyb3cgbmV3IHMoIiIsIkludmFsaWQgZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgIitoKyI6ICIrZik7aSh0LGUscFswXSxuLGQsYSxoKX1lbHNle2lmKCEoZi5pbmRleE9mKCJtYXQiKT49MCkpdGhyb3cgbmV3IHMoIiIsIlVua25vd24gZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgIitoKyI6ICIrZik7dmFyIGQ9Zi5jaGFyQ29kZUF0KGYubGVuZ3RoLTEpLTQ4O2lmKDI+ZHx8ZD40KXRocm93IG5ldyBzKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIraCsiOiAiK2YpO28odCxlLHAsbixkLGEsaCl9fX1yZXR1cm4gYX1lLmV4cG9ydHM9YTt2YXIgcz10KCIuL0dMRXJyb3IiKSxsPW4ucHJvdG90eXBlO2wucG9pbnRlcj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLG89aS5fZ2wsYT1pLl9sb2NhdGlvbnNbaS5faW5kZXhdO28udmVydGV4QXR0cmliUG9pbnRlcihhLGkuX2RpbWVuc2lvbix0fHxvLkZMT0FULCEhZSxyfHwwLG58fDApLG8uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYSl9LGwuc2V0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9jb25zdEZ1bmModGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSx0LGUscixuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF0mJih0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdPTB8dCx0aGlzLl93cmFwcGVyLnByb2dyYW09bnVsbCksMHx0fX0pfSx7Ii4vR0xFcnJvciI6MjA5fV0sMjExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9bmV3IEZ1bmN0aW9uKCJ5IiwicmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHl9Iik7cmV0dXJuIGUodCl9ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO3Q+bjsrK24pcltuXT1lO3JldHVybiByfWZ1bmN0aW9uIG8odCxlLHIsbyl7ZnVuY3Rpb24gbChyKXt2YXIgbj1uZXcgRnVuY3Rpb24oImdsIiwid3JhcHBlciIsImxvY2F0aW9ucyIsInJldHVybiBmdW5jdGlvbigpe3JldHVybiBnbC5nZXRVbmlmb3JtKHdyYXBwZXIucHJvZ3JhbSxsb2NhdGlvbnNbIityKyJdKX0iKTtyZXR1cm4gbih0LGUsbyl9ZnVuY3Rpb24gdSh0LGUscil7c3dpdGNoKHIpe2Nhc2UiYm9vbCI6Y2FzZSJpbnQiOmNhc2Uic2FtcGxlcjJEIjpjYXNlInNhbXBsZXJDdWJlIjpyZXR1cm4iZ2wudW5pZm9ybTFpKGxvY2F0aW9uc1siK2UrIl0sb2JqIit0KyIpIjtjYXNlImZsb2F0IjpyZXR1cm4iZ2wudW5pZm9ybTFmKGxvY2F0aW9uc1siK2UrIl0sb2JqIit0KyIpIjtkZWZhdWx0OnZhciBuPXIuaW5kZXhPZigidmVjIik7aWYoIShuPj0wJiYxPj1uJiZyLmxlbmd0aD09PTQrbikpe2lmKDA9PT1yLmluZGV4T2YoIm1hdCIpJiY0PT09ci5sZW5ndGgpe3ZhciBpPXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKS00ODtpZigyPml8fGk+NCl0aHJvdyBuZXcgcygiIiwiSW52YWxpZCB1bmlmb3JtIGRpbWVuc2lvbiB0eXBlIGZvciBtYXRyaXggIituYW1lKyI6ICIrcik7cmV0dXJuImdsLnVuaWZvcm1NYXRyaXgiK2krImZ2KGxvY2F0aW9uc1siK2UrIl0sZmFsc2Usb2JqIit0KyIpIn10aHJvdyBuZXcgcygiIiwiVW5rbm93biB1bmlmb3JtIGRhdGEgdHlwZSBmb3IgIituYW1lKyI6ICIrcil9dmFyIGk9ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpLTQ4O2lmKDI+aXx8aT40KXRocm93IG5ldyBzKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSIpO3N3aXRjaChyLmNoYXJBdCgwKSl7Y2FzZSJiIjpjYXNlImkiOnJldHVybiJnbC51bmlmb3JtIitpKyJpdihsb2NhdGlvbnNbIitlKyJdLG9iaiIrdCsiKSI7Y2FzZSJ2IjpyZXR1cm4iZ2wudW5pZm9ybSIraSsiZnYobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2RlZmF1bHQ6dGhyb3cgbmV3IHMoIiIsIlVucmVjb2duaXplZCBkYXRhIHR5cGUgZm9yIHZlY3RvciAiK25hbWUrIjogIityKX19fWZ1bmN0aW9uIGModCxlKXtpZigib2JqZWN0IiE9dHlwZW9mIGUpcmV0dXJuW1t0LGVdXTt2YXIgcj1bXTtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXSxvPXQ7bys9cGFyc2VJbnQobikrIiI9PT1uPyJbIituKyJdIjoiLiIrbiwib2JqZWN0Ij09dHlwZW9mIGk/ci5wdXNoLmFwcGx5KHIsYyhvLGkpKTpyLnB1c2goW28saV0pfXJldHVybiByfWZ1bmN0aW9uIGgoZSl7Zm9yKHZhciBuPVsicmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5KG9iail7Il0saT1jKCIiLGUpLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIHM9aVthXSxsPXNbMF0saD1zWzFdO29baF0mJm4ucHVzaCh1KGwsaCxyW2hdLnR5cGUpKX1uLnB1c2goInJldHVybiBvYmp9Iik7dmFyIGY9bmV3IEZ1bmN0aW9uKCJnbCIsImxvY2F0aW9ucyIsbi5qb2luKCJcbiIpKTtyZXR1cm4gZih0LG8pfWZ1bmN0aW9uIGYodCl7c3dpdGNoKHQpe2Nhc2UiYm9vbCI6cmV0dXJuITE7Y2FzZSJpbnQiOmNhc2Uic2FtcGxlcjJEIjpjYXNlInNhbXBsZXJDdWJlIjpyZXR1cm4gMDtjYXNlImZsb2F0IjpyZXR1cm4gMDtkZWZhdWx0OnZhciBlPXQuaW5kZXhPZigidmVjIik7aWYoZT49MCYmMT49ZSYmdC5sZW5ndGg9PT00K2Upe3ZhciByPXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKS00ODtpZigyPnJ8fHI+NCl0aHJvdyBuZXcgcygiIiwiSW52YWxpZCBkYXRhIHR5cGUiKTtyZXR1cm4iYiI9PT10LmNoYXJBdCgwKT9pKHIsITEpOmkociwwKX1pZigwPT09dC5pbmRleE9mKCJtYXQiKSYmND09PXQubGVuZ3RoKXt2YXIgcj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSktNDg7aWYoMj5yfHxyPjQpdGhyb3cgbmV3IHMoIiIsIkludmFsaWQgdW5pZm9ybSBkaW1lbnNpb24gdHlwZSBmb3IgbWF0cml4ICIrbmFtZSsiOiAiK3QpO3JldHVybiBpKHIqciwwKX10aHJvdyBuZXcgcygiIiwiVW5rbm93biB1bmlmb3JtIGRhdGEgdHlwZSBmb3IgIituYW1lKyI6ICIrdCl9fWZ1bmN0aW9uIHAodCxlLGkpe2lmKCJvYmplY3QiPT10eXBlb2YgaSl7dmFyIGE9ZChpKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6bihhKSxzZXQ6aChpKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pfWVsc2Ugb1tpXT9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6bChpKSxzZXQ6aChpKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pOnRbZV09ZihyW2ldLnR5cGUpfWZ1bmN0aW9uIGQodCl7dmFyIGU7aWYoQXJyYXkuaXNBcnJheSh0KSl7ZT1uZXcgQXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXAoZSxyLHRbcl0pfWVsc2V7ZT17fTtmb3IodmFyIG4gaW4gdClwKGUsbix0W25dKX1yZXR1cm4gZX12YXIgbT1hKHIsITApO3JldHVybntnZXQ6bihkKG0pKSxzZXQ6aChtKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19dmFyIGE9dCgiLi9yZWZsZWN0Iikscz10KCIuL0dMRXJyb3IiKTtlLmV4cG9ydHM9b30seyIuL0dMRXJyb3IiOjIwOSwiLi9yZWZsZWN0IjoyMTJ9XSwyMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0ubmFtZSxvPWkuc3BsaXQoIi4iKSxhPXIscz0wO3M8by5sZW5ndGg7KytzKXt2YXIgbD1vW3NdLnNwbGl0KCJbIik7aWYobC5sZW5ndGg+MSl7bFswXWluIGF8fChhW2xbMF1dPVtdKSxhPWFbbFswXV07Zm9yKHZhciB1PTE7dTxsLmxlbmd0aDsrK3Upe3ZhciBjPXBhcnNlSW50KGxbdV0pO3U8bC5sZW5ndGgtMXx8czxvLmxlbmd0aC0xPyhjIGluIGF8fCh1PGwubGVuZ3RoLTE/YVtjXT1bXTphW2NdPXt9KSxhPWFbY10pOmU/YVtjXT1uOmFbY109dFtuXS50eXBlfX1lbHNlIHM8by5sZW5ndGgtMT8obFswXWluIGF8fChhW2xbMF1dPXt9KSxhPWFbbFswXV0pOmU/YVtsWzBdXT1uOmFbbFswXV09dFtuXS50eXBlfXJldHVybiByfWUuZXhwb3J0cz1ufSx7fV0sMjEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZighcyl7dmFyIHI9T2JqZWN0LmtleXMoYSk7cz17fTtmb3IodmFyIG49MDtuPHIubGVuZ3RoOysrbil7dmFyIGk9cltuXTtzW3RbaV1dPWFbaV19fXJldHVybiBzW2VdfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsdC5BQ1RJVkVfVU5JRk9STVMpLGk9W10sbz0wO3I+bzsrK28pe3ZhciBhPXQuZ2V0QWN0aXZlVW5pZm9ybShlLG8pO2lmKGEpe3ZhciBzPW4odCxhLnR5cGUpO2lmKGEuc2l6ZT4xKWZvcih2YXIgbD0wO2w8YS5zaXplOysrbClpLnB1c2goe25hbWU6YS5uYW1lLnJlcGxhY2UoIlswXSIsIlsiK2wrIl0iKSx0eXBlOnN9KTtlbHNlIGkucHVzaCh7bmFtZTphLm5hbWUsdHlwZTpzfSl9fXJldHVybiBpfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsdC5BQ1RJVkVfQVRUUklCVVRFUyksaT1bXSxvPTA7cj5vOysrbyl7dmFyIGE9dC5nZXRBY3RpdmVBdHRyaWIoZSxvKTthJiZpLnB1c2goe25hbWU6YS5uYW1lLHR5cGU6bih0LGEudHlwZSl9KX1yZXR1cm4gaX1yLnVuaWZvcm1zPWksci5hdHRyaWJ1dGVzPW87dmFyIGE9e0ZMT0FUOiJmbG9hdCIsRkxPQVRfVkVDMjoidmVjMiIsRkxPQVRfVkVDMzoidmVjMyIsRkxPQVRfVkVDNDoidmVjNCIsSU5UOiJpbnQiLElOVF9WRUMyOiJpdmVjMiIsSU5UX1ZFQzM6Iml2ZWMzIixJTlRfVkVDNDoiaXZlYzQiLEJPT0w6ImJvb2wiLEJPT0xfVkVDMjoiYnZlYzIiLEJPT0xfVkVDMzoiYnZlYzMiLEJPT0xfVkVDNDoiYnZlYzQiLEZMT0FUX01BVDI6Im1hdDIiLEZMT0FUX01BVDM6Im1hdDMiLEZMT0FUX01BVDQ6Im1hdDQiLFNBTVBMRVJfMkQ6InNhbXBsZXIyRCIsU0FNUExFUl9DVUJFOiJzYW1wbGVyQ3ViZSJ9LHM9bnVsbH0se31dLDIxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxvLGEpe3RoaXMuaWQ9dCx0aGlzLnNyYz1lLHRoaXMudHlwZT1yLHRoaXMuc2hhZGVyPW4sdGhpcy5jb3VudD1vLHRoaXMucHJvZ3JhbXM9W10sdGhpcy5jYWNoZT1hfWZ1bmN0aW9uIGkodCl7dGhpcy5nbD10LHRoaXMuc2hhZGVycz1be30se31dLHRoaXMucHJvZ3JhbXM9e319ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49dC5jcmVhdGVTaGFkZXIoZSk7aWYodC5zaGFkZXJTb3VyY2UobixyKSx0LmNvbXBpbGVTaGFkZXIobiksIXQuZ2V0U2hhZGVyUGFyYW1ldGVyKG4sdC5DT01QSUxFX1NUQVRVUykpe3ZhciBpPXQuZ2V0U2hhZGVySW5mb0xvZyhuKTt0cnl7dmFyIG89aChpLHIsZSl9Y2F0Y2goYSl7dGhyb3cgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gZm9ybWF0IGNvbXBpbGVyIGVycm9yOiAiK2EpLG5ldyBjKGksIkVycm9yIGNvbXBpbGluZyBzaGFkZXI6XG4iK2kpfXRocm93IG5ldyBjKGksby5zaG9ydCxvLmxvbmcpfXJldHVybiBufWZ1bmN0aW9uIGEodCxlLHIsbixpKXt2YXIgbz10LmNyZWF0ZVByb2dyYW0oKTt0LmF0dGFjaFNoYWRlcihvLGUpLHQuYXR0YWNoU2hhZGVyKG8scik7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDsrK2EpdC5iaW5kQXR0cmliTG9jYXRpb24obyxpW2FdLG5bYV0pO2lmKHQubGlua1Byb2dyYW0obyksIXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihvLHQuTElOS19TVEFUVVMpKXt2YXIgcz10LmdldFByb2dyYW1JbmZvTG9nKG8pO3Rocm93IG5ldyBjKHMsIkVycm9yIGxpbmtpbmcgcHJvZ3JhbTogIitzKX1yZXR1cm4gb31mdW5jdGlvbiBzKHQpe3ZhciBlPXAuZ2V0KHQpO3JldHVybiBlfHwoZT1uZXcgaSh0KSxwLnNldCh0LGUpKSxlfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybiBzKHQpLmdldFNoYWRlclJlZmVyZW5jZShlLHIpfWZ1bmN0aW9uIHUodCxlLHIsbixpKXtyZXR1cm4gcyh0KS5nZXRQcm9ncmFtKGUscixuLGkpfXIuc2hhZGVyPWwsci5wcm9ncmFtPXU7dmFyIGM9dCgiLi9HTEVycm9yIiksaD10KCJnbC1mb3JtYXQtY29tcGlsZXItZXJyb3IiKSxmPSJ1bmRlZmluZWQiPT10eXBlb2YgV2Vha01hcD90KCJ3ZWFrbWFwLXNoaW0iKTpXZWFrTWFwLHA9bmV3IGYsZD0wO24ucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtpZigwPT09LS10aGlzLmNvdW50KXtmb3IodmFyIHQ9dGhpcy5jYWNoZSxlPXQuZ2wscj10aGlzLnByb2dyYW1zLG49MCxpPXIubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXQucHJvZ3JhbXNbcltuXV07byYmKGRlbGV0ZSB0LnByb2dyYW1zW25dLGUuZGVsZXRlUHJvZ3JhbShvKSl9ZS5kZWxldGVTaGFkZXIodGhpcy5zaGFkZXIpLGRlbGV0ZSB0LnNoYWRlcnNbdGhpcy50eXBlPT09ZS5GUkFHTUVOVF9TSEFERVJ8MF1bdGhpcy5zcmNdfX07dmFyIG09aS5wcm90b3R5cGU7bS5nZXRTaGFkZXJSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdsLGk9dGhpcy5zaGFkZXJzW3Q9PT1yLkZSQUdNRU5UX1NIQURFUnwwXSxhPWlbZV07aWYoYSYmci5pc1NoYWRlcihhLnNoYWRlcikpYS5jb3VudCs9MTtlbHNle3ZhciBzPW8ocix0LGUpO2E9aVtlXT1uZXcgbihkKyssZSx0LHMsW10sMSx0aGlzKX1yZXR1cm4gYX0sbS5nZXRQcm9ncmFtPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVt0LmlkLGUuaWQsci5qb2luKCI6Iiksbi5qb2luKCI6IildLmpvaW4oIkAiKSxvPXRoaXMucHJvZ3JhbXNbaV07cmV0dXJuIG8mJnRoaXMuZ2wuaXNQcm9ncmFtKG8pfHwodGhpcy5wcm9ncmFtc1tpXT1vPWEodGhpcy5nbCx0LnNoYWRlcixlLnNoYWRlcixyLG4pLHQucHJvZ3JhbXMucHVzaChpKSxlLnByb2dyYW1zLnB1c2goaSkpLG99fSx7Ii4vR0xFcnJvciI6MjA5LCJnbC1mb3JtYXQtY29tcGlsZXItZXJyb3IiOjIxNSwid2Vha21hcC1zaGltIjoyMjV9XSwyMTU6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49YShlKXx8Im9mIHVua25vd24gbmFtZSAoc2VlIG5wbSBnbHNsLXNoYWRlci1uYW1lKSIsbD0idW5rbm93biB0eXBlIjt2b2lkIDAhPT1yJiYobD1yPT09by5GUkFHTUVOVF9TSEFERVI/ImZyYWdtZW50IjoidmVydGV4Iik7Zm9yKHZhciB1PWkoIkVycm9yIGNvbXBpbGluZyAlcyBzaGFkZXIgJXM6XG4iLGwsbiksYz1pKCIlcyVzIix1LHQpLGg9dC5zcGxpdCgiXG4iKSxmPXt9LHA9MDtwPGgubGVuZ3RoO3ArKyl7dmFyIGQ9aFtwXTtpZigiIiE9PWQpe3ZhciBtPXBhcnNlSW50KGQuc3BsaXQoIjoiKVsyXSk7aWYoaXNOYU4obSkpdGhyb3cgbmV3IEVycm9yKGkoIkNvdWxkIG5vdCBwYXJzZSBlcnJvcjogJXMiLGQpKTtmW21dPWR9fWZvcih2YXIgZz1zKGUpLnNwbGl0KCJcbiIpLHA9MDtwPGcubGVuZ3RoO3ArKylpZihmW3ArM118fGZbcCsyXXx8ZltwKzFdKXt2YXIgdj1nW3BdO2lmKHUrPXYrIlxuIixmW3ArMV0pe3ZhciB5PWZbcCsxXTt5PXkuc3Vic3RyKHkuc3BsaXQoIjoiLDMpLmpvaW4oIjoiKS5sZW5ndGgrMSkudHJpbSgpLHUrPWkoIl5eXiAlc1xuXG4iLHkpfX1yZXR1cm57ImxvbmciOnUudHJpbSgpLCJzaG9ydCI6Yy50cmltKCl9fXZhciBpPXQoInNwcmludGYtanMiKS5zcHJpbnRmLG89dCgiZ2wtY29uc3RhbnRzL2xvb2t1cCIpLGE9dCgiZ2xzbC1zaGFkZXItbmFtZSIpLHM9dCgiYWRkLWxpbmUtbnVtYmVycyIpO2UuZXhwb3J0cz1ufSx7ImFkZC1saW5lLW51bWJlcnMiOjIxNiwiZ2wtY29uc3RhbnRzL2xvb2t1cCI6MjE5LCJnbHNsLXNoYWRlci1uYW1lIjoyMjAsInNwcmludGYtanMiOjIyMn1dLDIxNjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe2U9Im51bWJlciI9PXR5cGVvZiBlP2U6MSxyPXJ8fCI6ICI7dmFyIG49dC5zcGxpdCgvXHI/XG4vKSxvPVN0cmluZyhuLmxlbmd0aCtlLTEpLmxlbmd0aDtyZXR1cm4gbi5tYXAoZnVuY3Rpb24odCxuKXt2YXIgYT1uK2Uscz1TdHJpbmcoYSkubGVuZ3RoLGw9aShhLG8tcyk7cmV0dXJuIGwrcit0fSkuam9pbigiXG4iKX12YXIgaT10KCJwYWQtbGVmdCIpO2UuZXhwb3J0cz1ufSx7InBhZC1sZWZ0IjoyMTd9XSwyMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicmVwZWF0LXN0cmluZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHI9InVuZGVmaW5lZCIhPXR5cGVvZiByP3IrIiI6IiAiLG4ocixlKSt0fX0seyJyZXBlYXQtc3RyaW5nIjo0NTd9XSwyMTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ezA6Ik5PTkUiLDE6Ik9ORSIsMjoiTElORV9MT09QIiwzOiJMSU5FX1NUUklQIiw0OiJUUklBTkdMRVMiLDU6IlRSSUFOR0xFX1NUUklQIiw2OiJUUklBTkdMRV9GQU4iLDI1NjoiREVQVEhfQlVGRkVSX0JJVCIsNTEyOiJORVZFUiIsNTEzOiJMRVNTIiw1MTQ6IkVRVUFMIiw1MTU6IkxFUVVBTCIsNTE2OiJHUkVBVEVSIiw1MTc6Ik5PVEVRVUFMIiw1MTg6IkdFUVVBTCIsNTE5OiJBTFdBWVMiLDc2ODoiU1JDX0NPTE9SIiw3Njk6Ik9ORV9NSU5VU19TUkNfQ09MT1IiLDc3MDoiU1JDX0FMUEhBIiw3NzE6Ik9ORV9NSU5VU19TUkNfQUxQSEEiLDc3MjoiRFNUX0FMUEhBIiw3NzM6Ik9ORV9NSU5VU19EU1RfQUxQSEEiLDc3NDoiRFNUX0NPTE9SIiw3NzU6Ik9ORV9NSU5VU19EU1RfQ09MT1IiLDc3NjoiU1JDX0FMUEhBX1NBVFVSQVRFIiwxMDI0OiJTVEVOQ0lMX0JVRkZFUl9CSVQiLDEwMjg6IkZST05UIiwxMDI5OiJCQUNLIiwxMDMyOiJGUk9OVF9BTkRfQkFDSyIsMTI4MDoiSU5WQUxJRF9FTlVNIiwxMjgxOiJJTlZBTElEX1ZBTFVFIiwxMjgyOiJJTlZBTElEX09QRVJBVElPTiIsMTI4NToiT1VUX09GX01FTU9SWSIsMTI4NjoiSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iLDIzMDQ6IkNXIiwyMzA1OiJDQ1ciLDI4NDk6IkxJTkVfV0lEVEgiLDI4ODQ6IkNVTExfRkFDRSIsMjg4NToiQ1VMTF9GQUNFX01PREUiLDI4ODY6IkZST05UX0ZBQ0UiLDI5Mjg6IkRFUFRIX1JBTkdFIiwyOTI5OiJERVBUSF9URVNUIiwyOTMwOiJERVBUSF9XUklURU1BU0siLDI5MzE6IkRFUFRIX0NMRUFSX1ZBTFVFIiwyOTMyOiJERVBUSF9GVU5DIiwyOTYwOiJTVEVOQ0lMX1RFU1QiLDI5NjE6IlNURU5DSUxfQ0xFQVJfVkFMVUUiLDI5NjI6IlNURU5DSUxfRlVOQyIsMjk2MzoiU1RFTkNJTF9WQUxVRV9NQVNLIiwyOTY0OiJTVEVOQ0lMX0ZBSUwiLDI5NjU6IlNURU5DSUxfUEFTU19ERVBUSF9GQUlMIiwyOTY2OiJTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyIsMjk2NzoiU1RFTkNJTF9SRUYiLDI5Njg6IlNURU5DSUxfV1JJVEVNQVNLIiwyOTc4OiJWSUVXUE9SVCIsMzAyNDoiRElUSEVSIiwzMDQyOiJCTEVORCIsMzA4ODoiU0NJU1NPUl9CT1giLDMwODk6IlNDSVNTT1JfVEVTVCIsMzEwNjoiQ09MT1JfQ0xFQVJfVkFMVUUiLDMxMDc6IkNPTE9SX1dSSVRFTUFTSyIsMzMxNzoiVU5QQUNLX0FMSUdOTUVOVCIsMzMzMzoiUEFDS19BTElHTk1FTlQiLDMzNzk6Ik1BWF9URVhUVVJFX1NJWkUiLDMzODY6Ik1BWF9WSUVXUE9SVF9ESU1TIiwzNDA4OiJTVUJQSVhFTF9CSVRTIiwzNDEwOiJSRURfQklUUyIsMzQxMToiR1JFRU5fQklUUyIsMzQxMjoiQkxVRV9CSVRTIiwzNDEzOiJBTFBIQV9CSVRTIiwzNDE0OiJERVBUSF9CSVRTIiwzNDE1OiJTVEVOQ0lMX0JJVFMiLDM1NTM6IlRFWFRVUkVfMkQiLDQzNTI6IkRPTlRfQ0FSRSIsNDM1MzoiRkFTVEVTVCIsNDM1NDoiTklDRVNUIiw1MTIwOiJCWVRFIiw1MTIxOiJVTlNJR05FRF9CWVRFIiw1MTIyOiJTSE9SVCIsNTEyMzoiVU5TSUdORURfU0hPUlQiLDUxMjQ6IklOVCIsNTEyNToiVU5TSUdORURfSU5UIiw1MTI2OiJGTE9BVCIsNTM4NjoiSU5WRVJUIiw1ODkwOiJURVhUVVJFIiw2NDAxOiJTVEVOQ0lMX0lOREVYIiw2NDAyOiJERVBUSF9DT01QT05FTlQiLDY0MDY6IkFMUEhBIiw2NDA3OiJSR0IiLDY0MDg6IlJHQkEiLDY0MDk6IkxVTUlOQU5DRSIsNjQxMDoiTFVNSU5BTkNFX0FMUEhBIiw3NjgwOiJLRUVQIiw3NjgxOiJSRVBMQUNFIiw3NjgyOiJJTkNSIiw3NjgzOiJERUNSIiw3OTM2OiJWRU5ET1IiLDc5Mzc6IlJFTkRFUkVSIiw3OTM4OiJWRVJTSU9OIiw5NzI4OiJORUFSRVNUIiw5NzI5OiJMSU5FQVIiLDk5ODQ6Ik5FQVJFU1RfTUlQTUFQX05FQVJFU1QiLDk5ODU6IkxJTkVBUl9NSVBNQVBfTkVBUkVTVCIsOTk4NjoiTkVBUkVTVF9NSVBNQVBfTElORUFSIiw5OTg3OiJMSU5FQVJfTUlQTUFQX0xJTkVBUiIsMTAyNDA6IlRFWFRVUkVfTUFHX0ZJTFRFUiIsMTAyNDE6IlRFWFRVUkVfTUlOX0ZJTFRFUiIsMTAyNDI6IlRFWFRVUkVfV1JBUF9TIiwxMDI0MzoiVEVYVFVSRV9XUkFQX1QiLDEwNDk3OiJSRVBFQVQiLDEwNzUyOiJQT0xZR09OX09GRlNFVF9VTklUUyIsMTYzODQ6IkNPTE9SX0JVRkZFUl9CSVQiLDMyNzY5OiJDT05TVEFOVF9DT0xPUiIsMzI3NzA6Ik9ORV9NSU5VU19DT05TVEFOVF9DT0xPUiIsMzI3NzE6IkNPTlNUQU5UX0FMUEhBIiwzMjc3MjoiT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBIiwzMjc3MzoiQkxFTkRfQ09MT1IiLDMyNzc0OiJGVU5DX0FERCIsMzI3Nzc6IkJMRU5EX0VRVUFUSU9OX1JHQiIsMzI3Nzg6IkZVTkNfU1VCVFJBQ1QiLDMyNzc5OiJGVU5DX1JFVkVSU0VfU1VCVFJBQ1QiLDMyODE5OiJVTlNJR05FRF9TSE9SVF80XzRfNF80IiwzMjgyMDoiVU5TSUdORURfU0hPUlRfNV81XzVfMSIsMzI4MjM6IlBPTFlHT05fT0ZGU0VUX0ZJTEwiLDMyODI0OiJQT0xZR09OX09GRlNFVF9GQUNUT1IiLDMyODU0OiJSR0JBNCIsMzI4NTU6IlJHQjVfQTEiLDMyODczOiJURVhUVVJFX0JJTkRJTkdfMkQiLDMyOTI2OiJTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UiLDMyOTI4OiJTQU1QTEVfQ09WRVJBR0UiLDMyOTM2OiJTQU1QTEVfQlVGRkVSUyIsMzI5Mzc6IlNBTVBMRVMiLDMyOTM4OiJTQU1QTEVfQ09WRVJBR0VfVkFMVUUiLDMyOTM5OiJTQU1QTEVfQ09WRVJBR0VfSU5WRVJUIiwzMjk2ODoiQkxFTkRfRFNUX1JHQiIsMzI5Njk6IkJMRU5EX1NSQ19SR0IiLDMyOTcwOiJCTEVORF9EU1RfQUxQSEEiLDMyOTcxOiJCTEVORF9TUkNfQUxQSEEiLDMzMDcxOiJDTEFNUF9UT19FREdFIiwzMzE3MDoiR0VORVJBVEVfTUlQTUFQX0hJTlQiLDMzMTg5OiJERVBUSF9DT01QT05FTlQxNiIsMzMzMDY6IkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCIsMzM2MzU6IlVOU0lHTkVEX1NIT1JUXzVfNl81IiwzMzY0ODoiTUlSUk9SRURfUkVQRUFUIiwzMzkwMToiQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFIiwzMzkwMjoiQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFIiwzMzk4NDoiVEVYVFVSRTAiLDMzOTg1OiJURVhUVVJFMSIsMzM5ODY6IlRFWFRVUkUyIiwzMzk4NzoiVEVYVFVSRTMiLDMzOTg4OiJURVhUVVJFNCIsMzM5ODk6IlRFWFRVUkU1IiwzMzk5MDoiVEVYVFVSRTYiLDMzOTkxOiJURVhUVVJFNyIsMzM5OTI6IlRFWFRVUkU4IiwzMzk5MzoiVEVYVFVSRTkiLDMzOTk0OiJURVhUVVJFMTAiLDMzOTk1OiJURVhUVVJFMTEiLDMzOTk2OiJURVhUVVJFMTIiLDMzOTk3OiJURVhUVVJFMTMiLDMzOTk4OiJURVhUVVJFMTQiLDMzOTk5OiJURVhUVVJFMTUiLDM0ZTM6IlRFWFRVUkUxNiIsMzQwMDE6IlRFWFRVUkUxNyIsMzQwMDI6IlRFWFRVUkUxOCIsMzQwMDM6IlRFWFRVUkUxOSIsMzQwMDQ6IlRFWFRVUkUyMCIsMzQwMDU6IlRFWFRVUkUyMSIsMzQwMDY6IlRFWFRVUkUyMiIsMzQwMDc6IlRFWFRVUkUyMyIsMzQwMDg6IlRFWFRVUkUyNCIsMzQwMDk6IlRFWFRVUkUyNSIsMzQwMTA6IlRFWFRVUkUyNiIsMzQwMTE6IlRFWFRVUkUyNyIsMzQwMTI6IlRFWFRVUkUyOCIsMzQwMTM6IlRFWFRVUkUyOSIsMzQwMTQ6IlRFWFRVUkUzMCIsMzQwMTU6IlRFWFRVUkUzMSIsMzQwMTY6IkFDVElWRV9URVhUVVJFIiwzNDAyNDoiTUFYX1JFTkRFUkJVRkZFUl9TSVpFIiwzNDA0MToiREVQVEhfU1RFTkNJTCIsMzQwNTU6IklOQ1JfV1JBUCIsMzQwNTY6IkRFQ1JfV1JBUCIsMzQwNjc6IlRFWFRVUkVfQ1VCRV9NQVAiLDM0MDY4OiJURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVAiLDM0MDY5OiJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1giLDM0MDcwOiJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1giLDM0MDcxOiJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kiLDM0MDcyOiJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kiLDM0MDczOiJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1oiLDM0MDc0OiJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1oiLDM0MDc2OiJNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFIiwzNDMzODoiVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEIiwzNDMzOToiVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFIiwzNDM0MDoiVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUiLDM0MzQxOiJWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUiLDM0MzQyOiJDVVJSRU5UX1ZFUlRFWF9BVFRSSUIiLDM0MzczOiJWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIiLDM0NDY2OiJOVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMiLDM0NDY3OiJDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyIsMzQ2NjA6IkJVRkZFUl9TSVpFIiwzNDY2MToiQlVGRkVSX1VTQUdFIiwzNDgxNjoiU1RFTkNJTF9CQUNLX0ZVTkMiLDM0ODE3OiJTVEVOQ0lMX0JBQ0tfRkFJTCIsMzQ4MTg6IlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwiLDM0ODE5OiJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTIiwzNDg3NzoiQkxFTkRfRVFVQVRJT05fQUxQSEEiLDM0OTIxOiJNQVhfVkVSVEVYX0FUVFJJQlMiLDM0OTIyOiJWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQiLDM0OTMwOiJNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyIsMzQ5NjI6IkFSUkFZX0JVRkZFUiIsMzQ5NjM6IkVMRU1FTlRfQVJSQVlfQlVGRkVSIiwzNDk2NDoiQVJSQVlfQlVGRkVSX0JJTkRJTkciLDM0OTY1OiJFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HIiwzNDk3NToiVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORyIsMzUwNDA6IlNUUkVBTV9EUkFXIiwzNTA0NDoiU1RBVElDX0RSQVciLDM1MDQ4OiJEWU5BTUlDX0RSQVciLDM1NjMyOiJGUkFHTUVOVF9TSEFERVIiLDM1NjMzOiJWRVJURVhfU0hBREVSIiwzNTY2MDoiTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTIiwzNTY2MToiTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMiLDM1NjYzOiJTSEFERVJfVFlQRSIsMzU2NjQ6IkZMT0FUX1ZFQzIiLDM1NjY1OiJGTE9BVF9WRUMzIiwzNTY2NjoiRkxPQVRfVkVDNCIsMzU2Njc6IklOVF9WRUMyIiwzNTY2ODoiSU5UX1ZFQzMiLDM1NjY5OiJJTlRfVkVDNCIsMzU2NzA6IkJPT0wiLDM1NjcxOiJCT09MX1ZFQzIiLDM1NjcyOiJCT09MX1ZFQzMiLDM1NjczOiJCT09MX1ZFQzQiLDM1Njc0OiJGTE9BVF9NQVQyIiwzNTY3NToiRkxPQVRfTUFUMyIsMzU2NzY6IkZMT0FUX01BVDQiLDM1Njc4OiJTQU1QTEVSXzJEIiwzNTY4MDoiU0FNUExFUl9DVUJFIiwzNTcxMjoiREVMRVRFX1NUQVRVUyIsMzU3MTM6IkNPTVBJTEVfU1RBVFVTIiwzNTcxNDoiTElOS19TVEFUVVMiLDM1NzE1OiJWQUxJREFURV9TVEFUVVMiLDM1NzE2OiJJTkZPX0xPR19MRU5HVEgiLDM1NzE3OiJBVFRBQ0hFRF9TSEFERVJTIiwzNTcxODoiQUNUSVZFX1VOSUZPUk1TIiwzNTcxOToiQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCIsMzU3MjA6IlNIQURFUl9TT1VSQ0VfTEVOR1RIIiwzNTcyMToiQUNUSVZFX0FUVFJJQlVURVMiLDM1NzIyOiJBQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgiLDM1NzI0OiJTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04iLDM1NzI1OiJDVVJSRU5UX1BST0dSQU0iLDM2MDAzOiJTVEVOQ0lMX0JBQ0tfUkVGIiwzNjAwNDoiU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0siLDM2MDA1OiJTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLIiwzNjAwNjoiRlJBTUVCVUZGRVJfQklORElORyIsMzYwMDc6IlJFTkRFUkJVRkZFUl9CSU5ESU5HIiwzNjA0ODoiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSIsMzYwNDk6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUiLDM2MDUwOiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwiLDM2MDUxOiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSIsMzYwNTM6IkZSQU1FQlVGRkVSX0NPTVBMRVRFIiwzNjA1NDoiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIiwzNjA1NToiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQiLDM2MDU3OiJGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMiLDM2MDYxOiJGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCIsMzYwNjQ6IkNPTE9SX0FUVEFDSE1FTlQwIiwzNjA5NjoiREVQVEhfQVRUQUNITUVOVCIsMzYxMjg6IlNURU5DSUxfQVRUQUNITUVOVCIsMzYxNjA6IkZSQU1FQlVGRkVSIiwzNjE2MToiUkVOREVSQlVGRkVSIiwzNjE2MjoiUkVOREVSQlVGRkVSX1dJRFRIIiwzNjE2MzoiUkVOREVSQlVGRkVSX0hFSUdIVCIsMzYxNjQ6IlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQiLDM2MTY4OiJTVEVOQ0lMX0lOREVYOCIsMzYxNzY6IlJFTkRFUkJVRkZFUl9SRURfU0laRSIsMzYxNzc6IlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFIiwzNjE3ODoiUkVOREVSQlVGRkVSX0JMVUVfU0laRSIsMzYxNzk6IlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFIiwzNjE4MDoiUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUiLDM2MTgxOiJSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFIiwzNjE5NDoiUkdCNTY1IiwzNjMzNjoiTE9XX0ZMT0FUIiwzNjMzNzoiTUVESVVNX0ZMT0FUIiwzNjMzODoiSElHSF9GTE9BVCIsMzYzMzk6IkxPV19JTlQiLDM2MzQwOiJNRURJVU1fSU5UIiwzNjM0MToiSElHSF9JTlQiLDM2MzQ2OiJTSEFERVJfQ09NUElMRVIiLDM2MzQ3OiJNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyIsMzYzNDg6Ik1BWF9WQVJZSU5HX1ZFQ1RPUlMiLDM2MzQ5OiJNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTIiwzNzQ0MDoiVU5QQUNLX0ZMSVBfWV9XRUJHTCIsMzc0NDE6IlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCIsMzc0NDI6IkNPTlRFWFRfTE9TVF9XRUJHTCIsMzc0NDM6IlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiLDM3NDQ0OiJCUk9XU0VSX0RFRkFVTFRfV0VCR0wifX0se31dLDIxOTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vMS4wL251bWJlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19fSx7Ii4vMS4wL251bWJlcnMiOjIxOH1dLDIyMDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPUFycmF5LmlzQXJyYXkodCk/dDppKHQpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtpZigicHJlcHJvY2Vzc29yIj09PW4udHlwZSl7dmFyIGE9bi5kYXRhLm1hdGNoKC9cI2RlZmluZVxzK1NIQURFUl9OQU1FKF9CNjQpP1xzKyguKykkLyk7aWYoYSYmYVsyXSl7dmFyIHM9YVsxXSxsPWFbMl07cmV0dXJuKHM/byhsKTpsKS50cmltKCl9fX19dmFyIGk9dCgiZ2xzbC10b2tlbml6ZXIiKSxvPXQoImF0b2ItbGl0ZSIpO2UuZXhwb3J0cz1ufSx7ImF0b2ItbGl0ZSI6MjIxLCJnbHNsLXRva2VuaXplciI6MjQ1fV0sMjIxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhdG9iKHQpfX0se31dLDIyMjpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlKXtmdW5jdGlvbiByKCl7dmFyIHQ9YXJndW1lbnRzWzBdLGU9ci5jYWNoZTtyZXR1cm4gZVt0XSYmZS5oYXNPd25Qcm9wZXJ0eSh0KXx8KGVbdF09ci5wYXJzZSh0KSksci5mb3JtYXQuY2FsbChudWxsLGVbdF0sYXJndW1lbnRzKX1mdW5jdGlvbiBpKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIEFycmF5KGUrMSkuam9pbih0KX12YXIgYT17bm90X3N0cmluZzovW15zXS8sbnVtYmVyOi9bZGllZmddLyxqc29uOi9bal0vLG5vdF9qc29uOi9bXmpdLyx0ZXh0Oi9eW15ceDI1XSsvLG1vZHVsbzovXlx4MjV7Mn0vLHBsYWNlaG9sZGVyOi9eXHgyNSg/OihbMS05XVxkKilcJHxcKChbXlwpXSspXCkpPyhcKyk/KDB8J1teJF0pPygtKT8oXGQrKT8oPzpcLihcZCspKT8oW2ItZ2lqb3N1eFhdKS8sa2V5Oi9eKFthLXpfXVthLXpfXGRdKikvaSxrZXlfYWNjZXNzOi9eXC4oW2Etel9dW2Etel9cZF0qKS9pLGluZGV4X2FjY2VzczovXlxbKFxkKylcXS8sc2lnbjovXltcK1wtXS99O3IuZm9ybWF0PWZ1bmN0aW9uKHQsZSl7dmFyIG4scyxsLHUsYyxoLGYscD0xLGQ9dC5sZW5ndGgsbT0iIixnPVtdLHY9ITAseT0iIjtmb3Iocz0wO2Q+cztzKyspaWYobT1pKHRbc10pLCJzdHJpbmciPT09bSlnW2cubGVuZ3RoXT10W3NdO2Vsc2UgaWYoImFycmF5Ij09PW0pe2lmKHU9dFtzXSx1WzJdKWZvcihuPWVbcF0sbD0wO2w8dVsyXS5sZW5ndGg7bCsrKXtpZighbi5oYXNPd25Qcm9wZXJ0eSh1WzJdW2xdKSl0aHJvdyBuZXcgRXJyb3IocigiW3NwcmludGZdIHByb3BlcnR5ICclcycgZG9lcyBub3QgZXhpc3QiLHVbMl1bbF0pKTtuPW5bdVsyXVtsXV19ZWxzZSBuPXVbMV0/ZVt1WzFdXTplW3ArK107aWYoImZ1bmN0aW9uIj09aShuKSYmKG49bigpKSxhLm5vdF9zdHJpbmcudGVzdCh1WzhdKSYmYS5ub3RfanNvbi50ZXN0KHVbOF0pJiYibnVtYmVyIiE9aShuKSYmaXNOYU4obikpdGhyb3cgbmV3IFR5cGVFcnJvcihyKCJbc3ByaW50Zl0gZXhwZWN0aW5nIG51bWJlciBidXQgZm91bmQgJXMiLGkobikpKTtzd2l0Y2goYS5udW1iZXIudGVzdCh1WzhdKSYmKHY9bj49MCksdVs4XSl7Y2FzZSJiIjpuPW4udG9TdHJpbmcoMik7YnJlYWs7Y2FzZSJjIjpuPVN0cmluZy5mcm9tQ2hhckNvZGUobik7YnJlYWs7Y2FzZSJkIjpjYXNlImkiOm49cGFyc2VJbnQobiwxMCk7YnJlYWs7Y2FzZSJqIjpuPUpTT04uc3RyaW5naWZ5KG4sbnVsbCx1WzZdP3BhcnNlSW50KHVbNl0pOjApO2JyZWFrO2Nhc2UiZSI6bj11WzddP24udG9FeHBvbmVudGlhbCh1WzddKTpuLnRvRXhwb25lbnRpYWwoKTticmVhaztjYXNlImYiOm49dVs3XT9wYXJzZUZsb2F0KG4pLnRvRml4ZWQodVs3XSk6cGFyc2VGbG9hdChuKTticmVhaztjYXNlImciOm49dVs3XT9wYXJzZUZsb2F0KG4pLnRvUHJlY2lzaW9uKHVbN10pOnBhcnNlRmxvYXQobik7YnJlYWs7Y2FzZSJvIjpuPW4udG9TdHJpbmcoOCk7YnJlYWs7Y2FzZSJzIjpuPShuPVN0cmluZyhuKSkmJnVbN10/bi5zdWJzdHJpbmcoMCx1WzddKTpuO2JyZWFrO2Nhc2UidSI6bj4+Pj0wO2JyZWFrO2Nhc2UieCI6bj1uLnRvU3RyaW5nKDE2KTticmVhaztjYXNlIlgiOm49bi50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX1hLmpzb24udGVzdCh1WzhdKT9nW2cubGVuZ3RoXT1uOighYS5udW1iZXIudGVzdCh1WzhdKXx8diYmIXVbM10/eT0iIjooeT12PyIrIjoiLSIsbj1uLnRvU3RyaW5nKCkucmVwbGFjZShhLnNpZ24sIiIpKSxoPXVbNF0/IjAiPT09dVs0XT8iMCI6dVs0XS5jaGFyQXQoMSk6IiAiLGY9dVs2XS0oeStuKS5sZW5ndGgsYz11WzZdJiZmPjA/byhoLGYpOiIiLGdbZy5sZW5ndGhdPXVbNV0/eStuK2M6IjAiPT09aD95K2MrbjpjK3krbil9cmV0dXJuIGcuam9pbigiIil9LHIuY2FjaGU9e30sci5wYXJzZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dCxyPVtdLG49W10saT0wO2U7KXtpZihudWxsIT09KHI9YS50ZXh0LmV4ZWMoZSkpKW5bbi5sZW5ndGhdPXJbMF07ZWxzZSBpZihudWxsIT09KHI9YS5tb2R1bG8uZXhlYyhlKSkpbltuLmxlbmd0aF09IiUiO2Vsc2V7aWYobnVsbD09PShyPWEucGxhY2Vob2xkZXIuZXhlYyhlKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gdW5leHBlY3RlZCBwbGFjZWhvbGRlciIpO2lmKHJbMl0pe2l8PTE7dmFyIG89W10scz1yWzJdLGw9W107aWYobnVsbD09PShsPWEua2V5LmV4ZWMocykpKXRocm93IG5ldyBTeW50YXhFcnJvcigiW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXkiKTtmb3Iob1tvLmxlbmd0aF09bFsxXTsiIiE9PShzPXMuc3Vic3RyaW5nKGxbMF0ubGVuZ3RoKSk7KWlmKG51bGwhPT0obD1hLmtleV9hY2Nlc3MuZXhlYyhzKSkpb1tvLmxlbmd0aF09bFsxXTtlbHNle2lmKG51bGw9PT0obD1hLmluZGV4X2FjY2Vzcy5leGVjKHMpKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5Iik7b1tvLmxlbmd0aF09bFsxXX1yWzJdPW99ZWxzZSBpfD0yO2lmKDM9PT1pKXRocm93IG5ldyBFcnJvcigiW3NwcmludGZdIG1peGluZyBwb3NpdGlvbmFsIGFuZCBuYW1lZCBwbGFjZWhvbGRlcnMgaXMgbm90ICh5ZXQpIHN1cHBvcnRlZCIpO25bbi5sZW5ndGhdPXJ9ZT1lLnN1YnN0cmluZyhyWzBdLmxlbmd0aCl9cmV0dXJuIG59O3ZhciBzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbj0oZXx8W10pLnNsaWNlKDApLG4uc3BsaWNlKDAsMCx0KSxyLmFwcGx5KG51bGwsbil9OyJ1bmRlZmluZWQiIT10eXBlb2Ygbj8obi5zcHJpbnRmPXIsbi52c3ByaW50Zj1zKTooZS5zcHJpbnRmPXIsZS52c3ByaW50Zj1zLCJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZCYmdChmdW5jdGlvbigpe3JldHVybntzcHJpbnRmOnIsdnNwcmludGY6c319KSl9KCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93P3RoaXM6d2luZG93KX0se31dLDIyMzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIldlYWttYXAtc2hpbTogS2V5IG11c3QgYmUgb2JqZWN0Iik7dmFyIHI9ZS52YWx1ZU9mKHQpO3JldHVybiByJiZyLmlkZW50aXR5PT09dD9yOmkoZSx0KX19dmFyIGk9dCgiLi9oaWRkZW4tc3RvcmUuanMiKTtlLmV4cG9ydHM9bn0seyIuL2hpZGRlbi1zdG9yZS5qcyI6MjI0fV0sMjI0OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXtpZGVudGl0eTplfSxuPXQudmFsdWVPZjtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZhbHVlT2YiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PWU/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cn0sd3JpdGFibGU6ITB9KSxyfWUuZXhwb3J0cz1ufSx7fV0sMjI1OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3ZhciB0PWkoKTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUscil7dmFyIG49dChlKTtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKT9uLnZhbHVlOnJ9LHNldDpmdW5jdGlvbihlLHIpe3QoZSkudmFsdWU9cn0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiJ2YWx1ZSJpbiB0KGUpfSwiZGVsZXRlIjpmdW5jdGlvbihlKXtyZXR1cm4gZGVsZXRlIHQoZSkudmFsdWV9fX12YXIgaT10KCIuL2NyZWF0ZS1zdG9yZS5qcyIpO2UuZXhwb3J0cz1ufSx7Ii4vY3JlYXRlLXN0b3JlLmpzIjoyMjN9XSwyMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLnBsb3Q9dCx0aGlzLmVuYWJsZT1bITAsITAsITEsITFdLHRoaXMud2lkdGg9WzEsMSwxLDFdLHRoaXMuY29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5jZW50ZXI9WzEvMCwxLzBdfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj1uZXcgbih0KTtyZXR1cm4gci51cGRhdGUoZSksdC5hZGRPdmVybGF5KHIpLHJ9ZS5leHBvcnRzPWk7dmFyIG89bi5wcm90b3R5cGU7by51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmVuYWJsZT0odC5lbmFibGV8fFshMCwhMCwhMSwhMV0pLnNsaWNlKCksdGhpcy53aWR0aD0odC53aWR0aHx8WzEsMSwxLDFdKS5zbGljZSgpLHRoaXMuY29sb3I9KHQuY29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pLHRoaXMuY2VudGVyPSh0LmNlbnRlcnx8WzEvMCwxLzBdKS5zbGljZSgpLHRoaXMucGxvdC5zZXRPdmVybGF5RGlydHkoKX0sby5kcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbmFibGUsZT10aGlzLndpZHRoLHI9dGhpcy5jb2xvcixuPXRoaXMuY2VudGVyLGk9dGhpcy5wbG90LG89aS5saW5lLGE9aS5kYXRhQm94LHM9aS52aWV3Qm94O2lmKG8uYmluZCgpLGFbMF08PW5bMF0mJm5bMF08PWFbMl0mJmFbMV08PW5bMV0mJm5bMV08PWFbM10pe3ZhciBsPXNbMF0rKG5bMF0tYVswXSkvKGFbMl0tYVswXSkqKHNbMl0tc1swXSksdT1zWzFdKyhuWzFdLWFbMV0pLyhhWzNdLWFbMV0pKihzWzNdLXNbMV0pO3RbMF0mJm8uZHJhd0xpbmUobCx1LHNbMF0sdSxlWzBdLHJbMF0pLHRbMV0mJm8uZHJhd0xpbmUobCx1LGwsc1sxXSxlWzFdLHJbMV0pLHRbMl0mJm8uZHJhd0xpbmUobCx1LHNbMl0sdSxlWzJdLHJbMl0pLHRbM10mJm8uZHJhd0xpbmUobCx1LGwsc1szXSxlWzNdLHJbM10pfX0sby5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5wbG90LnJlbW92ZU92ZXJsYXkodGhpcyl9fSx7fV0sMjI3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjNCB1djtcbmF0dHJpYnV0ZSB2ZWMzIGY7XG5hdHRyaWJ1dGUgdmVjMyBub3JtYWw7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbiwgaW52ZXJzZU1vZGVsO1xudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb24sIGV5ZVBvc2l0aW9uO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgbGlnaHREaXJlY3Rpb24sIGV5ZURpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbDtcblxudm9pZCBtYWluKCkge1xuICB3b3JsZENvb3JkaW5hdGUgPSB2ZWMzKHV2Lnp3LCBmLngpO1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gIGtpbGwgPSBmLnk7XG4gIHZhbHVlID0gZi56O1xuICBwbGFuZUNvb3JkaW5hdGUgPSB1di54eTtcblxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcbiAgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGV5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgc3VyZmFjZU5vcm1hbCAgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLDApICogaW52ZXJzZU1vZGVsKS54eXopO1xufVxuIixvPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uXzJfMChmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cblxuXG5mbG9hdCBiZWNrbWFublNwZWN1bGFyXzFfMShcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcykge1xuICByZXR1cm4gYmVja21hbm5EaXN0cmlidXRpb25fMl8wKGRvdChzdXJmYWNlTm9ybWFsLCBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKSksIHJvdWdobmVzcyk7XG59XG5cblxuXG51bmlmb3JtIHZlYzMgbG93ZXJCb3VuZCwgdXBwZXJCb3VuZDtcbnVuaWZvcm0gZmxvYXQgY29udG91clRpbnQ7XG51bmlmb3JtIHZlYzQgY29udG91ckNvbG9yO1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgbGlnaHREaXJlY3Rpb24sIGV5ZURpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbDtcblxudm9pZCBtYWluKCkge1xuICBpZihraWxsID4gMC4wIHx8XG4gICAgYW55KGxlc3NUaGFuKHdvcmxkQ29vcmRpbmF0ZSwgY2xpcEJvdW5kc1swXSkpIHx8IGFueShncmVhdGVyVGhhbih3b3JsZENvb3JkaW5hdGUsIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cblxuICB2ZWMzIE4gPSBub3JtYWxpemUoc3VyZmFjZU5vcm1hbCk7XG4gIHZlYzMgViA9IG5vcm1hbGl6ZShleWVEaXJlY3Rpb24pO1xuICB2ZWMzIEwgPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBiZWNrbWFublNwZWN1bGFyXzFfMShMLCBWLCBOLCByb3VnaG5lc3MpO1xuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKTtcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xuXG4gIGdsX0ZyYWdDb2xvciA9IG1peChsaXRDb2xvciwgY29udG91ckNvbG9yLCBjb250b3VyVGludCkgKiBvcGFjaXR5O1xufVxuIixhPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWM0IHV2O1xuYXR0cmlidXRlIGZsb2F0IGY7XG5cbnVuaWZvcm0gbWF0MyBwZXJtdXRhdGlvbjtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgaGVpZ2h0LCB6T2Zmc2V0O1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgbGlnaHREaXJlY3Rpb24sIGV5ZURpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGRhdGFDb29yZGluYXRlID0gcGVybXV0YXRpb24gKiB2ZWMzKHV2Lnh5LCBoZWlnaHQpO1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQoZGF0YUNvb3JkaW5hdGUsIDEuMCk7XG5cbiAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIGNsaXBQb3NpdGlvbi56ID0gY2xpcFBvc2l0aW9uLnogKyB6T2Zmc2V0O1xuXG4gIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICB2YWx1ZSA9IGY7XG4gIGtpbGwgPSAtMS4wO1xuICB3b3JsZENvb3JkaW5hdGUgPSBkYXRhQ29vcmRpbmF0ZTtcbiAgcGxhbmVDb29yZGluYXRlID0gdXYuenc7XG5cbiAgLy9Eb24ndCBkbyBsaWdodGluZyBmb3IgY29udG91cnNcbiAgc3VyZmFjZU5vcm1hbCAgID0gdmVjMygxLDAsMCk7XG4gIGV5ZURpcmVjdGlvbiAgICA9IHZlYzMoMCwxLDApO1xuICBsaWdodERpcmVjdGlvbiAgPSB2ZWMzKDAsMCwxKTtcbn1cbiIscz0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgc3VyZmFjZU5vcm1hbDtcblxudmVjMiBzcGxpdEZsb2F0KGZsb2F0IHYpIHtcbiAgZmxvYXQgdmggPSAyNTUuMCAqIHY7XG4gIGZsb2F0IHVwcGVyID0gZmxvb3IodmgpO1xuICBmbG9hdCBsb3dlciA9IGZyYWN0KHZoKTtcbiAgcmV0dXJuIHZlYzIodXBwZXIgLyAyNTUuMCwgZmxvb3IobG93ZXIgKiAxNi4wKSAvIDE2LjApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGlmKGtpbGwgPiAwLjAgfHxcbiAgICBhbnkobGVzc1RoYW4od29ybGRDb29yZGluYXRlLCBjbGlwQm91bmRzWzBdKSkgfHwgYW55KGdyZWF0ZXJUaGFuKHdvcmxkQ29vcmRpbmF0ZSwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICB2ZWMyIHV4ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueCAvIHNoYXBlLngpO1xuICB2ZWMyIHV5ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueSAvIHNoYXBlLnkpO1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgdXgueCwgdXkueCwgdXgueSArICh1eS55LzE2LjApKTtcbn1cbiI7ci5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LGksbyxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MixlfSxyLmNyZWF0ZVBpY2tTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LGkscyxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MixlfSxyLmNyZWF0ZUNvbnRvdXJTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LGEsbyxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToiZmxvYXQifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGV9LHIuY3JlYXRlUGlja0NvbnRvdXJTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LGEscyxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToiZmxvYXQifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGV9fSx7ImdsLXNoYWRlciI6MjA4fV0sMjI4OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjJ9XSwyMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpZih0IGluIGwpcmV0dXJuIGxbdF07Zm9yKHZhciBlPVtdLHI9MDt0PnI7KytyKWUucHVzaCgib3V0IixyLCJzPTAuNSooaW5wIixyLCJsLWlucCIsciwicik7Iik7Zm9yKHZhciBuPVsiYXJyYXkiXSxpPVsianVuayJdLHI9MDt0PnI7KytyKXtuLnB1c2goImFycmF5IiksaS5wdXNoKCJvdXQiK3IrInMiKTt2YXIgbz1hKHQpO29bcl09LTEsbi5wdXNoKHthcnJheTowLG9mZnNldDpvLnNsaWNlKCl9KSxvW3JdPTEsbi5wdXNoKHthcnJheTowLG9mZnNldDpvLnNsaWNlKCl9KSxpLnB1c2goImlucCIrcisibCIsImlucCIrcisiciIpfXJldHVybiBsW3RdPXMoe2FyZ3M6bixwcmU6Yyxwb3N0OmMsYm9keTp7Ym9keTplLmpvaW4oIiIpLGFyZ3M6aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6dCxsdmFsdWU6MD09PXQuaW5kZXhPZigib3V0IikscnZhbHVlOjA9PT10LmluZGV4T2YoImlucCIpLGNvdW50OiJqdW5rIiE9PXR8MH19KSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJmZFRlbXBsYXRlIit0fSl9ZnVuY3Rpb24gaSh0KXtmdW5jdGlvbiBlKGUpe2Zvcih2YXIgcj1vLWUubGVuZ3RoLG49W10saT1bXSxzPVtdLGw9MDtvPmw7KytsKWUuaW5kZXhPZihsKzEpPj0wP3MucHVzaCgiMCIpOmUuaW5kZXhPZigtKGwrMSkpPj0wP3MucHVzaCgic1siK2wrIl0tMSIpOihzLnB1c2goIi0xIiksbi5wdXNoKCIxIiksaS5wdXNoKCJzWyIrbCsiXS0yIikpO3ZhciB1PSIubG8oIituLmpvaW4oKSsiKS5oaSgiK2kuam9pbigpKyIpIjtpZigwPT09bi5sZW5ndGgmJih1PSIiKSxyPjApe2EucHVzaCgiaWYoMSIpO2Zvcih2YXIgbD0wO28+bDsrK2wpZS5pbmRleE9mKGwrMSk+PTB8fGUuaW5kZXhPZigtKGwrMSkpPj0wfHxhLnB1c2goIiYmc1siLGwsIl0+MiIpO2EucHVzaCgiKXtncmFkIixyLCIoc3JjLnBpY2soIixzLmpvaW4oKSwiKSIsdSk7Zm9yKHZhciBsPTA7bz5sOysrbCllLmluZGV4T2YobCsxKT49MHx8ZS5pbmRleE9mKC0obCsxKSk+PTB8fGEucHVzaCgiLGRzdC5waWNrKCIscy5qb2luKCksIiwiLGwsIikiLHUpO2EucHVzaCgiKTsiKX1mb3IodmFyIGw9MDtsPGUubGVuZ3RoOysrbCl7dmFyIGM9TWF0aC5hYnMoZVtsXSktMSxoPSJkc3QucGljaygiK3Muam9pbigpKyIsIitjKyIpIit1O3N3aXRjaCh0W2NdKXtjYXNlImNsYW1wIjp2YXIgZj1zLnNsaWNlKCkscD1zLnNsaWNlKCk7ZVtsXTwwP2ZbY109InNbIitjKyJdLTIiOnBbY109IjEiLDA9PT1yP2EucHVzaCgiaWYoc1siLGMsIl0+MSl7ZHN0LnNldCgiLHMuam9pbigpLCIsIixjLCIsMC41KihzcmMuZ2V0KCIsZi5qb2luKCksIiktc3JjLmdldCgiLHAuam9pbigpLCIpKSl9ZWxzZXtkc3Quc2V0KCIscy5qb2luKCksIiwiLGMsIiwwKX07Iik6YS5wdXNoKCJpZihzWyIsYywiXT4xKXtkaWZmKCIsaCwiLHNyYy5waWNrKCIsZi5qb2luKCksIikiLHUsIixzcmMucGljaygiLHAuam9pbigpLCIpIix1LCIpO31lbHNle3plcm8oIixoLCIpO307Iik7YnJlYWs7Y2FzZSJtaXJyb3IiOjA9PT1yP2EucHVzaCgiZHN0LnNldCgiLHMuam9pbigpLCIsIixjLCIsMCk7Iik6YS5wdXNoKCJ6ZXJvKCIsaCwiKTsiKTticmVhaztjYXNlIndyYXAiOnZhciBkPXMuc2xpY2UoKSxtPXMuc2xpY2UoKTtlW2xdPDA/KGRbY109InNbIitjKyJdLTIiLG1bY109IjAiKTooZFtjXT0ic1siK2MrIl0tMSIsbVtjXT0iMSIpLDA9PT1yP2EucHVzaCgiaWYoc1siLGMsIl0+Mil7ZHN0LnNldCgiLHMuam9pbigpLCIsIixjLCIsMC41KihzcmMuZ2V0KCIsZC5qb2luKCksIiktc3JjLmdldCgiLG0uam9pbigpLCIpKSl9ZWxzZXtkc3Quc2V0KCIscy5qb2luKCksIiwiLGMsIiwwKX07Iik6YS5wdXNoKCJpZihzWyIsYywiXT4yKXtkaWZmKCIsaCwiLHNyYy5waWNrKCIsZC5qb2luKCksIikiLHUsIixzcmMucGljaygiLG0uam9pbigpLCIpIix1LCIpO31lbHNle3plcm8oIixoLCIpO307Iik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IEludmFsaWQgYm91bmRhcnkgY29uZGl0aW9uIil9fXI+MCYmYS5wdXNoKCJ9OyIpfXZhciByPXQuam9pbigpLGk9dVtyXTtpZihpKXJldHVybiBpO2Zvcih2YXIgbz10Lmxlbmd0aCxhPVsiZnVuY3Rpb24gZ3JhZGllbnQoZHN0LHNyYyl7dmFyIHM9c3JjLnNoYXBlLnNsaWNlKCk7Il0scz0wOzE8PG8+czsrK3Mpe2Zvcih2YXIgYz1bXSxwPTA7bz5wOysrcClzJjE8PHAmJmMucHVzaChwKzEpO2Zvcih2YXIgZD0wO2Q8MTw8Yy5sZW5ndGg7KytkKXtmb3IodmFyIG09Yy5zbGljZSgpLHA9MDtwPGMubGVuZ3RoOysrcClkJjE8PHAmJihtW3BdPS1tW3BdKTtlKG0pfX1hLnB1c2goInJldHVybiBkc3Q7fTtyZXR1cm4gZ3JhZGllbnQiKTtmb3IodmFyIGc9WyJkaWZmIiwiemVybyJdLHY9W2gsZl0scz0xO28+PXM7KytzKWcucHVzaCgiZ3JhZCIrcyksdi5wdXNoKG4ocykpO2cucHVzaChhLmpvaW4oIiIpKTt2YXIgeT1GdW5jdGlvbi5hcHBseSh2b2lkIDAsZyksaT15LmFwcGx5KHZvaWQgMCx2KTtyZXR1cm4gbFtyXT1pLGl9ZnVuY3Rpb24gbyh0LGUscil7aWYoQXJyYXkuaXNBcnJheShyKSl7aWYoci5sZW5ndGghPT1lLmRpbWVuc2lvbil0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IGludmFsaWQgYm91bmRhcnkgY29uZGl0aW9ucyIpfWVsc2Ugcj0ic3RyaW5nIj09dHlwZW9mIHI/YShlLmRpbWVuc2lvbixyKTphKGUuZGltZW5zaW9uLCJjbGFtcCIpO2lmKHQuZGltZW5zaW9uIT09ZS5kaW1lbnNpb24rMSl0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IG91dHB1dCBkaW1lbnNpb24gbXVzdCBiZSArMSBpbnB1dCBkaW1lbnNpb24iKTtpZih0LnNoYXBlW2UuZGltZW5zaW9uXSE9PWUuZGltZW5zaW9uKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogb3V0cHV0IHNoYXBlIG11c3QgbWF0Y2ggaW5wdXQgc2hhcGUiKTtmb3IodmFyIG49MDtuPGUuZGltZW5zaW9uOysrbilpZih0LnNoYXBlW25dIT09ZS5zaGFwZVtuXSl0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IHNoYXBlIG1pc21hdGNoIik7aWYoMD09PWUuc2l6ZSlyZXR1cm4gdDtpZihlLmRpbWVuc2lvbjw9MClyZXR1cm4gdC5zZXQoMCksdDt2YXIgbz1pKHIpO3JldHVybiBvKHQsZSl9ZS5leHBvcnRzPW87dmFyIGE9dCgiZHVwIikscz10KCJjd2lzZS1jb21waWxlciIpLGw9e30sdT17fSxjPXtib2R5OiIiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxoPXMoe2FyZ3M6WyJhcnJheSIsImFycmF5IiwiYXJyYXkiXSxwcmU6Yyxwb3N0OmMsYm9keTp7YXJnczpbe25hbWU6Im91dCIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZToibGVmdCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToicmlnaHQiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6Im91dD0wLjUqKGxlZnQtcmlnaHQpIix0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJjZGlmZiJ9KSxmPXMoe2FyZ3M6WyJhcnJheSJdLHByZTpjLHBvc3Q6Yyxib2R5OnthcmdzOlt7bmFtZToib3V0IixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9XSxib2R5OiJvdXQ9MCIsdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZToiemVybyJ9KX0seyJjd2lzZS1jb21waWxlciI6MTIwLGR1cDoxMjZ9XSwyMzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheSIpLGk9dCgiLi9kb0NvbnZlcnQuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbz10LGE9MTtvIGluc3RhbmNlb2YgQXJyYXk7KXIucHVzaChvLmxlbmd0aCksYSo9by5sZW5ndGgsbz1vWzBdO3JldHVybiAwPT09ci5sZW5ndGg/bigpOihlfHwoZT1uKG5ldyBGbG9hdDY0QXJyYXkoYSkscikpLGkoZSx0KSxlKX19LHsiLi9kb0NvbnZlcnQuanMiOjIzMSxuZGFycmF5OjQ1Nn1dLDIzMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCJjd2lzZS1jb21waWxlciIpKHthcmdzOlsiYXJyYXkiLCJzY2FsYXIiLCJpbmRleCJdLHByZTp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7XG52YXIgX2lubGluZV8xX3Y9X2lubGluZV8xX2FyZzFfLF9pbmxpbmVfMV9pXG5mb3IoX2lubGluZV8xX2k9MDtfaW5saW5lXzFfaTxfaW5saW5lXzFfYXJnMl8ubGVuZ3RoLTE7KytfaW5saW5lXzFfaSkge1xuX2lubGluZV8xX3Y9X2lubGluZV8xX3ZbX2lubGluZV8xX2FyZzJfW19pbmxpbmVfMV9pXV1cbn1cbl9pbmxpbmVfMV9hcmcwXz1faW5saW5lXzFfdltfaW5saW5lXzFfYXJnMl9bX2lubGluZV8xX2FyZzJfLmxlbmd0aC0xXV1cbn0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjR9XSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6WyJfaW5saW5lXzFfaSIsIl9pbmxpbmVfMV92Il19LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZnVuY05hbWU6ImNvbnZlcnQiLGJsb2NrU2l6ZTo2NH0pfSx7ImN3aXNlLWNvbXBpbGVyIjoxMjAKfV0sMjMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt0aGlzLnBvc2l0aW9uPXQsdGhpcy5pbmRleD1lLHRoaXMudXY9cix0aGlzLmxldmVsPW4sdGhpcy5kYXRhQ29vcmRpbmF0ZT1pfWZ1bmN0aW9uIGkodCl7dmFyIGU9eChbeSh7Y29sb3JtYXA6dCxuc2hhZGVzOkQsZm9ybWF0OiJyZ2JhIn0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXSx0WzFdLHRbMl0sMjU1KnRbM11dfSldKTtyZXR1cm4gYi5kaXZzZXEoZSwyNTUpLGV9ZnVuY3Rpb24gbyh0LGUscixpLG8sYSxzLGwsdSxjLGgsZixwLGQpe3RoaXMuZ2w9dCx0aGlzLnNoYXBlPWUsdGhpcy5ib3VuZHM9cix0aGlzLmludGVuc2l0eUJvdW5kcz1bXSx0aGlzLl9zaGFkZXI9aSx0aGlzLl9waWNrU2hhZGVyPW8sdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlcj1hLHRoaXMuX3Zhbz1zLHRoaXMuX2NvbG9yTWFwPWwsdGhpcy5fY29udG91clNoYWRlcj11LHRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyPWMsdGhpcy5fY29udG91ckJ1ZmZlcj1oLHRoaXMuX2NvbnRvdXJWQU89Zix0aGlzLl9jb250b3VyT2Zmc2V0cz1bW10sW10sW11dLHRoaXMuX2NvbnRvdXJDb3VudHM9W1tdLFtdLFtdXSx0aGlzLl92ZXJ0ZXhDb3VudD0wLHRoaXMuX3BpY2tSZXN1bHQ9bmV3IG4oWzAsMCwwXSxbMCwwXSxbMCwwXSxbMCwwLDBdLFswLDAsMF0pLHRoaXMuX2R5bmFtaWNCdWZmZXI9cCx0aGlzLl9keW5hbWljVkFPPWQsdGhpcy5fZHluYW1pY09mZnNldHM9WzAsMCwwXSx0aGlzLl9keW5hbWljQ291bnRzPVswLDAsMF0sdGhpcy5jb250b3VyV2lkdGg9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1sxXSxbMV0sWzFdXSx0aGlzLmNvbnRvdXJUaW50PVswLDAsMF0sdGhpcy5jb250b3VyQ29sb3I9W1suNSwuNSwuNSwxXSxbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSx0aGlzLnNob3dDb250b3VyPSEwLHRoaXMuc2hvd1N1cmZhY2U9ITAsdGhpcy5lbmFibGVIaWdobGlnaHQ9WyEwLCEwLCEwXSx0aGlzLmhpZ2hsaWdodENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5oaWdobGlnaHRUaW50PVsxLDEsMV0sdGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdLHRoaXMuZW5hYmxlRHluYW1pYz1bITAsITAsITBdLHRoaXMuZHluYW1pY0xldmVsPVtOYU4sTmFOLE5hTl0sdGhpcy5keW5hbWljQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmR5bmFtaWNUaW50PVsxLDEsMV0sdGhpcy5keW5hbWljV2lkdGg9WzEsMSwxXSx0aGlzLmF4ZXNCb3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0oMS8wKSwtKDEvMCksLSgxLzApXV0sdGhpcy5zdXJmYWNlUHJvamVjdD1bITEsITEsITFdLHRoaXMuY29udG91clByb2plY3Q9W1shMSwhMSwhMV0sWyExLCExLCExXSxbITEsITEsITFdXSx0aGlzLmNvbG9yQm91bmRzPVshMSwhMV0sdGhpcy5fZmllbGQ9W18odi5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSksXyh2Lm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKSxfKHYubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pXSx0aGlzLnBpY2tJZD0xLHRoaXMuY2xpcEJvdW5kcz1bWy0oMS8wKSwtKDEvMCksLSgxLzApXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnNuYXBUb0RhdGE9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy5saWdodFBvc2l0aW9uPVsxMCwxZTQsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLmRpcnR5PSEwfWZ1bmN0aW9uIGEodCxlKXt2YXIgcixuLGksbz1lLmF4ZXMmJmUuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXN8fEYsYT1lLnNob3dTdXJmYWNlLHM9ZS5zaG93Q29udG91cjtmb3Iocj0wOzM+cjsrK3IpZm9yKGE9YXx8ZS5zdXJmYWNlUHJvamVjdFtyXSxuPTA7Mz5uOysrbilzPXN8fGUuY29udG91clByb2plY3Rbcl1bbl07Zm9yKHI9MDszPnI7KytyKXt2YXIgbD1OLnByb2plY3Rpb25zW3JdO2ZvcihuPTA7MTY+bjsrK24pbFtuXT0wO2ZvcihuPTA7ND5uOysrbilsWzUqbl09MTtsWzUqcl09MCxsWzEyK3JdPWUuYXhlc0JvdW5kc1srKG9bcl0+MCldW3JdLE0obCx0Lm1vZGVsLGwpO3ZhciB1PU4uY2xpcEJvdW5kc1tyXTtmb3IoaT0wOzI+aTsrK2kpZm9yKG49MDszPm47KytuKXVbaV1bbl09dC5jbGlwQm91bmRzW2ldW25dO3VbMF1bcl09LTFlOCx1WzFdW3JdPTFlOH1yZXR1cm4gTi5zaG93U3VyZmFjZT1hLE4uc2hvd0NvbnRvdXI9cyxOfWZ1bmN0aW9uIHModCxlKXt0PXR8fHt9O3ZhciByPXRoaXMuZ2w7ci5kaXNhYmxlKHIuQ1VMTF9GQUNFKSx0aGlzLl9jb2xvck1hcC5iaW5kKDApO3ZhciBuPUI7bi5tb2RlbD10Lm1vZGVsfHxDLG4udmlldz10LnZpZXd8fEMsbi5wcm9qZWN0aW9uPXQucHJvamVjdGlvbnx8QyxuLmxvd2VyQm91bmQ9W3RoaXMuYm91bmRzWzBdWzBdLHRoaXMuYm91bmRzWzBdWzFdLHRoaXMuY29sb3JCb3VuZHNbMF18fHRoaXMuYm91bmRzWzBdWzJdXSxuLnVwcGVyQm91bmQ9W3RoaXMuYm91bmRzWzFdWzBdLHRoaXMuYm91bmRzWzFdWzFdLHRoaXMuY29sb3JCb3VuZHNbMV18fHRoaXMuYm91bmRzWzFdWzJdXSxuLmNvbnRvdXJDb2xvcj10aGlzLmNvbnRvdXJDb2xvclswXSxuLmludmVyc2VNb2RlbD1rKG4uaW52ZXJzZU1vZGVsLG4ubW9kZWwpO2Zvcih2YXIgaT0wOzI+aTsrK2kpZm9yKHZhciBvPW4uY2xpcEJvdW5kc1tpXSxzPTA7Mz5zOysrcylvW3NdPU1hdGgubWluKE1hdGgubWF4KHRoaXMuY2xpcEJvdW5kc1tpXVtzXSwtMWU4KSwxZTgpO24ua2FtYmllbnQ9dGhpcy5hbWJpZW50TGlnaHQsbi5rZGlmZnVzZT10aGlzLmRpZmZ1c2VMaWdodCxuLmtzcGVjdWxhcj10aGlzLnNwZWN1bGFyTGlnaHQsbi5yb3VnaG5lc3M9dGhpcy5yb3VnaG5lc3Msbi5mcmVzbmVsPXRoaXMuZnJlc25lbCxuLm9wYWNpdHk9dGhpcy5vcGFjaXR5LG4uaGVpZ2h0PTAsbi5wZXJtdXRhdGlvbj1WO3ZhciBsPVU7Zm9yKE0obCxuLnZpZXcsbi5tb2RlbCksTShsLG4ucHJvamVjdGlvbixsKSxrKGwsbCksaT0wOzM+aTsrK2kpbi5leWVQb3NpdGlvbltpXT1sWzEyK2ldL2xbMTVdO3ZhciB1PWxbMTVdO2ZvcihpPTA7Mz5pOysraSl1Kz10aGlzLmxpZ2h0UG9zaXRpb25baV0qbFs0KmkrM107Zm9yKGk9MDszPmk7KytpKXt2YXIgYz1sWzEyK2ldO2ZvcihzPTA7Mz5zOysrcyljKz1sWzQqcytpXSp0aGlzLmxpZ2h0UG9zaXRpb25bc107bi5saWdodFBvc2l0aW9uW2ldPWMvdX12YXIgaD1hKG4sdGhpcyk7aWYoaC5zaG93U3VyZmFjZSYmZT09PXRoaXMub3BhY2l0eTwxKXtmb3IodGhpcy5fc2hhZGVyLmJpbmQoKSx0aGlzLl9zaGFkZXIudW5pZm9ybXM9bix0aGlzLl92YW8uYmluZCgpLHRoaXMuc2hvd1N1cmZhY2UmJnRoaXMuX3ZlcnRleENvdW50JiZ0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksaT0wOzM+aTsrK2kpdGhpcy5zdXJmYWNlUHJvamVjdFtpXSYmdGhpcy52ZXJ0ZXhDb3VudCYmKHRoaXMuX3NoYWRlci51bmlmb3Jtcy5tb2RlbD1oLnByb2plY3Rpb25zW2ldLH
View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment