Skip to content

Instantly share code, notes, and snippets.

@du2x
Created January 27, 2020 22:55
Show Gist options
  • Save du2x/5e1daf94db39d0e8b65a01d6e96a2c04 to your computer and use it in GitHub Desktop.
Save du2x/5e1daf94db39d0e8b65a01d6e96a2c04 to your computer and use it in GitHub Desktop.
Created on Cognitive Class Labs
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Neighbordhood Venues Categories Pattern vs Neighborhood Prevailing Social Classes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Introduction \n",
"\n",
"For an entrepreneur, choosing the location of a new establishment within a city can be a very important and also very difficult task. For this, it is advisable to have as much information as possible from each neighborhood.\n",
"\n",
"Similarly, the city government also needs as much information as possible from each neighborhood to manage them properly.\n",
"\n",
"Of such information about neighborhoods, one that stands out is the majority social class. The needs and opportunities of a neighborhood are often associated with this information.\n",
"\n",
"Here, we will seek to develop a model capable of predicting the prevailing social class of each neighborhood, based on the categories of establishments there. This model will be trained with data from the set of reports of establishments in each neighborhood, retrievable from the Foursquare API and with the data a report from UFMG (University of Minas Gerais) that informs the majority social class of each neighborhood. \n",
"\n",
"If the model works well, we may use it to find out a valuable information of neighborhood on cities similar to Belo Horizonte that hasn't a report about their neighborhood prevailing social class."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Data acquisition and cleaning\n",
"\n",
"### 2.1 Data Sources\n",
"\n",
"The report about the Belo Horizonte neighborhood prevailing social classes is published in PDF format. Fortunately, it is very easy to copy the data contents and past into a csv file. The resulting columns are \"Neighborhood\" and \"Class\". Let's see the head of this data set."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Neighborhood</th>\n",
" <th>Class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>AARAO REIS</td>\n",
" <td>low</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>ALTO DOS PINHEIROS</td>\n",
" <td>low</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>ALTO PARAISO</td>\n",
" <td>low</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>ALVARO CAMARGOS</td>\n",
" <td>low</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>ALVORADA</td>\n",
" <td>low</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Neighborhood Class\n",
"0 AARAO REIS low\n",
"1 ALTO DOS PINHEIROS low\n",
"2 ALTO PARAISO low\n",
"3 ALVARO CAMARGOS low\n",
"4 ALVORADA low"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"bairros = pd.read_csv('bh_bairros_classes.csv') # it was previously saved\n",
"bairros.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will retrieve the Neighborhood venues with Foursquare API, by calling the \"query\" endpoint for each Neighborhood, witch requires localization data. The head of resulting dataset after the geopy use is as follows."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(245, 4)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Neighborhood</th>\n",
" <th>Class</th>\n",
" <th>Latitude</th>\n",
" <th>Longitude</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>AARAO REIS</td>\n",
" <td>low</td>\n",
" <td>-19.847221</td>\n",
" <td>-43.919508</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>ALTO DOS PINHEIROS</td>\n",
" <td>low</td>\n",
" <td>-19.932567</td>\n",
" <td>-44.004875</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>ALVARO CAMARGOS</td>\n",
" <td>low</td>\n",
" <td>-19.916339</td>\n",
" <td>-44.007857</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>ALVORADA</td>\n",
" <td>low</td>\n",
" <td>-30.031715</td>\n",
" <td>-51.049711</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>ANA LUCIA</td>\n",
" <td>low</td>\n",
" <td>-19.887783</td>\n",
" <td>-43.906368</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Neighborhood Class Latitude Longitude\n",
"0 AARAO REIS low -19.847221 -43.919508\n",
"1 ALTO DOS PINHEIROS low -19.932567 -44.004875\n",
"2 ALVARO CAMARGOS low -19.916339 -44.007857\n",
"3 ALVORADA low -30.031715 -51.049711\n",
"4 ANA LUCIA low -19.887783 -43.906368"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bairros = pd.read_csv('bairros.csv') # it was previously saved\n",
"\n",
"print(bairros.shape)\n",
"bairros.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we have the Latitude and Longitude for each neighborhood, so we are ready to make Foursquare API calls on \"query\" endpoint.\n",
"\n",
"Actually, for each neighborhood we made 4 API calls, one for each category: \"food\", \"stores and services\" and \"professional\", and one for all categories combined.\n",
"\n",
"So there will be 4 resulting datasets, one for each category, plus one for all categories combined, and it will look like this:"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Neighborhood</th>\n",
" <th>Neighborhood Latitude</th>\n",
" <th>Neighborhood Longitude</th>\n",
" <th>ID</th>\n",
" <th>Venue</th>\n",
" <th>Venue Latitude</th>\n",
" <th>Venue Longitude</th>\n",
" <th>Venue Category</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>AARAO REIS</td>\n",
" <td>-19.847221</td>\n",
" <td>-43.919508</td>\n",
" <td>4eb1d86e77c814d925751c99</td>\n",
" <td>Chapa Mágica</td>\n",
" <td>-19.845448</td>\n",
" <td>-43.921754</td>\n",
" <td>BBQ Joint</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>AARAO REIS</td>\n",
" <td>-19.847221</td>\n",
" <td>-43.919508</td>\n",
" <td>5bf1cc4275eee40039f91adf</td>\n",
" <td>Burger King</td>\n",
" <td>-19.846823</td>\n",
" <td>-43.919360</td>\n",
" <td>Fast Food Restaurant</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>AARAO REIS</td>\n",
" <td>-19.847221</td>\n",
" <td>-43.919508</td>\n",
" <td>4daba4b84b22f071ead33715</td>\n",
" <td>Celo Burguer</td>\n",
" <td>-19.847524</td>\n",
" <td>-43.919394</td>\n",
" <td>Burger Joint</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>AARAO REIS</td>\n",
" <td>-19.847221</td>\n",
" <td>-43.919508</td>\n",
" <td>516dc84d498e618c69124919</td>\n",
" <td>bobs</td>\n",
" <td>-19.846710</td>\n",
" <td>-43.917326</td>\n",
" <td>Burger Joint</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>AARAO REIS</td>\n",
" <td>-19.847221</td>\n",
" <td>-43.919508</td>\n",
" <td>539991af498ea6a823188d29</td>\n",
" <td>Padaria Vila Verde</td>\n",
" <td>-19.847362</td>\n",
" <td>-43.921778</td>\n",
" <td>Bakery</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Neighborhood Neighborhood Latitude Neighborhood Longitude \\\n",
"0 AARAO REIS -19.847221 -43.919508 \n",
"1 AARAO REIS -19.847221 -43.919508 \n",
"2 AARAO REIS -19.847221 -43.919508 \n",
"3 AARAO REIS -19.847221 -43.919508 \n",
"4 AARAO REIS -19.847221 -43.919508 \n",
"\n",
" ID Venue Venue Latitude \\\n",
"0 4eb1d86e77c814d925751c99 Chapa Mágica -19.845448 \n",
"1 5bf1cc4275eee40039f91adf Burger King -19.846823 \n",
"2 4daba4b84b22f071ead33715 Celo Burguer -19.847524 \n",
"3 516dc84d498e618c69124919 bobs -19.846710 \n",
"4 539991af498ea6a823188d29 Padaria Vila Verde -19.847362 \n",
"\n",
" Venue Longitude Venue Category \n",
"0 -43.921754 BBQ Joint \n",
"1 -43.919360 Fast Food Restaurant \n",
"2 -43.919394 Burger Joint \n",
"3 -43.917326 Burger Joint \n",
"4 -43.921778 Bakery "
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bh_food_venues = pd.read_csv('bh_food_venues.csv') # dataset of food category\n",
"bh_pro_venues = pd.read_csv('bh_pro_venues.csv') # dataset of food category\n",
"bh_stores_venues = pd.read_csv('bh_stores_venues.csv') # dataset of food category\n",
"bh_food_venues.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.2 Data Cleaning"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The geopy library sometimes can't be accurate, so we had to remove the Neighborhoods that couldn't have its localization data accurately retrieved. The identification of such cases was map manually with a map vizualization support."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbLTE5LjkyMjczMTgsLTQzLjk0NTA5NDhdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyczogW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciB0aWxlX2xheWVyXzM4YmVlMWQyOGEwYjQyYmU5ODcxYmRjMzQ2ZTE3NjNhID0gTC50aWxlTGF5ZXIoCiAgICAgICAgICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgICAgICAgICAgewogICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICJtYXhab29tIjogMTgsCiAgIm1pblpvb20iOiAxLAogICJub1dyYXAiOiBmYWxzZSwKICAic3ViZG9tYWlucyI6ICJhYmMiCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNzUwY2VjNDMzYzY0OTg4OTc4YTBkYWQzYzhlZWM5NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NDcyMjExLC00My45MTk1MDgyMDExNTI2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNDc5ZTdhYjk4Yzk0YjBmYjNjMTc3ZDFmMjAwMGNhNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZjcxNDQzOTRmZjI0OGYwYmNjMTA5ODk0OTU5MWQ5NyA9ICQoJzxkaXYgaWQ9Imh0bWxfYmY3MTQ0Mzk0ZmYyNDhmMGJjYzEwOTg5NDk1OTFkOTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFBUkFPIFJFSVM6ICgtMTkuODQ3MjIxMSwgLTQzLjkxOTUwODIwMTE1MjYzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDQ3OWU3YWI5OGM5NGIwZmIzYzE3N2QxZjIwMDBjYTQuc2V0Q29udGVudChodG1sX2JmNzE0NDM5NGZmMjQ4ZjBiY2MxMDk4OTQ5NTkxZDk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I3NTBjZWM0MzNjNjQ5ODg5NzhhMGRhZDNjOGVlYzk2LmJpbmRQb3B1cChwb3B1cF9kNDc5ZTdhYjk4Yzk0YjBmYjNjMTc3ZDFmMjAwMGNhNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNzQ3ZTgxODE3MzM0ZTc1OGVhNzViNmE1ZDc1Yzk3MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzI1Njc0LC00NC4wMDQ4NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWQyNzg0YTBkMjljNGJlMWFiOTc3YTRmMGRkNjI4ZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODVlNzhiMTRjNjE4NDQ4MzlhZWM1MWNkY2Q2MDA1ZjEgPSAkKCc8ZGl2IGlkPSJodG1sXzg1ZTc4YjE0YzYxODQ0ODM5YWVjNTFjZGNkNjAwNWYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BTFRPIERPUyBQSU5IRUlST1M6ICgtMTkuOTMyNTY3NCwgLTQ0LjAwNDg3NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlkMjc4NGEwZDI5YzRiZTFhYjk3N2E0ZjBkZDYyOGRkLnNldENvbnRlbnQoaHRtbF84NWU3OGIxNGM2MTg0NDgzOWFlYzUxY2RjZDYwMDVmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNzQ3ZTgxODE3MzM0ZTc1OGVhNzViNmE1ZDc1Yzk3My5iaW5kUG9wdXAocG9wdXBfOWQyNzg0YTBkMjljNGJlMWFiOTc3YTRmMGRkNjI4ZGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzdiY2Y2ZjFmMDA4NDllZjgyYTliZTY2Nzc0ZDdkZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTE2MzM4NywtNDQuMDA3ODU2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNzEyYTFhYjYyMTY0ZjI5ODgzMzFjZDc2ZWU0OTZlNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOTIwNjA0ZDk3M2I0M2FlOTAyYmQ2ZDRmOGQwNTRkMyA9ICQoJzxkaXYgaWQ9Imh0bWxfYTkyMDYwNGQ5NzNiNDNhZTkwMmJkNmQ0ZjhkMDU0ZDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFMVkFSTyBDQU1BUkdPUzogKC0xOS45MTYzMzg3LCAtNDQuMDA3ODU2Nyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI3MTJhMWFiNjIxNjRmMjk4ODMzMWNkNzZlZTQ5NmU2LnNldENvbnRlbnQoaHRtbF9hOTIwNjA0ZDk3M2I0M2FlOTAyYmQ2ZDRmOGQwNTRkMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83N2JjZjZmMWYwMDg0OWVmODJhOWJlNjY3NzRkN2RkOC5iaW5kUG9wdXAocG9wdXBfMjcxMmExYWI2MjE2NGYyOTg4MzMxY2Q3NmVlNDk2ZTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODU0YWIyNTE0M2FjNDQzMjllZTI2NTliYWFmMmU1MDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMzAuMDMxNzE1LC01MS4wNDk3MTEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBiMWM2ZTdhYTk5OTQ3Y2E4NWRhMTQ0NjkxYmZlM2I2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q3YTk3NGE5ZWZhZjRiMjA4OWM1MTY3OWUxYmMyNjkwID0gJCgnPGRpdiBpZD0iaHRtbF9kN2E5NzRhOWVmYWY0YjIwODljNTE2NzllMWJjMjY5MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QUxWT1JBREE6ICgtMzAuMDMxNzE1LCAtNTEuMDQ5NzExMik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiMWM2ZTdhYTk5OTQ3Y2E4NWRhMTQ0NjkxYmZlM2I2LnNldENvbnRlbnQoaHRtbF9kN2E5NzRhOWVmYWY0YjIwODljNTE2NzllMWJjMjY5MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NTRhYjI1MTQzYWM0NDMyOWVlMjY1OWJhYWYyZTUwMS5iaW5kUG9wdXAocG9wdXBfMGIxYzZlN2FhOTk5NDdjYTg1ZGExNDQ2OTFiZmUzYjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDMxNTRhMmE0Mzc2NDQ4YWE5ODUwYWJhMjQyYTljMGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODg3NzgyNSwtNDMuOTA2MzY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UyZjg0OGRlZDRkMDQ1MzU5ZDdkNTgzOTQ0NDIxMjVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjMDJiMDNlM2E4MzQxNDY5OTBhNjA3Y2NmZTI0YWQwID0gJCgnPGRpdiBpZD0iaHRtbF9hYzAyYjAzZTNhODM0MTQ2OTkwYTYwN2NjZmUyNGFkMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QU5BIExVQ0lBOiAoLTE5Ljg4Nzc4MjUsIC00My45MDYzNjgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMmY4NDhkZWQ0ZDA0NTM1OWQ3ZDU4Mzk0NDQyMTI1ZS5zZXRDb250ZW50KGh0bWxfYWMwMmIwM2UzYTgzNDE0Njk5MGE2MDdjY2ZlMjRhZDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDMxNTRhMmE0Mzc2NDQ4YWE5ODUwYWJhMjQyYTljMGUuYmluZFBvcHVwKHBvcHVwX2UyZjg0OGRlZDRkMDQ1MzU5ZDdkNTgzOTQ0NDIxMjVlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBlYzFmYjFkMmJkMzRiZjdhOWZiZDY4MjY3NjRlZWI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5NDQwMjc0OTk5OTk5OCwtNDMuOTU2NTE2MTkyMzk3Mjc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y3MjI2MzFlZGNmNjQ0OGI4NjY4YjFlYzQwOGQyOWFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1ZGQxZjZlMjMyNTRmMzNhN2E3MGViYjRhOWE1M2I4ID0gJCgnPGRpdiBpZD0iaHRtbF9lNWRkMWY2ZTIzMjU0ZjMzYTdhNzBlYmI0YTlhNTNiOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVBBUkVDSURBOiAoLTE5Ljg5NDQwMjc0OTk5OTk5OCwgLTQzLjk1NjUxNjE5MjM5NzI3NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y3MjI2MzFlZGNmNjQ0OGI4NjY4YjFlYzQwOGQyOWFmLnNldENvbnRlbnQoaHRtbF9lNWRkMWY2ZTIzMjU0ZjMzYTdhNzBlYmI0YTlhNTNiOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZWMxZmIxZDJiZDM0YmY3YTlmYmQ2ODI2NzY0ZWViOS5iaW5kUG9wdXAocG9wdXBfZjcyMjYzMWVkY2Y2NDQ4Yjg2NjhiMWVjNDA4ZDI5YWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2RjOGY5NjFjZjdjNDUwNGIzYWViNzcwZDM4ZDU3N2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODkwNzkyOSwtNDMuOTYxNjU0OTcwOTkwNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTQ1YmY0ZjVhOWZlNGU2Mzk4OTg0ZDIwMDhiYTI0NmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWVhN2Y1MmJmYzczNGQzNjhkM2FkNWI4MTg0N2M3ZTUgPSAkKCc8ZGl2IGlkPSJodG1sXzllYTdmNTJiZmM3MzRkMzY4ZDNhZDViODE4NDdjN2U1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BUEFSRUNJREEgN0EgU0VDQU86ICgtMTkuODkwNzkyOSwgLTQzLjk2MTY1NDk3MDk5MDY5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTQ1YmY0ZjVhOWZlNGU2Mzk4OTg0ZDIwMDhiYTI0NmEuc2V0Q29udGVudChodG1sXzllYTdmNTJiZmM3MzRkMzY4ZDNhZDViODE4NDdjN2U1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NkYzhmOTYxY2Y3YzQ1MDRiM2FlYjc3MGQzOGQ1NzdlLmJpbmRQb3B1cChwb3B1cF8xNDViZjRmNWE5ZmU0ZTYzOTg5ODRkMjAwOGJhMjQ2YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NjhmZjBjMGE0Yzc0YzI3Yjc3YWM2NDUyMGMzNmIxMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NTkwMTE5NSwtNDMuOTk5MDcyMDIyNjU4MzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDBlNzdjMjJkNTY5NDg4Y2EwMzJhYzg4ZTZhMjc1YzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDI4YmQ5MDYzMzQzNGJhNmFhNmZjMTk2NGRkYzFiZTYgPSAkKCc8ZGl2IGlkPSJodG1sXzQyOGJkOTA2MzM0MzRiYTZhYTZmYzE5NjRkZGMxYmU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQUlSUk8gREFTIElORFVTVFJJQVM6ICgtMTkuOTU5MDExOTUsIC00My45OTkwNzIwMjI2NTgzMSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQwZTc3YzIyZDU2OTQ4OGNhMDMyYWM4OGU2YTI3NWMzLnNldENvbnRlbnQoaHRtbF80MjhiZDkwNjMzNDM0YmE2YWE2ZmMxOTY0ZGRjMWJlNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NjhmZjBjMGE0Yzc0YzI3Yjc3YWM2NDUyMGMzNmIxMC5iaW5kUG9wdXAocG9wdXBfNDBlNzdjMjJkNTY5NDg4Y2EwMzJhYzg4ZTZhMjc1YzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjkwZTdmNTBjZTJlNDg3MGFiMWI1ZDA2YWI3MzE2NjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTM0MTc3NTUsLTQzLjg5MjM1MTQxMjEzNTM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkZmM5NDFjZDE2MjRhYTViYzdkYzBkMjYwNzY1MWU5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhlNTQyNTZkNzgzNDRlOGRiYzEwZTQ2NTlhYjdmYTc5ID0gJCgnPGRpdiBpZD0iaHRtbF84ZTU0MjU2ZDc4MzQ0ZThkYmMxMGU0NjU5YWI3ZmE3OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFMRUlBOiAoLTE5LjkzNDE3NzU1LCAtNDMuODkyMzUxNDEyMTM1MzUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZGZjOTQxY2QxNjI0YWE1YmM3ZGMwZDI2MDc2NTFlOS5zZXRDb250ZW50KGh0bWxfOGU1NDI1NmQ3ODM0NGU4ZGJjMTBlNDY1OWFiN2ZhNzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjkwZTdmNTBjZTJlNDg3MGFiMWI1ZDA2YWI3MzE2NjYuYmluZFBvcHVwKHBvcHVwXzJkZmM5NDFjZDE2MjRhYTViYzdkYzBkMjYwNzY1MWU5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JkMDlkODVlMzUyNTRkMThhOWFiZWViMDY1YjQ0MGVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk3NzczNzE1MDAwMDAwMywtNDQuMDE5MjA1MjUzMjIzNDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODZhNzI5ZWRmYjFjNDIwZmFmMjk3ZDk4OTZkM2U4ZjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTEzMDZmOTQxNGZlNDYxZWJlNTQ1ZjhiYWM2MjUzM2EgPSAkKCc8ZGl2IGlkPSJodG1sX2UxMzA2Zjk0MTRmZTQ2MWViZTU0NWY4YmFjNjI1MzNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQVJSRUlSTyBlIEJBUlJFSVJPIERFOiAoLTE5Ljk3NzczNzE1MDAwMDAwMywgLTQ0LjAxOTIwNTI1MzIyMzQyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODZhNzI5ZWRmYjFjNDIwZmFmMjk3ZDk4OTZkM2U4ZjQuc2V0Q29udGVudChodG1sX2UxMzA2Zjk0MTRmZTQ2MWViZTU0NWY4YmFjNjI1MzNhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JkMDlkODVlMzUyNTRkMThhOWFiZWViMDY1YjQ0MGVlLmJpbmRQb3B1cChwb3B1cF84NmE3MjllZGZiMWM0MjBmYWYyOTdkOTg5NmQzZThmNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNzMyMjljZDZkZjM0OTU1ODM1Mzk3Y2M0MDg1NTY5MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS4zNzc4OTIsLTQzLjU3MDAxNDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDRkODk1NDY3ZmVjNDIzY2E5YmYxNzE0OGM0MzQyZjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGVjODdhZGRjMzQ2NGEzZmI4ZmUxMzQxZDk5M2U0ZDcgPSAkKCc8ZGl2IGlkPSJodG1sXzRlYzg3YWRkYzM0NjRhM2ZiOGZlMTM0MWQ5OTNlNGQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DSU1BOiAoLTE5LjM3Nzg5MiwgLTQzLjU3MDAxNDYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNGQ4OTU0NjdmZWM0MjNjYTliZjE3MTQ4YzQzNDJmNy5zZXRDb250ZW50KGh0bWxfNGVjODdhZGRjMzQ2NGEzZmI4ZmUxMzQxZDk5M2U0ZDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzczMjI5Y2Q2ZGYzNDk1NTgzNTM5N2NjNDA4NTU2OTEuYmluZFBvcHVwKHBvcHVwXzA0ZDg5NTQ2N2ZlYzQyM2NhOWJmMTcxNDhjNDM0MmY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JhYTBjODY2MTk4MzQ0OWJiYWFjYTdhZTBlMWQyM2QxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk1ODYxMDksLTQzLjk5MjIyNTEyMzY3MDAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU0NjI2OTU4N2YwZDQ1ZjhiNmUyOGExMzcwMGQ4NTNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2MWZiMWZhYTllNTRhOWY4Y2I4Y2ZmOGFjYzFjYjNhID0gJCgnPGRpdiBpZD0iaHRtbF9kNjFmYjFmYWE5ZTU0YTlmOGNiOGNmZjhhY2MxY2IzYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkVUQU5JQTogKC0xOS45NTg2MTA5LCAtNDMuOTkyMjI1MTIzNjcwMDMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NDYyNjk1ODdmMGQ0NWY4YjZlMjhhMTM3MDBkODUzYy5zZXRDb250ZW50KGh0bWxfZDYxZmIxZmFhOWU1NGE5ZjhjYjhjZmY4YWNjMWNiM2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmFhMGM4NjYxOTgzNDQ5YmJhYWNhN2FlMGUxZDIzZDEuYmluZFBvcHVwKHBvcHVwXzU0NjI2OTU4N2YwZDQ1ZjhiNmUyOGExMzcwMGQ4NTNjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEzZWQxZWZmZGE4MjQ2NmU4Zjk5MzU3YWNiZWEzZWE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5NDA3MTE1MDAwMDAwMiwtNDMuOTAzNjczODcyMjIwNThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2NhNWUzZWZiNmYwNDExNzliZjJkODRlNmRmYThjZmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTE2ZGJmNTNlYjg0NDA4YWEwMzg1NjcyMDNmNTM2NGUgPSAkKCc8ZGl2IGlkPSJodG1sXzExNmRiZjUzZWI4NDQwOGFhMDM4NTY3MjAzZjUzNjRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CT0EgVklTVEE6ICgtMTkuODk0MDcxMTUwMDAwMDAyLCAtNDMuOTAzNjczODcyMjIwNTgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zY2E1ZTNlZmI2ZjA0MTE3OWJmMmQ4NGU2ZGZhOGNmYS5zZXRDb250ZW50KGh0bWxfMTE2ZGJmNTNlYjg0NDA4YWEwMzg1NjcyMDNmNTM2NGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTNlZDFlZmZkYTgyNDY2ZThmOTkzNTdhY2JlYTNlYTQuYmluZFBvcHVwKHBvcHVwXzNjYTVlM2VmYjZmMDQxMTc5YmYyZDg0ZTZkZmE4Y2ZhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU4NDRkMWQ0M2RmZjRkZDZhNjgyZmU5YWFmYWZlNzhkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5NTk1NzcsLTQzLjk1NDM5MzgyMTQ1MTI3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NWQ5MTI0NGE2MDY0YWMwOTM5MDA2NmI0NjJkNmE1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZGY2MzE1ODNjNGQ0YWZhYjA5MzA5ZDUxZTkxMWM1YSA9ICQoJzxkaXYgaWQ9Imh0bWxfOWRmNjMxNTgzYzRkNGFmYWIwOTMwOWQ1MWU5MTFjNWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJPTSBKRVNVUzogKC0xOS44OTU5NTc3LCAtNDMuOTU0MzkzODIxNDUxMjc2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjVkOTEyNDRhNjA2NGFjMDkzOTAwNjZiNDYyZDZhNTcuc2V0Q29udGVudChodG1sXzlkZjYzMTU4M2M0ZDRhZmFiMDkzMDlkNTFlOTExYzVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU4NDRkMWQ0M2RmZjRkZDZhNjgyZmU5YWFmYWZlNzhkLmJpbmRQb3B1cChwb3B1cF82NWQ5MTI0NGE2MDY0YWMwOTM5MDA2NmI0NjJkNmE1Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZTQ1YmY5MDIwOWQ0MjkwOGJjMzY4NWQwNzRhODhhZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS43NDE2NDM3LC00My4zNDYzMjYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRmMGIwNDEyMmU0ZjRmZDk4YWRiYmY5YzVjNWE5NTVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5OWM1NDk5YTYzMDQ1YzQ5ZTgwN2U1Y2RiYzg5NTcwID0gJCgnPGRpdiBpZD0iaHRtbF82OTljNTQ5OWE2MzA0NWM0OWU4MDdlNWNkYmM4OTU3MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qk9NIFNVQ0VTU086ICgtMTkuNzQxNjQzNywgLTQzLjM0NjMyNjEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZjBiMDQxMjJlNGY0ZmQ5OGFkYmJmOWM1YzVhOTU1Zi5zZXRDb250ZW50KGh0bWxfNjk5YzU0OTlhNjMwNDVjNDllODA3ZTVjZGJjODk1NzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWU0NWJmOTAyMDlkNDI5MDhiYzM2ODVkMDc0YTg4YWQuYmluZFBvcHVwKHBvcHVwXzRmMGIwNDEyMmU0ZjRmZDk4YWRiYmY5YzVjNWE5NTVmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZjMjVlYjEzNjllYzRhZDk4MWQzNmJhZDBjOWJjZDUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMy4zODMxOTc0LC01OS44NTk4MTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3MTlkMzdiN2ViNDQxNDQ5ZDgyMTY2OGE1OTJmMzBmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RkNjA2YmJhZWEwYzRiOTQ5MDQxYzZmNTgzODRiZjRlID0gJCgnPGRpdiBpZD0iaHRtbF9kZDYwNmJiYWVhMGM0Yjk0OTA0MWM2ZjU4Mzg0YmY0ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qk9ORklNOiAoMy4zODMxOTc0LCAtNTkuODU5ODE5Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3MTlkMzdiN2ViNDQxNDQ5ZDgyMTY2OGE1OTJmMzBmLnNldENvbnRlbnQoaHRtbF9kZDYwNmJiYWVhMGM0Yjk0OTA0MWM2ZjU4Mzg0YmY0ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYzI1ZWIxMzY5ZWM0YWQ5ODFkMzZiYWQwYzliY2Q1Mi5iaW5kUG9wdXAocG9wdXBfYzcxOWQzN2I3ZWI0NDE0NDlkODIxNjY4YTU5MmYzMGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2I2M2FlZTUzNTU4NDUwNDkzZjNiZjY4ZDMwYzk0Y2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTk5OTc2LC00NC4wMTQ0Mjk2NjczOTUxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZmRhNTZmYzZhMjE0ZTJlYTEzNDYyMzEwNmY5MTY0OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MTg1Y2Y5NDBiM2M0MGQ0YTRlOGU1MjI3MWU2YTgxOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTE4NWNmOTQwYjNjNDBkNGE0ZThlNTIyNzFlNmE4MTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJSQVNJTCBJTkRVU1RSSUFMOiAoLTE5Ljk5OTk3NiwgLTQ0LjAxNDQyOTY2NzM5NTE5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWZkYTU2ZmM2YTIxNGUyZWExMzQ2MjMxMDZmOTE2NDguc2V0Q29udGVudChodG1sXzUxODVjZjk0MGIzYzQwZDRhNGU4ZTUyMjcxZTZhODE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNiNjNhZWU1MzU1ODQ1MDQ5M2YzYmY2OGQzMGM5NGNkLmJpbmRQb3B1cChwb3B1cF8xZmRhNTZmYzZhMjE0ZTJlYTEzNDYyMzEwNmY5MTY0OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NWM2N2M2ZjEwNzQ0ZTI4OTk4Njg3YTM2ZjU1YjQ3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDYwNDc4MDAwMDAwMDIsLTQ0LjAwMDQzMzAzOTM3MTkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5MjIxZGU2ZjBhMDRlYmZiNTllMGJhMDliYzBkYjEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzViNDM3ZWM5MDhhMDQ3YWJiYzFiNGM5OWE1ZWJhNmI4ID0gJCgnPGRpdiBpZD0iaHRtbF81YjQzN2VjOTA4YTA0N2FiYmMxYjRjOTlhNWViYTZiOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0FCQU5BOiAoLTE5Ljk0NjA0NzgwMDAwMDAwMiwgLTQ0LjAwMDQzMzAzOTM3MTkxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTkyMjFkZTZmMGEwNGViZmI1OWUwYmEwOWJjMGRiMTMuc2V0Q29udGVudChodG1sXzViNDM3ZWM5MDhhMDQ3YWJiYzFiNGM5OWE1ZWJhNmI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ1YzY3YzZmMTA3NDRlMjg5OTg2ODdhMzZmNTViNDc1LmJpbmRQb3B1cChwb3B1cF85OTIyMWRlNmYwYTA0ZWJmYjU5ZTBiYTA5YmMwZGIxMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YTJlNWNkMjdjMjQ0Y2Q5OGJhMTZlNTQ3YWMxOTk1ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44OTAyMDAzLC00My45NDc0NTU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhYTlkNjg1NmEyOTQ1Mzk5NzEzNTg3MzYzNWUyYmYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdlZDFhMjAzZTZkYTQ4M2VhN2E4YmQ3NzY3NjU2MGIxID0gJCgnPGRpdiBpZD0iaHRtbF83ZWQxYTIwM2U2ZGE0ODNlYTdhOGJkNzc2NzY1NjBiMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0FDSE9FSVJJTkhBOiAoLTE5Ljg5MDIwMDMsIC00My45NDc0NTU2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmFhOWQ2ODU2YTI5NDUzOTk3MTM1ODczNjM1ZTJiZjIuc2V0Q29udGVudChodG1sXzdlZDFhMjAzZTZkYTQ4M2VhN2E4YmQ3NzY3NjU2MGIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRhMmU1Y2QyN2MyNDRjZDk4YmExNmU1NDdhYzE5OTVkLmJpbmRQb3B1cChwb3B1cF8yYWE5ZDY4NTZhMjk0NTM5OTcxMzU4NzM2MzVlMmJmMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZGQ2OGZmMmZmNzY0YmEzOTMwMTkwYTc3OTUwN2M2NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MDMwMDYzLC00My44ODk4Nzg1NDI1MDExOTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTMyZDExZDA2YzIyNDkxN2IwMzYxOTJhNWY0MDJkMzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDIxYTk5N2U2NzkwNGU4ZWE5ZjM3MGIxNGU2ZmFkMGEgPSAkKCc8ZGl2IGlkPSJodG1sX2QyMWE5OTdlNjc5MDRlOGVhOWYzNzBiMTRlNmZhZDBhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQUVUQU5PIEZVUlFVSU06ICgtMTkuOTAzMDA2MywgLTQzLjg4OTg3ODU0MjUwMTE5NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EzMmQxMWQwNmMyMjQ5MTdiMDM2MTkyYTVmNDAyZDMxLnNldENvbnRlbnQoaHRtbF9kMjFhOTk3ZTY3OTA0ZThlYTlmMzcwYjE0ZTZmYWQwYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZGQ2OGZmMmZmNzY0YmEzOTMwMTkwYTc3OTUwN2M2NC5iaW5kUG9wdXAocG9wdXBfYTMyZDExZDA2YzIyNDkxN2IwMzYxOTJhNWY0MDJkMzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmZmNzE3NTY1NmRkNGU4MjhhZGJkMjMzOTcyZmUzZmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTI0NzM4MiwtNDQuMDEyMTEwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNDY0MzY4ZDYwYjY0NTk3YWVjNjAzYzM2MmEyNmZjMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82Njc2NzUwOTZlNGQ0ODJhYjFhODdiMThiOTdiOTkxYSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjY3Njc1MDk2ZTRkNDgyYWIxYTg3YjE4Yjk3Yjk5MWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBTElGT1JOSUE6ICgtMTkuOTI0NzM4MiwgLTQ0LjAxMjExMDEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNDY0MzY4ZDYwYjY0NTk3YWVjNjAzYzM2MmEyNmZjMi5zZXRDb250ZW50KGh0bWxfNjY3Njc1MDk2ZTRkNDgyYWIxYTg3YjE4Yjk3Yjk5MWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmZmNzE3NTY1NmRkNGU4MjhhZGJkMjMzOTcyZmUzZmEuYmluZFBvcHVwKHBvcHVwXzM0NjQzNjhkNjBiNjQ1OTdhZWM2MDNjMzYyYTI2ZmMyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UzY2U0YTc1ZmI2NDQwNjQ5OGU3ZmQ0M2ZjNjE2ZGRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0MDA2OTMsLTQ0LjAxODU2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZjlkNzg4Y2QwNGQ0NWUwYThhN2M1YmM5N2RlOTJmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNGYwYzE0ODYyOWY0MDg0YWY3ZjJlNGExNTFlOWE5NCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDRmMGMxNDg2MjlmNDA4NGFmN2YyZTRhMTUxZTlhOTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBTUFSR09TOiAoLTE5Ljk0MDA2OTMsIC00NC4wMTg1NjUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZjlkNzg4Y2QwNGQ0NWUwYThhN2M1YmM5N2RlOTJmNy5zZXRDb250ZW50KGh0bWxfMDRmMGMxNDg2MjlmNDA4NGFmN2YyZTRhMTUxZTlhOTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTNjZTRhNzVmYjY0NDA2NDk4ZTdmZDQzZmM2MTZkZGQuYmluZFBvcHVwKHBvcHVwXzNmOWQ3ODhjZDA0ZDQ1ZTBhOGE3YzViYzk3ZGU5MmY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU1YjU3MWJlYjdjYjRlMTJhMTYzMzZmZDljYmZjMGZjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgzMDM5OTM5OTk5OTk5NywtNDMuOTQ3MDc5MzU0NzQ2ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDA1ZmQzZDRiYjJkNDQ1MmE1ZTUyYWNjY2YxYWQ2ZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmM2NTAzMWI2YmQxNGQ4ODk5MTZmNWY2MzNmOGY3ZTcgPSAkKCc8ZGl2IGlkPSJodG1sXzZjNjUwMzFiNmJkMTRkODg5OTE2ZjVmNjMzZjhmN2U3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQU1QTyBBTEVHUkU6ICgtMTkuODMwMzk5Mzk5OTk5OTk3LCAtNDMuOTQ3MDc5MzU0NzQ2ODMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MDVmZDNkNGJiMmQ0NDUyYTVlNTJhY2NjZjFhZDZkMS5zZXRDb250ZW50KGh0bWxfNmM2NTAzMWI2YmQxNGQ4ODk5MTZmNWY2MzNmOGY3ZTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTViNTcxYmViN2NiNGUxMmExNjMzNmZkOWNiZmMwZmMuYmluZFBvcHVwKHBvcHVwXzQwNWZkM2Q0YmIyZDQ0NTJhNWU1MmFjY2NmMWFkNmQxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y1MmIyM2RlMGM2OTRkOGE4OWQ1NGE5Y2UxZDlmNzdjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljc5NjE0MjksLTQzLjk0NzQzNzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGY5ZjYwNzg0ZTJlNGZkODg3OGZmN2JiMTYzNjRhNWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzVlNmZhZDZhOTc5NDQ2NTgxZWI5NGU4ZDZhMGY3ODEgPSAkKCc8ZGl2IGlkPSJodG1sX2M1ZTZmYWQ2YTk3OTQ0NjU4MWViOTRlOGQ2YTBmNzgxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQU5BQTogKC0xOS43OTYxNDI5LCAtNDMuOTQ3NDM3Nyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmOWY2MDc4NGUyZTRmZDg4NzhmZjdiYjE2MzY0YTVkLnNldENvbnRlbnQoaHRtbF9jNWU2ZmFkNmE5Nzk0NDY1ODFlYjk0ZThkNmEwZjc4MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNTJiMjNkZTBjNjk0ZDhhODlkNTRhOWNlMWQ5Zjc3Yy5iaW5kUG9wdXAocG9wdXBfZGY5ZjYwNzg0ZTJlNGZkODg3OGZmN2JiMTYzNjRhNWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODkxYmQ5MmNjMDA5NGM1MzlkMjhjMzM5ZDM1YWVmYjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODExNDU4MTAwMDAwMDAzLC00My45NzI0NTA1MzM2NDY1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OGEwNDMwMTgzNjA0NDIxYWQ2ZWVkOGY3YTY1ZDNjNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xODQ4NGZkNzFjMGY0OTM0OGY4YjNkMzhhNmM3OTI2MCA9ICQoJzxkaXYgaWQ9Imh0bWxfMTg0ODRmZDcxYzBmNDkzNDhmOGIzZDM4YTZjNzkyNjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBTkRFTEFSSUE6ICgtMTkuODExNDU4MTAwMDAwMDAzLCAtNDMuOTcyNDUwNTMzNjQ2NTgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OGEwNDMwMTgzNjA0NDIxYWQ2ZWVkOGY3YTY1ZDNjNC5zZXRDb250ZW50KGh0bWxfMTg0ODRmZDcxYzBmNDkzNDhmOGIzZDM4YTZjNzkyNjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODkxYmQ5MmNjMDA5NGM1MzlkMjhjMzM5ZDM1YWVmYjEuYmluZFBvcHVwKHBvcHVwXzk4YTA0MzAxODM2MDQ0MjFhZDZlZWQ4ZjdhNjVkM2M0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZkNTNkOWJiYjEzMDQ4Yjg5NzA5NDhkNGFhOThjYzNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgyNzA3MTA5OTk5OTk5OCwtNDMuODgyODg5ODIyMDY1NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDQ2MmZiODQ4NWI2NGQyM2I2ZjhhZTIwM2UxNGI0YzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzhiMmE4M2I1ZWY0NDgxMGIyMDZjYjI3MzBiZjFkZTIgPSAkKCc8ZGl2IGlkPSJodG1sXzc4YjJhODNiNWVmNDQ4MTBiMjA2Y2IyNzMwYmYxZGUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQVBJVEFPIEVEVUFSRE86ICgtMTkuODI3MDcxMDk5OTk5OTk4LCAtNDMuODgyODg5ODIyMDY1NjgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNDYyZmI4NDg1YjY0ZDIzYjZmOGFlMjAzZTE0YjRjOC5zZXRDb250ZW50KGh0bWxfNzhiMmE4M2I1ZWY0NDgxMGIyMDZjYjI3MzBiZjFkZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmQ1M2Q5YmJiMTMwNDhiODk3MDk0OGQ0YWE5OGNjM2QuYmluZFBvcHVwKHBvcHVwXzA0NjJmYjg0ODViNjRkMjNiNmY4YWUyMDNlMTRiNGM4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmNjA3NjYyNGQzNDQ2NWZhYjZkZDM0MThkMmIyN2M0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIwLjAwMjYzNTY1MDAwMDAwMiwtNDQuMDA3MzgwNDA1ODE1OTY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlkZDc5ZjVjY2ZlNzRjNDY5MWRhNTQzYmZlMWFjZjgwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg1ZGIwM2Y3NTJlNTQ4MTJhNzVjODk1NGZhZDU1ZGFhID0gJCgnPGRpdiBpZD0iaHRtbF84NWRiMDNmNzUyZTU0ODEyYTc1Yzg5NTRmYWQ1NWRhYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0FSRE9TTzogKC0yMC4wMDI2MzU2NTAwMDAwMDIsIC00NC4wMDczODA0MDU4MTU5NjUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZGQ3OWY1Y2NmZTc0YzQ2OTFkYTU0M2JmZTFhY2Y4MC5zZXRDb250ZW50KGh0bWxfODVkYjAzZjc1MmU1NDgxMmE3NWM4OTU0ZmFkNTVkYWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmY2MDc2NjI0ZDM0NDY1ZmFiNmRkMzQxOGQyYjI3YzQuYmluZFBvcHVwKHBvcHVwXzlkZDc5ZjVjY2ZlNzRjNDY5MWRhNTQzYmZlMWFjZjgwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZkNjgyZTFkNDgzNTQwZDFhMmI1OWQxMGUyNDNiNzcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5OTAxNjY1LC00My44ODc2NzExNzIwOTQ4NTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWM0NmUzYjg4ZDEyNGYzYjg5ODY4ODEwZjJmOTJlM2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDdhNmNmNWVmNGE2NDc4MDk1NDRmMzVkODJjY2NmODkgPSAkKCc8ZGl2IGlkPSJodG1sX2Q3YTZjZjVlZjRhNjQ3ODA5NTQ0ZjM1ZDgyY2NjZjg5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQVNBIEJSQU5DQTogKC0xOS44OTkwMTY2NSwgLTQzLjg4NzY3MTE3MjA5NDg1NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjNDZlM2I4OGQxMjRmM2I4OTg2ODgxMGYyZjkyZTNhLnNldENvbnRlbnQoaHRtbF9kN2E2Y2Y1ZWY0YTY0NzgwOTU0NGYzNWQ4MmNjY2Y4OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZDY4MmUxZDQ4MzU0MGQxYTJiNTlkMTBlMjQzYjc3MS5iaW5kUG9wdXAocG9wdXBfZWM0NmUzYjg4ZDEyNGYzYjg5ODY4ODEwZjJmOTJlM2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWQ4ODRkN2JjNTM1NDkxNTljYmUyYjIyNjIyNTdlNDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODIyNzQ5OSwtNDQuMDAzOTc5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wOWExZTNkNGI1ZTA0NDY2OGJmZGViOGY4MmEzMTgzNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMDZmZDA5NTZmYmQ0OTAyYWEzNGM3MThmOWE5ODU1NSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTA2ZmQwOTU2ZmJkNDkwMmFhMzRjNzE4ZjlhOTg1NTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNFVSBBWlVMOiAoLTE5LjgyMjc0OTksIC00NC4wMDM5Nzk5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDlhMWUzZDRiNWUwNDQ2NjhiZmRlYjhmODJhMzE4Mzcuc2V0Q29udGVudChodG1sX2EwNmZkMDk1NmZiZDQ5MDJhYTM0YzcxOGY5YTk4NTU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFkODg0ZDdiYzUzNTQ5MTU5Y2JlMmIyMjYyMjU3ZTQ0LmJpbmRQb3B1cChwb3B1cF8wOWExZTNkNGI1ZTA0NDY2OGJmZGViOGY4MmEzMTgzNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYzk0ZTk2OTMwYzI0Y2E3YjAyZTQ0OWMxNjViNTNjNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MzU3MjU1NSwtNDMuOTkwNTIzMjU0NzE4ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDJhYmVmMDgxMDgwNGI3ZGE0MmI0MzU1MjZjZDZjOGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzRiOGRjNjhiZTU2NGY3MDgwZTg5NmM2ZjQwNmU1Y2MgPSAkKCc8ZGl2IGlkPSJodG1sXzM0YjhkYzY4YmU1NjRmNzA4MGU4OTZjNmY0MDZlNWNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DT1BBQ0FCQU5BOiAoLTE5LjgzNTcyNTU1LCAtNDMuOTkwNTIzMjU0NzE4ODUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MmFiZWYwODEwODA0YjdkYTQyYjQzNTUyNmNkNmM4Zi5zZXRDb250ZW50KGh0bWxfMzRiOGRjNjhiZTU2NGY3MDgwZTg5NmM2ZjQwNmU1Y2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWM5NGU5NjkzMGMyNGNhN2IwMmU0NDljMTY1YjUzYzQuYmluZFBvcHVwKHBvcHVwXzQyYWJlZjA4MTA4MDRiN2RhNDJiNDM1NTI2Y2Q2YzhmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRmZWFmZjViYjI1NzRhODBhOTlkMDczMmNkMDBjMTNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwMDM3ODQsLTQ0LjAyMTIzODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmQwZDJiZjFlMGNlNGUyNmEwODcxNTEzOGUwNjhhMmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTAyMzA5NGYzNTRjNDk3MWEzODMwZmNlOWEzYTIyMGQgPSAkKCc8ZGl2IGlkPSJodG1sX2EwMjMwOTRmMzU0YzQ5NzFhMzgzMGZjZTlhM2EyMjBkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DT1FVRUlST1M6ICgtMTkuOTAwMzc4NCwgLTQ0LjAyMTIzODMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZDBkMmJmMWUwY2U0ZTI2YTA4NzE1MTM4ZTA2OGEyYy5zZXRDb250ZW50KGh0bWxfYTAyMzA5NGYzNTRjNDk3MWEzODMwZmNlOWEzYTIyMGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGZlYWZmNWJiMjU3NGE4MGE5OWQwNzMyY2QwMGMxM2IuYmluZFBvcHVwKHBvcHVwXzZkMGQyYmYxZTBjZTRlMjZhMDg3MTUxMzhlMDY4YTJjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E5ZWRlOGY5Njk3YTRiYmRiNmZiM2Y3MTk2N2JlNGNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk5MjQyMjA1MDAwMDAwMiwtNDQuMDE5MjExNjE3ODczMTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODkyN2M4YzcyMjdhNDEyMDlkYjlhMjNkYTI5OTY5MmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWU3MjI2ZDFiODcyNDVjODljODE5MTI4YTYwYTYxNGYgPSAkKCc8ZGl2IGlkPSJodG1sXzVlNzIyNmQxYjg3MjQ1Yzg5YzgxOTEyOGE2MGE2MTRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ESUFNQU5URTogKC0xOS45OTI0MjIwNTAwMDAwMDIsIC00NC4wMTkyMTE2MTc4NzMxNSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5MjdjOGM3MjI3YTQxMjA5ZGI5YTIzZGEyOTk2OTJkLnNldENvbnRlbnQoaHRtbF81ZTcyMjZkMWI4NzI0NWM4OWM4MTkxMjhhNjBhNjE0Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hOWVkZThmOTY5N2E0YmJkYjZmYjNmNzE5NjdiZTRjYS5iaW5kUG9wdXAocG9wdXBfODkyN2M4YzcyMjdhNDEyMDlkYjlhMjNkYTI5OTY5MmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmQzM2Y2MWVlNzgxNDI4NjhkOTkzZDk1ZmI2ZDk3MGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTE1ODU4MiwtNDMuOTk5NTc1MTAxMjU4NzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmMyMmIwZDQ2ZDVjNDczMmE4MGFhZTRlZWI3YjI5NDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmY5Y2U4NGFhYzA2NGI3NzgzZWY1NWE1ZDY0N2EwYTAgPSAkKCc8ZGl2IGlkPSJodG1sX2JmOWNlODRhYWMwNjRiNzc4M2VmNTVhNWQ2NDdhMGEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ET00gQk9TQ086ICgtMTkuOTE1ODU4MiwgLTQzLjk5OTU3NTEwMTI1ODc0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmMyMmIwZDQ2ZDVjNDczMmE4MGFhZTRlZWI3YjI5NDkuc2V0Q29udGVudChodG1sX2JmOWNlODRhYWMwNjRiNzc4M2VmNTVhNWQ2NDdhMGEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJkMzNmNjFlZTc4MTQyODY4ZDk5M2Q5NWZiNmQ5NzBhLmJpbmRQb3B1cChwb3B1cF82YzIyYjBkNDZkNWM0NzMyYTgwYWFlNGVlYjdiMjk0OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YTU5ZmNiN2Y3ZDA0YzI2YjAyMTAxNjMxNDQwODRmMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NzY5NDA1NSwtNDMuOTE3MTM2Mjg4ODU1MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjZhNWUzMzAyZjk3NDAxNDhjZDBjOTlmNjEyNWVkMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTEyY2JmMzZhNzk3NDY1OWJjOTU1NWExNmFiMjBlOGUgPSAkKCc8ZGl2IGlkPSJodG1sXzkxMmNiZjM2YTc5NzQ2NTliYzk1NTVhMTZhYjIwZThlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ET00gSk9BUVVJTTogKC0xOS44NzY5NDA1NSwgLTQzLjkxNzEzNjI4ODg1NTAyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjZhNWUzMzAyZjk3NDAxNDhjZDBjOTlmNjEyNWVkMTQuc2V0Q29udGVudChodG1sXzkxMmNiZjM2YTc5NzQ2NTliYzk1NTVhMTZhYjIwZThlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlhNTlmY2I3ZjdkMDRjMjZiMDIxMDE2MzE0NDA4NGYzLmJpbmRQb3B1cChwb3B1cF8yNmE1ZTMzMDJmOTc0MDE0OGNkMGM5OWY2MTI1ZWQxNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZTA3ZjhiOTIxMjU0M2Q3YmMwNDIyZjNiMGU4ZDY5MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTQ1OTExNSwtNDMuOTA0NTk1NDc0NjA0NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzk3ZmEyMDM2Yzc3NDNhYWE3ZWRkYjk0YTVlYjE3MjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTQ4OWEwMmU0MmYxNDVlYzg0MjQ5ZDlhODRhMmM1NzIgPSAkKCc8ZGl2IGlkPSJodG1sXzk0ODlhMDJlNDJmMTQ1ZWM4NDI0OWQ5YTg0YTJjNTcyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ET00gU0lMVkVSSU86ICgtMTkuODU0NTkxMTUsIC00My45MDQ1OTU0NzQ2MDQ1OSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc5N2ZhMjAzNmM3NzQzYWFhN2VkZGI5NGE1ZWIxNzIwLnNldENvbnRlbnQoaHRtbF85NDg5YTAyZTQyZjE0NWVjODQyNDlkOWE4NGEyYzU3Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZTA3ZjhiOTIxMjU0M2Q3YmMwNDIyZjNiMGU4ZDY5Mi5iaW5kUG9wdXAocG9wdXBfNzk3ZmEyMDM2Yzc3NDNhYWE3ZWRkYjk0YTVlYjE3MjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjcxNmQzZTc5YjU4NDdlNzlmZTE5OWQxODZjMTg1ZmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODg3Mjc1NDUsLTQzLjk3NTQxOTE5MTk2OTU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNhOTQxNThjOTkyNjQ2MTNiZGNmZWMzMDc4M2ZlNDZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JhZjQ3NWE5YzFmOTRiN2Q4N2YwNWU5NTExYTkyYWUyID0gJCgnPGRpdiBpZD0iaHRtbF9iYWY0NzVhOWMxZjk0YjdkODdmMDVlOTUxMWE5MmFlMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RU5HRU5ITyBOT0dVRUlSQTogKC0xOS44ODcyNzU0NSwgLTQzLjk3NTQxOTE5MTk2OTU1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2E5NDE1OGM5OTI2NDYxM2JkY2ZlYzMwNzgzZmU0NmYuc2V0Q29udGVudChodG1sX2JhZjQ3NWE5YzFmOTRiN2Q4N2YwNWU5NTExYTkyYWUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY3MTZkM2U3OWI1ODQ3ZTc5ZmUxOTlkMTg2YzE4NWZjLmJpbmRQb3B1cChwb3B1cF8zYTk0MTU4Yzk5MjY0NjEzYmRjZmVjMzA3ODNmZTQ2Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NjA4ZmRmZDJmMWM0MGRjYTEwNDY4MDY5YjA5NWZhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44ODY5MTYyLC00My45NTk5OTUzMTQ4ODQ4NjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjNiNjU1ZGIwN2FkNGFkMmE1MDFlMTk0ZDE4YTQ5ZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzQzM2NkY2ViMTA0NDMzZDhjOGRhMmEzZDQ0ZDZjNjkgPSAkKCc8ZGl2IGlkPSJodG1sXzM0MzNjZGNlYjEwNDQzM2Q4YzhkYTJhM2Q0NGQ2YzY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FUk1FTElOREE6ICgtMTkuODg2OTE2MiwgLTQzLjk1OTk5NTMxNDg4NDg2NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIzYjY1NWRiMDdhZDRhZDJhNTAxZTE5NGQxOGE0OWU0LnNldENvbnRlbnQoaHRtbF8zNDMzY2RjZWIxMDQ0MzNkOGM4ZGEyYTNkNDRkNmM2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NjA4ZmRmZDJmMWM0MGRjYTEwNDY4MDY5YjA5NWZhMi5iaW5kUG9wdXAocG9wdXBfMjNiNjU1ZGIwN2FkNGFkMmE1MDFlMTk0ZDE4YTQ5ZTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWFjMTdlYjU4OTAwNDBjZTgxNGFkNTA2NmEyZjJkMzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODYzOTc2NiwtNDQuMDI0NjIyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YzFmY2UzMTY0YmM0ODgxOTU2OWQxOTg4ZTQ2N2E0ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MDZkZDJiMGNlNDg0OWI2ODk3M2NmZjA2NTc0YjY1YyA9ICQoJzxkaXYgaWQ9Imh0bWxfNDA2ZGQyYjBjZTQ4NDliNjg5NzNjZmYwNjU3NGI2NWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVTVFJFTEEgREFMVkE6ICgtMTkuODYzOTc2NiwgLTQ0LjAyNDYyMjcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YzFmY2UzMTY0YmM0ODgxOTU2OWQxOTg4ZTQ2N2E0Zi5zZXRDb250ZW50KGh0bWxfNDA2ZGQyYjBjZTQ4NDliNjg5NzNjZmYwNjU3NGI2NWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWFjMTdlYjU4OTAwNDBjZTgxNGFkNTA2NmEyZjJkMzcuYmluZFBvcHVwKHBvcHVwXzljMWZjZTMxNjRiYzQ4ODE5NTY5ZDE5ODhlNDY3YTRmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU0MzE4ZDVlNzY4YzQ2ZjdiNDAzMDE5Y2Y1MTkyMmYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgxMTUwMTMsLTQzLjkzNDUyOTE3MjQ1MjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWY1ZTE2NjJmN2U0NGFiMzhlNTdmNGQyM2MyYjAwOGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjE3ODkyZmRhNzMzNDE4NmIyNGRiZGY0MmVjNWUxMmEgPSAkKCc8ZGl2IGlkPSJodG1sX2YxNzg5MmZkYTczMzQxODZiMjRkYmRmNDJlYzVlMTJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FVEVMVklOQSBDQVJORUlSTzogKC0xOS44MTE1MDEzLCAtNDMuOTM0NTI5MTcyNDUyMSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FmNWUxNjYyZjdlNDRhYjM4ZTU3ZjRkMjNjMmIwMDhiLnNldENvbnRlbnQoaHRtbF9mMTc4OTJmZGE3MzM0MTg2YjI0ZGJkZjQyZWM1ZTEyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NDMxOGQ1ZTc2OGM0NmY3YjQwMzAxOWNmNTE5MjJmMi5iaW5kUG9wdXAocG9wdXBfYWY1ZTE2NjJmN2U0NGFiMzhlNTdmNGQyM2MyYjAwOGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjJiN2MxYjAyZjVmNGYxYWJiNmRlYTM4YTVhNDM4MDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODYyNzY5MDQ5OTk5OTk3LC00My45MTg2NzM4MjI4OTQ5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZTY2ZjZjMjI0Y2M0ZTRjYmVlNjQ1NmNhZmJjMDg5MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYjRkZmExNTJhMTU0ODU2YjU3OWQ4ODlhZWE5NWU1ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWI0ZGZhMTUyYTE1NDg1NmI1NzlkODg5YWVhOTVlNWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVZTUFSRDogKC0xOS44NjI3NjkwNDk5OTk5OTcsIC00My45MTg2NzM4MjI4OTQ5Mik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NlNjZmNmMyMjRjYzRlNGNiZWU2NDU2Y2FmYmMwODkyLnNldENvbnRlbnQoaHRtbF8xYjRkZmExNTJhMTU0ODU2YjU3OWQ4ODlhZWE5NWU1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMmI3YzFiMDJmNWY0ZjFhYmI2ZGVhMzhhNWE0MzgwNC5iaW5kUG9wdXAocG9wdXBfY2U2NmY2YzIyNGNjNGU0Y2JlZTY0NTZjYWZiYzA4OTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWMxMDNhYzhjNDM0NGQ5YWE2NGQ2NjIzN2NiMjUyYmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODcyNDQ0MTUsLTQzLjkxNzQxMjAyMTk5MzE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NmNGUxNjBjNDZlYTQ1ODE5Nzg1YWQ0NjNhM2YzMjhiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhYTY3ZTMzNDBjMTRiYjU5Y2Y1ODlmOTIzMDNhODBiID0gJCgnPGRpdiBpZD0iaHRtbF8wYWE2N2UzMzQwYzE0YmI1OWNmNTg5ZjkyMzAzYTgwYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RkVSTkFPIERJQVM6ICgtMTkuODcyNDQ0MTUsIC00My45MTc0MTIwMjE5OTMxNyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmNGUxNjBjNDZlYTQ1ODE5Nzg1YWQ0NjNhM2YzMjhiLnNldENvbnRlbnQoaHRtbF8wYWE2N2UzMzQwYzE0YmI1OWNmNTg5ZjkyMzAzYTgwYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YzEwM2FjOGM0MzQ0ZDlhYTY0ZDY2MjM3Y2IyNTJiZi5iaW5kUG9wdXAocG9wdXBfY2Y0ZTE2MGM0NmVhNDU4MTk3ODVhZDQ2M2EzZjMyOGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTRjNTUxNDNiOTE5NDBlMGI3YTViMzEyMDQ3MDcxMjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTk0NzQzMDUsLTQzLjk5OTkwODI3ODU2ODA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkZDg3ZDk3Y2MyMTRhODU4MTNmMGFiMmE5NzBiNzRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5NjQ2MjY5Njk0MjQ3MjdiNTYzMmQyMDZmZjI0YjZmID0gJCgnPGRpdiBpZD0iaHRtbF82OTY0NjI2OTY5NDI0NzI3YjU2MzJkMjA2ZmYyNGI2ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RkxBVklPIE1BUlFVRVMgTElTQk9BOiAoLTE5Ljk5NDc0MzA1LCAtNDMuOTk5OTA4Mjc4NTY4MDQpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZGQ4N2Q5N2NjMjE0YTg1ODEzZjBhYjJhOTcwYjc0ZC5zZXRDb250ZW50KGh0bWxfNjk2NDYyNjk2OTQyNDcyN2I1NjMyZDIwNmZmMjRiNmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTRjNTUxNDNiOTE5NDBlMGI3YTViMzEyMDQ3MDcxMjguYmluZFBvcHVwKHBvcHVwXzJkZDg3ZDk3Y2MyMTRhODU4MTNmMGFiMmE5NzBiNzRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NjYjRhODkzMGRlZDQ4YmI4NjlmZjc3YzNiZjJmODBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgzNzEwMjc1LC00My45MzQ4NjI0ODQyMzcwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YjllOGJlNjg5MGE0NWRkYThiNWE1MzZhOTllZWFiYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNjg0N2E4N2UxODE0ZjJiOGMxZjYxNDYwOWEzM2NkYiA9ICQoJzxkaXYgaWQ9Imh0bWxfZTY4NDdhODdlMTgxNGYyYjhjMWY2MTQ2MDlhMzNjZGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZMT1JBTUFSOiAoLTE5LjgzNzEwMjc1LCAtNDMuOTM0ODYyNDg0MjM3MDMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YjllOGJlNjg5MGE0NWRkYThiNWE1MzZhOTllZWFiYy5zZXRDb250ZW50KGh0bWxfZTY4NDdhODdlMTgxNGYyYjhjMWY2MTQ2MDlhMzNjZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2NiNGE4OTMwZGVkNDhiYjg2OWZmNzdjM2JmMmY4MGQuYmluZFBvcHVwKHBvcHVwXzdiOWU4YmU2ODkwYTQ1ZGRhOGI1YTUzNmE5OWVlYWJjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFhNzMwZjhlODQ0MDQxNGJhNjFlYjdjMzZlNGYwYmY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwNzE3OTMsLTQ0LjAwMTcxOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzk0NzI1ZjU3OWMzNGYyNDkwYzY0NDJiNTZlMzBhNjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzFkODIwZGU3N2JjNGViYTg2NjM3OTNhOWRlOWQ4OGMgPSAkKCc8ZGl2IGlkPSJodG1sXzcxZDgyMGRlNzdiYzRlYmE4NjYzNzkzYTlkZTlkODhjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GUkVJIEVVU1RBUVVJTzogKC0xOS45MDcxNzkzLCAtNDQuMDAxNzE5OCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5NDcyNWY1NzljMzRmMjQ5MGM2NDQyYjU2ZTMwYTYwLnNldENvbnRlbnQoaHRtbF83MWQ4MjBkZTc3YmM0ZWJhODY2Mzc5M2E5ZGU5ZDg4Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYTczMGY4ZTg0NDA0MTRiYTYxZWI3YzM2ZTRmMGJmNy5iaW5kUG9wdXAocG9wdXBfMzk0NzI1ZjU3OWMzNGYyNDkwYzY0NDJiNTZlMzBhNjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzdlZDY0MDg0OTFhNGRhZGEzMTk2ODJiMjdlM2Y0YmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODA3NzA4NCwtNDMuOTM3ODQxNzUwMzE4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNGM4YTQ4NDQwMjY0ZTE4YjFmM2MyYjZiY2QxOWM2NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OGE0Mjc0NDQxNzI0NjdlYjU5ZmIwNGU5OGNmYzdkMyA9ICQoJzxkaXYgaWQ9Imh0bWxfNDhhNDI3NDQ0MTcyNDY3ZWI1OWZiMDRlOThjZmM3ZDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZSRUkgTEVPUE9MRE86ICgtMTkuODA3NzA4NCwgLTQzLjkzNzg0MTc1MDMxODQpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNGM4YTQ4NDQwMjY0ZTE4YjFmM2MyYjZiY2QxOWM2NS5zZXRDb250ZW50KGh0bWxfNDhhNDI3NDQ0MTcyNDY3ZWI1OWZiMDRlOThjZmM3ZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzdlZDY0MDg0OTFhNGRhZGEzMTk2ODJiMjdlM2Y0YmUuYmluZFBvcHVwKHBvcHVwX2I0YzhhNDg0NDAyNjRlMThiMWYzYzJiNmJjZDE5YzY1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FjYTNiMGExYzNjODQ5M2U4Yjc3MDllZDFhZjFmMzZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzMjUyMDgsLTQzLjk4ODYxMzY1NjE2OTEzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNWNmMmE1MWFhMDM0OTExODk2ZWJjMGM3ODBhZjA4YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81N2I3YTRjMDBiMWM0OWNhOWI4NGE4YjY1MzhmZGRjYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNTdiN2E0YzAwYjFjNDljYTliODRhOGI2NTM4ZmRkY2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdBTUVMRUlSQTogKC0xOS45MzI1MjA4LCAtNDMuOTg4NjEzNjU2MTY5MTM2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjVjZjJhNTFhYTAzNDkxMTg5NmViYzBjNzgwYWYwOGMuc2V0Q29udGVudChodG1sXzU3YjdhNGMwMGIxYzQ5Y2E5Yjg0YThiNjUzOGZkZGNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FjYTNiMGExYzNjODQ5M2U4Yjc3MDllZDFhZjFmMzZiLmJpbmRQb3B1cChwb3B1cF8yNWNmMmE1MWFhMDM0OTExODk2ZWJjMGM3ODBhZjA4Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNDc4ZDExYTE5NzE0MGMyOGMzNjRmZDUwMzUwYzE3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDUwNTAzLC00NC4wMDk0NDYyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyNzJiYmI2ZGIxOTRmZTNiZTUyY2E0NWEzZWE1YThiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzNmE3NWE5MDAzYTRkZWZiZmZlOTA2MjA3MTE5ZWYyID0gJCgnPGRpdiBpZD0iaHRtbF8zMzZhNzVhOTAwM2E0ZGVmYmZmZTkwNjIwNzExOWVmMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R0xBTElKQTogKC0xOS45NDUwNTAzLCAtNDQuMDA5NDQ2Mik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyNzJiYmI2ZGIxOTRmZTNiZTUyY2E0NWEzZWE1YThiLnNldENvbnRlbnQoaHRtbF8zMzZhNzVhOTAwM2E0ZGVmYmZmZTkwNjIwNzExOWVmMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNDc4ZDExYTE5NzE0MGMyOGMzNjRmZDUwMzUwYzE3NS5iaW5kUG9wdXAocG9wdXBfNTI3MmJiYjZkYjE5NGZlM2JlNTJjYTQ1YTNlYTVhOGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGNmY2E1ZTJkYzMwNDYyYWJhZDEzNGFiODdiYWYyZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODk4MzgzMSwtNDQuMDE0MTQ4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZDYzMDgwZDkzNjM0NGYzOTA5ZDBlMTUxY2M0YTljOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYzQ4Y2JmMzdiYTM0MDU0YTIzYjdlN2JiOGFlNzBkNCA9ICQoJzxkaXYgaWQ9Imh0bWxfYmM0OGNiZjM3YmEzNDA1NGEyM2I3ZTdiYjhhZTcwZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdMT1JJQTogKC0xOS44OTgzODMxLCAtNDQuMDE0MTQ4OSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZkNjMwODBkOTM2MzQ0ZjM5MDlkMGUxNTFjYzRhOWM5LnNldENvbnRlbnQoaHRtbF9iYzQ4Y2JmMzdiYTM0MDU0YTIzYjdlN2JiOGFlNzBkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84Y2ZjYTVlMmRjMzA0NjJhYmFkMTM0YWI4N2JhZjJmMC5iaW5kUG9wdXAocG9wdXBfZmQ2MzA4MGQ5MzYzNDRmMzkwOWQwZTE1MWNjNGE5YzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGUyNTE4ZDJiZjhlNDkzZjg3OWVjZDYwZWNkZDdkNjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODY1NzAxMTAwMDAwMDAzLC00My45MDAwODkyNTg0NjQzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81OWEzY2U2Nzg0MjI0ZTJlOWJhMzY2NDU5MTFhNTJhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZmMyMDgwMzc1ZjQ0ZTM5OWExMWE0NjBkZmRmMmNhNyA9ICQoJzxkaXYgaWQ9Imh0bWxfYWZjMjA4MDM3NWY0NGUzOTlhMTFhNDYwZGZkZjJjYTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdPSUFOSUE6ICgtMTkuODY1NzAxMTAwMDAwMDAzLCAtNDMuOTAwMDg5MjU4NDY0MzUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81OWEzY2U2Nzg0MjI0ZTJlOWJhMzY2NDU5MTFhNTJhNi5zZXRDb250ZW50KGh0bWxfYWZjMjA4MDM3NWY0NGUzOTlhMTFhNDYwZGZkZjJjYTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGUyNTE4ZDJiZjhlNDkzZjg3OWVjZDYwZWNkZDdkNjYuYmluZFBvcHVwKHBvcHVwXzU5YTNjZTY3ODQyMjRlMmU5YmEzNjY0NTkxMWE1MmE2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJlNWQ3Y2I4NzBhZTQwY2FhNjZkM2M0NWE5YmMzODAxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIwLjIxMDQ2OTcsLTQ0LjAwMzM1OTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTNmZThkYjlkMTEyNGRiY2EwZGE2MzA0ZmRjZjE5OTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZThjZjJiMjA4N2RiNDU2ZWJmZTEzMWVlZjJmZGU0NGIgPSAkKCc8ZGl2IGlkPSJodG1sX2U4Y2YyYjIwODdkYjQ1NmViZmUxMzFlZWYyZmRlNDRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HT1JEVVJBUzogKC0yMC4yMTA0Njk3LCAtNDQuMDAzMzU5Myk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkzZmU4ZGI5ZDExMjRkYmNhMGRhNjMwNGZkY2YxOTkwLnNldENvbnRlbnQoaHRtbF9lOGNmMmIyMDg3ZGI0NTZlYmZlMTMxZWVmMmZkZTQ0Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZTVkN2NiODcwYWU0MGNhYTY2ZDNjNDVhOWJjMzgwMS5iaW5kUG9wdXAocG9wdXBfOTNmZThkYjlkMTEyNGRiY2EwZGE2MzA0ZmRjZjE5OTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzY4YTI2NzQ3ZmE0NDk1YmFlZGUyNDgwMGEwYTI5ZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODQ0MTA0NTUsLTQzLjkyNTUzNDMyMzM5NzI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjY2YyOTZlZWZhMDQxMGY5MjMyMGYwZWFkZTBiMzZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EzMWNkZDYxYzg0MjQ5NjM4NGY0MjhjNGFlMWJkMzc0ID0gJCgnPGRpdiBpZD0iaHRtbF9hMzFjZGQ2MWM4NDI0OTYzODRmNDI4YzRhZTFiZDM3NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R1VBUkFOSTogKC0xOS44NDQxMDQ1NSwgLTQzLjkyNTUzNDMyMzM5NzI4KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmNjZjI5NmVlZmEwNDEwZjkyMzIwZjBlYWRlMGIzNmYuc2V0Q29udGVudChodG1sX2EzMWNkZDYxYzg0MjQ5NjM4NGY0MjhjNGFlMWJkMzc0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M2OGEyNjc0N2ZhNDQ5NWJhZWRlMjQ4MDBhMGEyOWQ3LmJpbmRQb3B1cChwb3B1cF8yY2NmMjk2ZWVmYTA0MTBmOTIzMjBmMGVhZGUwYjM2Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNmM5MDFhMjVhNTI0ZTcxYTM2NGUxMzdiZmY2Yjg0ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NTM4ODE0LC00My45Nzg3MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzY2NjVlYzU0YzBkNGFmYjlkNDUxMzY5MmRhYjZhODggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODZjOThlMjU3NGVlNGRmNGFmNzcwZWZmMzgxYzE3MTkgPSAkKCc8ZGl2IGlkPSJodG1sXzg2Yzk4ZTI1NzRlZTRkZjRhZjc3MGVmZjM4MWMxNzE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IQVZBSTogKC0xOS45NTM4ODE0LCAtNDMuOTc4NzI5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzY2NjVlYzU0YzBkNGFmYjlkNDUxMzY5MmRhYjZhODguc2V0Q29udGVudChodG1sXzg2Yzk4ZTI1NzRlZTRkZjRhZjc3MGVmZjM4MWMxNzE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE2YzkwMWEyNWE1MjRlNzFhMzY0ZTEzN2JmZjZiODRkLmJpbmRQb3B1cChwb3B1cF9jNjY2NWVjNTRjMGQ0YWZiOWQ0NTEzNjkyZGFiNmE4OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NWE3ODUxNWIxMTI0NmRhYjlhNjBjMjNhZDM5NWYyMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NDE2OTM2NSwtNDMuOTM4MTM0OTU5NTQ2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZmQzY2M1OGZhOTI0NDhiOWQ0NDBmZGQ0YjEzY2U2NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZmI4YTE4YWM2OTI0ZDQ4ODhlNjI0NGU1Y2FmMDdmYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNmZiOGExOGFjNjkyNGQ0ODg4ZTYyNDRlNWNhZjA3ZmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhFTElPUE9MSVM6ICgtMTkuODQxNjkzNjUsIC00My45MzgxMzQ5NTk1NDY0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2ZkM2NjNThmYTkyNDQ4YjlkNDQwZmRkNGIxM2NlNjcuc2V0Q29udGVudChodG1sXzZmYjhhMThhYzY5MjRkNDg4OGU2MjQ0ZTVjYWYwN2ZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU1YTc4NTE1YjExMjQ2ZGFiOWE2MGMyM2FkMzk1ZjIzLmJpbmRQb3B1cChwb3B1cF8zZmQzY2M1OGZhOTI0NDhiOWQ0NDBmZGQ0YjEzY2U2Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNzJjMzhiOTI1YTM0OGYzOTAzOTlkODEwNzNjYTliYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MDIxNzMyNSwtNDMuOTQ2NjkxNzI5MDQ1MDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjA5NTMwNGI2ZjkyNDVkNjk2OTBkMDY0ZjcwNzRmOTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTU4NWE5YWIxYWI0NDQ1NDg1OGU1NDQ2ZjE5YzVkNmEgPSAkKCc8ZGl2IGlkPSJodG1sXzk1ODVhOWFiMWFiNDQ0NTQ4NThlNTQ0NmYxOWM1ZDZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JQVBJOiAoLTE5LjkwMjE3MzI1LCAtNDMuOTQ2NjkxNzI5MDQ1MDkpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MDk1MzA0YjZmOTI0NWQ2OTY5MGQwNjRmNzA3NGY5Mi5zZXRDb250ZW50KGh0bWxfOTU4NWE5YWIxYWI0NDQ1NDg1OGU1NDQ2ZjE5YzVkNmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjcyYzM4YjkyNWEzNDhmMzkwMzk5ZDgxMDczY2E5YmIuYmluZFBvcHVwKHBvcHVwXzYwOTUzMDRiNmY5MjQ1ZDY5NjkwZDA2NGY3MDc0ZjkyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwZTk0ZTE5YjNjODRiMmQ5ZWMxZDhlZWVkMDEwNGZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwNjkyNzY5OTk5OTk5NywtNDMuOTk4MTMxMzEyOTUxNTE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhjZjY1YzZmYjAxNzQyM2VhYzY0ZDJmNWFhODVlNmY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ2YmQ4MDU3MDQ1NTRkOTM4MDg4OWYxZjhmNGIwNGQ2ID0gJCgnPGRpdiBpZD0iaHRtbF80NmJkODA1NzA0NTU0ZDkzODA4ODlmMWY4ZjRiMDRkNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SU5DT05GSURFTkNJQTogKC0xOS45MDY5Mjc2OTk5OTk5OTcsIC00My45OTgxMzEzMTI5NTE1MTQpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84Y2Y2NWM2ZmIwMTc0MjNlYWM2NGQyZjVhYTg1ZTZmNy5zZXRDb250ZW50KGh0bWxfNDZiZDgwNTcwNDU1NGQ5MzgwODg5ZjFmOGY0YjA0ZDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjBlOTRlMTliM2M4NGIyZDllYzFkOGVlZWQwMTA0ZmEuYmluZFBvcHVwKHBvcHVwXzhjZjY1YzZmYjAxNzQyM2VhYzY0ZDJmNWFhODVlNmY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E0NGUzOTE1ZDUyYzQ4YWQ5MjBiZTJmOTY4NDA0MjAyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIwLjAxOTI2OTI1LC00NC4wMzM1NTIyMjgzMzA0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNzVlYzc1YzdlMzY0OGM2ODFjMzRlMGViNjA0N2E4MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZDBiZWRjMzQxMmI0YjZjYjc2YThkYWQzZWEwMzk3YyA9ICQoJzxkaXYgaWQ9Imh0bWxfNWQwYmVkYzM0MTJiNGI2Y2I3NmE4ZGFkM2VhMDM5N2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklOREVQRU5ERU5DSUE6ICgtMjAuMDE5MjY5MjUsIC00NC4wMzM1NTIyMjgzMzA0Mik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3NWVjNzVjN2UzNjQ4YzY4MWMzNGUwZWI2MDQ3YTgxLnNldENvbnRlbnQoaHRtbF81ZDBiZWRjMzQxMmI0YjZjYjc2YThkYWQzZWEwMzk3Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNDRlMzkxNWQ1MmM0OGFkOTIwYmUyZjk2ODQwNDIwMi5iaW5kUG9wdXAocG9wdXBfYTc1ZWM3NWM3ZTM2NDhjNjgxYzM0ZTBlYjYwNDdhODEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjZjYTJkNGI0NTAyNDUzMzkwN2M1OGIxOWVjNWY2OTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODE3ODE3NCwtNDMuODkyNjQxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNTljMjEyZWMzNGQ0NTFlYTljNWZjOWY0M2Y4ZjUyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYmMwNmZjMDFiMmU0NWFjYTAyZDk3ODMyMWIwZGQyNSA9ICQoJzxkaXYgaWQ9Imh0bWxfZmJjMDZmYzAxYjJlNDVhY2EwMmQ5NzgzMjFiMGRkMjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklORFVTVFJJQUwgUk9EUklHVUVTOiAoLTE5LjgxNzgxNzQsIC00My44OTI2NDEyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTU5YzIxMmVjMzRkNDUxZWE5YzVmYzlmNDNmOGY1MmUuc2V0Q29udGVudChodG1sX2ZiYzA2ZmMwMWIyZTQ1YWNhMDJkOTc4MzIxYjBkZDI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI2Y2EyZDRiNDUwMjQ1MzM5MDdjNThiMTllYzVmNjk5LmJpbmRQb3B1cChwb3B1cF8xNTljMjEyZWMzNGQ0NTFlYTljNWZjOWY0M2Y4ZjUyZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YTI0NjE3OGYyZGY0YTViYTk2Yjg4ZjUwMDkwMWIwNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45Njc5MjYzLC00My45NzcwODMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3ZDA4ZGJjYWUzYTRiZmI4NjNjYjk1OGZlYzFjNjM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4MzE5ZDBjYjA2YjRmZjhhZmQzN2E3MWI1NmM3Zjg1ID0gJCgnPGRpdiBpZD0iaHRtbF9iODMxOWQwY2IwNmI0ZmY4YWZkMzdhNzFiNTZjN2Y4NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q1VOSEE6ICgtMTkuOTY3OTI2MywgLTQzLjk3NzA4MzMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kN2QwOGRiY2FlM2E0YmZiODYzY2I5NThmZWMxYzYzNS5zZXRDb250ZW50KGh0bWxfYjgzMTlkMGNiMDZiNGZmOGFmZDM3YTcxYjU2YzdmODUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWEyNDYxNzhmMmRmNGE1YmE5NmI4OGY1MDA5MDFiMDUuYmluZFBvcHVwKHBvcHVwX2Q3ZDA4ZGJjYWUzYTRiZmI4NjNjYjk1OGZlYzFjNjM1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FkZGVmNDQ2ZmIxYjQ0ZWE4ZGRiNWI5YmZlY2ZlZGI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkxMjAyMTQsLTQzLjk5ODUyMjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDRhNDJkMmMwNzE4NDcyNzkwYzIxOGFjNTM5ZjljMmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTFhZGQ1MWJhMTk1NDAzZjhkZTAwZmVlODNhMTQ2ZTUgPSAkKCc8ZGl2IGlkPSJodG1sX2UxYWRkNTFiYTE5NTQwM2Y4ZGUwMGZlZTgzYTE0NmU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JUEFORU1BOiAoLTE5LjkxMjAyMTQsIC00My45OTg1MjI2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDRhNDJkMmMwNzE4NDcyNzkwYzIxOGFjNTM5ZjljMmYuc2V0Q29udGVudChodG1sX2UxYWRkNTFiYTE5NTQwM2Y4ZGUwMGZlZTgzYTE0NmU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FkZGVmNDQ2ZmIxYjQ0ZWE4ZGRiNWI5YmZlY2ZlZGI1LmJpbmRQb3B1cChwb3B1cF8wNGE0MmQyYzA3MTg0NzI3OTBjMjE4YWM1MzlmOWMyZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZjgyZWYxYmEwNzk0ZWRjYmZiZjA0MjRlZWNiYWZiNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44ODE3NzQ2LC00My45MzIyNjU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5NGM2YmNhNzJkNTQ4MTdiZWIyY2VlMTk2MzU0MmJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ViYmU1MzIwOGJhODQ5YjU5NjdiNDFiOTg3MTYxMjNlID0gJCgnPGRpdiBpZD0iaHRtbF9lYmJlNTMyMDhiYTg0OWI1OTY3YjQxYjk4NzE2MTIzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SVBJUkFOR0E6ICgtMTkuODgxNzc0NiwgLTQzLjkzMjI2NTkpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOTRjNmJjYTcyZDU0ODE3YmViMmNlZTE5NjM1NDJiZS5zZXRDb250ZW50KGh0bWxfZWJiZTUzMjA4YmE4NDliNTk2N2I0MWI5ODcxNjEyM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGY4MmVmMWJhMDc5NGVkY2JmYmYwNDI0ZWVjYmFmYjcuYmluZFBvcHVwKHBvcHVwXzE5NGM2YmNhNzJkNTQ4MTdiZWIyY2VlMTk2MzU0MmJlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IzMDc1NjRmMDRmZDRjNzA5MjIwNjFlNDhlZjJlNjdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgwMzM1MzY1LC00My45MzIzNDg3NzQ4OTc3OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMzBiMWQyMWFiNTM0Y2RjOWM1Y2Y5YjQyOTk3Mjk5MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYjI0MzM1OTM0NWM0NDA5ODk0MmMyNGU1MWUxZmVjMCA9ICQoJzxkaXYgaWQ9Imh0bWxfZGIyNDMzNTkzNDVjNDQwOTg5NDJjMjRlNTFlMWZlYzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpBUVVFTElORTogKC0xOS44MDMzNTM2NSwgLTQzLjkzMjM0ODc3NDg5Nzc5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTMwYjFkMjFhYjUzNGNkYzljNWNmOWI0Mjk5NzI5OTEuc2V0Q29udGVudChodG1sX2RiMjQzMzU5MzQ1YzQ0MDk4OTQyYzI0ZTUxZTFmZWMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IzMDc1NjRmMDRmZDRjNzA5MjIwNjFlNDhlZjJlNjdlLmJpbmRQb3B1cChwb3B1cF8xMzBiMWQyMWFiNTM0Y2RjOWM1Y2Y5YjQyOTk3Mjk5MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lOWYyNWYxODJlYmU0NDE3OGNlYjNlNjU0ZTE1N2JlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44OTc0NzIzNSwtNDMuOTg4ODM1NTEzODY0ODU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5YzdkZjg3MWM0MTRlMDJhZmMxZTFjOWMxNTk4NjUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZhYTJhYWZlYjhlNDRmMGRiNmQwZDZhNWNkMWUxNGY2ID0gJCgnPGRpdiBpZD0iaHRtbF9mYWEyYWFmZWI4ZTQ0ZjBkYjZkMGQ2YTVjZDFlMTRmNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFSRElNIEFMVk9SQURBOiAoLTE5Ljg5NzQ3MjM1LCAtNDMuOTg4ODM1NTEzODY0ODU2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTljN2RmODcxYzQxNGUwMmFmYzFlMWM5YzE1OTg2NTMuc2V0Q29udGVudChodG1sX2ZhYTJhYWZlYjhlNDRmMGRiNmQwZDZhNWNkMWUxNGY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U5ZjI1ZjE4MmViZTQ0MTc4Y2ViM2U2NTRlMTU3YmUzLmJpbmRQb3B1cChwb3B1cF85OWM3ZGY4NzFjNDE0ZTAyYWZjMWUxYzljMTU5ODY1Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZTQ2OGI4NzZhZjI0NjQyYWQ4Y2ExNzRhZjQwYmQ5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS43OTIzNTk0MDAwMDAwMDIsLTQzLjk3MDA0OTUxMjAzODYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBlZWJhOWI5Yjk5OTQzNDRiNjY1YTAwNjUyMDljN2YxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEyNzEzYzM2YWMwMjQzNTA4MTk2NDk3ODg1OWE4NTM4ID0gJCgnPGRpdiBpZD0iaHRtbF8xMjcxM2MzNmFjMDI0MzUwODE5NjQ5Nzg4NTlhODUzOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFSRElNIENPTUVSQ0lBUklPUzogKC0xOS43OTIzNTk0MDAwMDAwMDIsIC00My45NzAwNDk1MTIwMzg2Myk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlZWJhOWI5Yjk5OTQzNDRiNjY1YTAwNjUyMDljN2YxLnNldENvbnRlbnQoaHRtbF8xMjcxM2MzNmFjMDI0MzUwODE5NjQ5Nzg4NTlhODUzOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZTQ2OGI4NzZhZjI0NjQyYWQ4Y2ExNzRhZjQwYmQ5My5iaW5kUG9wdXAocG9wdXBfMGVlYmE5YjliOTk5NDM0NGI2NjVhMDA2NTIwOWM3ZjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2EzYTVkZjU3OGE4NGQ1YTliNWY0OWI3NDFjNzg3YmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODAyMjEzLC00My45NjcwNjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I5MDMwYTU2ZWUzMDRjOWI5NjdlYjdiMDQ5YWUxMDZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlY2NlYTVlOWE5YTQ0ZTdhMzJkNzE2MzM4YjU1YWU1ID0gJCgnPGRpdiBpZD0iaHRtbF9lZWNjZWE1ZTlhOWE0NGU3YTMyZDcxNjMzOGI1NWFlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFSRElNIEVVUk9QQTogKC0xOS44MDIyMTMsIC00My45NjcwNjY3KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjkwMzBhNTZlZTMwNGM5Yjk2N2ViN2IwNDlhZTEwNmIuc2V0Q29udGVudChodG1sX2VlY2NlYTVlOWE5YTQ0ZTdhMzJkNzE2MzM4YjU1YWU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNhM2E1ZGY1NzhhODRkNWE5YjVmNDliNzQxYzc4N2JmLmJpbmRQb3B1cChwb3B1cF9iOTAzMGE1NmVlMzA0YzliOTY3ZWI3YjA0OWFlMTA2Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZTRkZDJkN2RjZTQ0ZjQzYWJmN2RkYjZhZTViOTYwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MjczMTA3LC00My45MjY5MjExMjI4MTMxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NzQ2YTkwZjJmNGI0NjdhYmU0ZmNiODg4MjkwNjJjMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNTVlY2RmZGE4NmE0OGZhYTQwZDQ4ZTVjNDE5NDQ0YSA9ICQoJzxkaXYgaWQ9Imh0bWxfYjU1ZWNkZmRhODZhNDhmYWE0MGQ0OGU1YzQxOTQ0NGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpBUkRJTSBGRUxJQ0lEQURFOiAoLTE5LjgyNzMxMDcsIC00My45MjY5MjExMjI4MTMxNCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc3NDZhOTBmMmY0YjQ2N2FiZTRmY2I4ODgyOTA2MmMzLnNldENvbnRlbnQoaHRtbF9iNTVlY2RmZGE4NmE0OGZhYTQwZDQ4ZTVjNDE5NDQ0YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZTRkZDJkN2RjZTQ0ZjQzYWJmN2RkYjZhZTViOTYwOC5iaW5kUG9wdXAocG9wdXBfNzc0NmE5MGYyZjRiNDY3YWJlNGZjYjg4ODI5MDYyYzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmVhYWY5M2QxNGM1NGZiMWJiYWVmNDRkMjUxYTE4YWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTEwNzkwNywtNDQuMDA3Njg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JjMmE3MjA5MjA4MDRkZGJhZmY4NmY2MmZmOTJkNzQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M2MGZhZWRiNjZhYjRmYWFiZDFmMDk2MGQ2OTZiNDRmID0gJCgnPGRpdiBpZD0iaHRtbF9jNjBmYWVkYjY2YWI0ZmFhYmQxZjA5NjBkNjk2YjQ0ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFSRElNIEZJTEFERUxGSUE6ICgtMTkuOTEwNzkwNywgLTQ0LjAwNzY4NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JjMmE3MjA5MjA4MDRkZGJhZmY4NmY2MmZmOTJkNzQ2LnNldENvbnRlbnQoaHRtbF9jNjBmYWVkYjY2YWI0ZmFhYmQxZjA5NjBkNjk2YjQ0Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZWFhZjkzZDE0YzU0ZmIxYmJhZWY0NGQyNTFhMThhYy5iaW5kUG9wdXAocG9wdXBfYmMyYTcyMDkyMDgwNGRkYmFmZjg2ZjYyZmY5MmQ3NDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWM2NTAwY2I2YTQ0NGM5Y2IzOTY1Zjc2OTQ4MTAyOTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODI3NjMxMiwtNDMuOTM1ODc0OTQzNzI5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWI2YTQwZTRiMGY4NDQxMWJmNGNhODA5ZGMwOTcyOWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjI5Nzg5NjBiOTA5NDYwNjlkZThjYzRlMmJiZTgwYWMgPSAkKCc8ZGl2IGlkPSJodG1sXzYyOTc4OTYwYjkwOTQ2MDY5ZGU4Y2M0ZTJiYmU4MGFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KQVJESU0gR1VBTkFCQVJBOiAoLTE5LjgyNzYzMTIsIC00My45MzU4NzQ5NDM3Mjk5OSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ViNmE0MGU0YjBmODQ0MTFiZjRjYTgwOWRjMDk3MjlmLnNldENvbnRlbnQoaHRtbF82Mjk3ODk2MGI5MDk0NjA2OWRlOGNjNGUyYmJlODBhYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYzY1MDBjYjZhNDQ0YzljYjM5NjVmNzY5NDgxMDI5Ni5iaW5kUG9wdXAocG9wdXBfZWI2YTQwZTRiMGY4NDQxMWJmNGNhODA5ZGMwOTcyOWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDk1MDcwZDRhMjA0NDA1ODgyY2M2ZWQ2NzA2NWZmZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTA3MjIxOTUsLTQzLjk4MTYzNzI2MDc3MTY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5ODYwZjc1ZTk0MzQ1Y2M5ZDZjNTM0NjZmZWYyNDJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QzMTZlMjQxZTFkNDQzNzRiZWRkYWVhNzg5MWUwNGE4ID0gJCgnPGRpdiBpZD0iaHRtbF9kMzE2ZTI0MWUxZDQ0Mzc0YmVkZGFlYTc4OTFlMDRhOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFSRElNIE1PTlRBTkhFUzogKC0xOS45MDcyMjE5NSwgLTQzLjk4MTYzNzI2MDc3MTY2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODk4NjBmNzVlOTQzNDVjYzlkNmM1MzQ2NmZlZjI0MmEuc2V0Q29udGVudChodG1sX2QzMTZlMjQxZTFkNDQzNzRiZWRkYWVhNzg5MWUwNGE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q5NTA3MGQ0YTIwNDQwNTg4MmNjNmVkNjcwNjVmZmQwLmJpbmRQb3B1cChwb3B1cF84OTg2MGY3NWU5NDM0NWNjOWQ2YzUzNDY2ZmVmMjQyYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85OTkwMjU3ODZlN2I0YzVmYTRlOGRkN2FmMGU3ZDRiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTMyMTAzLC00My44NzIxNjg2NTQ1OTAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYWY0ZjI0MzM0N2M0MDVhYWZmMTMzYjQyNTQyM2JmYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NDYxZDcxYTgxNzA0MmRlOGQzZWY3ODRkYzQ2MmY0NiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDQ2MWQ3MWE4MTcwNDJkZThkM2VmNzg0ZGM0NjJmNDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpBUkRJTSBWSVRPUklBOiAoLTE5Ljg1MzIxMDMsIC00My44NzIxNjg2NTQ1OTAwNCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhZjRmMjQzMzQ3YzQwNWFhZmYxMzNiNDI1NDIzYmZiLnNldENvbnRlbnQoaHRtbF80NDYxZDcxYTgxNzA0MmRlOGQzZWY3ODRkYzQ2MmY0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85OTkwMjU3ODZlN2I0YzVmYTRlOGRkN2FmMGU3ZDRiNC5iaW5kUG9wdXAocG9wdXBfZGFmNGYyNDMzNDdjNDA1YWFmZjEzM2I0MjU0MjNiZmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODllY2Q5OWEwYTIxNDUxYmJlMzAyODQwNmI1ZTBhNTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQxODg0NCwtNDQuMDAzMDU1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81N2M2MDZiNDQxNDY0YjU4OTY5YjYwYzY3NWJiOTQ0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iM2QzZWQzZGJkOTM0ZDZmYWEwYmMxMTVjNjZkMTNlMyA9ICQoJzxkaXYgaWQ9Imh0bWxfYjNkM2VkM2RiZDkzNGQ2ZmFhMGJjMTE1YzY2ZDEzZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpBUkRJTk9QT0xJUzogKC0xOS45NDE4ODQ0LCAtNDQuMDAzMDU1NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU3YzYwNmI0NDE0NjRiNTg5NjliNjBjNjc1YmI5NDRhLnNldENvbnRlbnQoaHRtbF9iM2QzZWQzZGJkOTM0ZDZmYWEwYmMxMTVjNjZkMTNlMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84OWVjZDk5YTBhMjE0NTFiYmUzMDI4NDA2YjVlMGE1Ny5iaW5kUG9wdXAocG9wdXBfNTdjNjA2YjQ0MTQ2NGI1ODk2OWI2MGM2NzViYjk0NGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2UyYmNlMTg3MDVmNGMyZmFlYWFmMzRhMDE5MjgwNjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTkxNDkyMzUsLTQ0LjA1NDUwMDcxODYwMjY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAwYTc5NzUyMjliYjQwMzRiZjY3N2M2OGRlZjhmNzI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjOGMxOTgzMDI1OTQ4MWQ4ODIwYTYwNDBiZjRhN2E5ID0gJCgnPGRpdiBpZD0iaHRtbF9kYzhjMTk4MzAyNTk0ODFkODgyMGE2MDQwYmY0YTdhOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SkFUT0JBOiAoLTE5Ljk5MTQ5MjM1LCAtNDQuMDU0NTAwNzE4NjAyNjUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMGE3OTc1MjI5YmI0MDM0YmY2NzdjNjhkZWY4ZjcyNC5zZXRDb250ZW50KGh0bWxfZGM4YzE5ODMwMjU5NDgxZDg4MjBhNjA0MGJmNGE3YTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2UyYmNlMTg3MDVmNGMyZmFlYWFmMzRhMDE5MjgwNjAuYmluZFBvcHVwKHBvcHVwXzAwYTc5NzUyMjliYjQwMzRiZjY3N2M2OGRlZjhmNzI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZlZjE0NTkzMTUzZjQ5ZTNhNWNiNjlkNWMyZGNlYmI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgxNjMyODYsLTQzLjk0MzYwODI2OTA0OTc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg1ZGMyNDJmNzZiNDQwMDg4ZGU3NzJjNTNlMjUyNDdhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QzMDEyYzFjNTg3NDQwNDJhODA0ZDJhOTMzODhiZDg1ID0gJCgnPGRpdiBpZD0iaHRtbF9kMzAxMmMxYzU4NzQ0MDQyYTgwNGQyYTkzMzg4YmQ4NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SlVMSUFOQTogKC0xOS44MTYzMjg2LCAtNDMuOTQzNjA4MjY5MDQ5NzQpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NWRjMjQyZjc2YjQ0MDA4OGRlNzcyYzUzZTI1MjQ3YS5zZXRDb250ZW50KGh0bWxfZDMwMTJjMWM1ODc0NDA0MmE4MDRkMmE5MzM4OGJkODUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmVmMTQ1OTMxNTNmNDllM2E1Y2I2OWQ1YzJkY2ViYjQuYmluZFBvcHVwKHBvcHVwXzg1ZGMyNDJmNzZiNDQwMDg4ZGU3NzJjNTNlMjUyNDdhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JlYjMwYWRmZTc4ZDQ5MDJiY2M3NTk5ZDQ2OGY5N2Q5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgxMDIwMzcsLTQ0LjAwMDQ0Mjg0NTU1NjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkNTdiMWM4YTcxMDQ2MWNhMGJkNGQ0MjU0YzA1ZWU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI0NWE4NzdkODMzYjQwNzRhNjg5YmQzNzhmNTNhYjc2ID0gJCgnPGRpdiBpZD0iaHRtbF8yNDVhODc3ZDgzM2I0MDc0YTY4OWJkMzc4ZjUzYWI3NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TEFHT0E6ICgtMTkuODEwMjAzNywgLTQ0LjAwMDQ0Mjg0NTU1NjIyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmQ1N2IxYzhhNzEwNDYxY2EwYmQ0ZDQyNTRjMDVlZTYuc2V0Q29udGVudChodG1sXzI0NWE4NzdkODMzYjQwNzRhNjg5YmQzNzhmNTNhYjc2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JlYjMwYWRmZTc4ZDQ5MDJiY2M3NTk5ZDQ2OGY5N2Q5LmJpbmRQb3B1cChwb3B1cF82ZDU3YjFjOGE3MTA0NjFjYTBiZDRkNDI1NGMwNWVlNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNDdjYjU2N2Q4MWY0ZmU4OTEyM2Q1YWNlNTU3MmU3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MjIzOTExLC00My45NTg2NTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzljOTEzNWU1ZWQzOTQ0OTI4NWNhOWJmYTI4ZDRmYzIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhkNTUyOTA4YTUwOTRlMjVhYWMzYTJkMjc0NDRkZDJmID0gJCgnPGRpdiBpZD0iaHRtbF84ZDU1MjkwOGE1MDk0ZTI1YWFjM2EyZDI3NDQ0ZGQyZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TEVCTE9OOiAoLTE5LjkyMjM5MTEsIC00My45NTg2NTM5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWM5MTM1ZTVlZDM5NDQ5Mjg1Y2E5YmZhMjhkNGZjMjEuc2V0Q29udGVudChodG1sXzhkNTUyOTA4YTUwOTRlMjVhYWMzYTJkMjc0NDRkZDJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q0N2NiNTY3ZDgxZjRmZTg5MTIzZDVhY2U1NTcyZTdhLmJpbmRQb3B1cChwb3B1cF85YzkxMzVlNWVkMzk0NDkyODVjYTliZmEyOGQ0ZmMyMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMTFiY2ZlMDVlYmY0MTEyODNmMDY2MTk4YjliZmY2OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MDczODczMDAwMDAwMDIsLTQzLjk3ODMzNDM4NTk0MzUyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82Y2RhNWE2ZmZhOTY0YzE5OTNlNjdhZGFlMjI0ZDc1MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNWJhNWM5NzJiNmY0NGIzOTEyMmFmNjcyYjY2MTg5MCA9ICQoJzxkaXYgaWQ9Imh0bWxfYzViYTVjOTcyYjZmNDRiMzkxMjJhZjY3MmI2NjE4OTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxFVElDSUE6ICgtMTkuODA3Mzg3MzAwMDAwMDAyLCAtNDMuOTc4MzM0Mzg1OTQzNTI2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmNkYTVhNmZmYTk2NGMxOTkzZTY3YWRhZTIyNGQ3NTMuc2V0Q29udGVudChodG1sX2M1YmE1Yzk3MmI2ZjQ0YjM5MTIyYWY2NzJiNjYxODkwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMxMWJjZmUwNWViZjQxMTI4M2YwNjYxOThiOWJmZjY5LmJpbmRQb3B1cChwb3B1cF82Y2RhNWE2ZmZhOTY0YzE5OTNlNjdhZGFlMjI0ZDc1Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMjIzYWNhYmNkNWI0MmQ5OWExZmQzZDkwNDYwYjQzNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45Nzc0MTM3LC00NC4wNTA2MzU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE3ZjFmZTg3NTBlYTQyYTE5OTc1OGJlNzZkYWRkMjViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I2MWIxMDg1YTA3ZjRhMWZiZTczZTAzZTk1Yjg1OTYyID0gJCgnPGRpdiBpZD0iaHRtbF9iNjFiMTA4NWEwN2Y0YTFmYmU3M2UwM2U5NWI4NTk2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TElOREVJQTogKC0xOS45Nzc0MTM3LCAtNDQuMDUwNjM1NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE3ZjFmZTg3NTBlYTQyYTE5OTc1OGJlNzZkYWRkMjViLnNldENvbnRlbnQoaHRtbF9iNjFiMTA4NWEwN2Y0YTFmYmU3M2UwM2U5NWI4NTk2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMjIzYWNhYmNkNWI0MmQ5OWExZmQzZDkwNDYwYjQzNC5iaW5kUG9wdXAocG9wdXBfMTdmMWZlODc1MGVhNDJhMTk5NzU4YmU3NmRhZGQyNWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjQ5OTgxZmM4YzVhNGM3Mjk4ZmUzMjc1ZTg2YjQ5N2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTUwMzI2MSwtNDQuMDA2ODIxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MDkyOGY4ZGE0NzA0ZDc5ODBmYjY4YjgwM2NjMjY3ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMTYyZTkxYzhmZjk0ZDUwOTIyOTI1ODcwMDA5NTg1NCA9ICQoJzxkaXYgaWQ9Imh0bWxfMzE2MmU5MWM4ZmY5NGQ1MDkyMjkyNTg3MDAwOTU4NTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BRFJFIEdFUlRSVURFUzogKC0xOS45NTAzMjYxLCAtNDQuMDA2ODIxMik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgwOTI4ZjhkYTQ3MDRkNzk4MGZiNjhiODAzY2MyNjdmLnNldENvbnRlbnQoaHRtbF8zMTYyZTkxYzhmZjk0ZDUwOTIyOTI1ODcwMDA5NTg1NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNDk5ODFmYzhjNWE0YzcyOThmZTMyNzVlODZiNDk3Zi5iaW5kUG9wdXAocG9wdXBfODA5MjhmOGRhNDcwNGQ3OTgwZmI2OGI4MDNjYzI2N2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODUwZDBkYjQ4NTQ5NGIzMGJkMWU5N2UzYzU4NThlMjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQ5NDg1NywtNDQuMDk3MjU2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMGViNTllOTMwNTk0NjE1YmYwNTk4YjBkOWVmZGNjYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jODA4ZjljNzY3NDE0ZWIzYTQyNjQxYzkxYzdhNTk5NSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzgwOGY5Yzc2NzQxNGViM2E0MjY0MWM5MWM3YTU5OTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BR05FU0lUQTogKC0xOS45NDk0ODU3LCAtNDQuMDk3MjU2Mik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwZWI1OWU5MzA1OTQ2MTViZjA1OThiMGQ5ZWZkY2NhLnNldENvbnRlbnQoaHRtbF9jODA4ZjljNzY3NDE0ZWIzYTQyNjQxYzkxYzdhNTk5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NTBkMGRiNDg1NDk0YjMwYmQxZTk3ZTNjNTg1OGUyOS5iaW5kUG9wdXAocG9wdXBfMjBlYjU5ZTkzMDU5NDYxNWJmMDU5OGIwZDllZmRjY2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWQzNGVkMWJhZmU2NDkzZmIyMjQ1NGRjNTgzYTU5NDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuNzkyODcwNTUsLTQzLjk4MzMzMTU2MTY4MTkzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMzEzODhmZWYxZTM0MTNhOGMwNDgzY2FlNjU0ZGFmYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYTQ2ZTg4MWRhMmY0ZWFkYWMwYzQwNWFiMTE5MjkzOSA9ICQoJzxkaXYgaWQ9Imh0bWxfYWE0NmU4ODFkYTJmNGVhZGFjMGM0MDVhYjExOTI5MzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1BTlRJUVVFSVJBOiAoLTE5Ljc5Mjg3MDU1LCAtNDMuOTgzMzMxNTYxNjgxOTM2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjMxMzg4ZmVmMWUzNDEzYThjMDQ4M2NhZTY1NGRhZmMuc2V0Q29udGVudChodG1sX2FhNDZlODgxZGEyZjRlYWRhYzBjNDA1YWIxMTkyOTM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlkMzRlZDFiYWZlNjQ5M2ZiMjI0NTRkYzU4M2E1OTQxLmJpbmRQb3B1cChwb3B1cF9mMzEzODhmZWYxZTM0MTNhOGMwNDgzY2FlNjU0ZGFmYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNjhkZmE5YmRjYzU0YWM4YWI2YWIyZTliZTFiNjA2YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NTg5MDU3LC00My45ODEwMjIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM4MGRhOGY2NWEyODQ1MmE4ODFmYzExMTNlNWFhN2IwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4ZjRiYmM4YTkyMjQ5YTA4NDIzMjg5YTI1NWUzMDRkID0gJCgnPGRpdiBpZD0iaHRtbF8zOGY0YmJjOGE5MjI0OWEwODQyMzI4OWEyNTVlMzA0ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFSQUpPOiAoLTE5Ljk1ODkwNTcsIC00My45ODEwMjIzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzgwZGE4ZjY1YTI4NDUyYTg4MWZjMTExM2U1YWE3YjAuc2V0Q29udGVudChodG1sXzM4ZjRiYmM4YTkyMjQ5YTA4NDIzMjg5YTI1NWUzMDRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I2OGRmYTliZGNjNTRhYzhhYjZhYjJlOWJlMWI2MDZjLmJpbmRQb3B1cChwb3B1cF8zODBkYThmNjVhMjg0NTJhODgxZmMxMTEzZTVhYTdiMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81Mzc3N2ExY2MzMWE0NmM0YmQ2NTBkYmVlNmVhNWUyNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS43OTg4NTgwNSwtNDMuOTk0ODU1ODk5MTgwMjE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI3MzgxMWYyOGQwYjQ2NGU4NzUxMjZkOWIyMTY0Mzk2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhNDZlNmFkMWJkMTQ4OTI5MTg5OTQ0MjA2YWUxZDZjID0gJCgnPGRpdiBpZD0iaHRtbF9lYTQ2ZTZhZDFiZDE0ODkyOTE4OTk0NDIwNmFlMWQ2YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFSSUEgSEVMRU5BOiAoLTE5Ljc5ODg1ODA1LCAtNDMuOTk0ODU1ODk5MTgwMjE2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjczODExZjI4ZDBiNDY0ZTg3NTEyNmQ5YjIxNjQzOTYuc2V0Q29udGVudChodG1sX2VhNDZlNmFkMWJkMTQ4OTI5MTg5OTQ0MjA2YWUxZDZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUzNzc3YTFjYzMxYTQ2YzRiZDY1MGRiZWU2ZWE1ZTI3LmJpbmRQb3B1cChwb3B1cF8yNzM4MTFmMjhkMGI0NjRlODc1MTI2ZDliMjE2NDM5Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MjYzM2QwY2RhMGY0MmY3YmQxNzVjNDljODE3ZWIyZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44Njg3MzEwNSwtNDMuOTMzNzU4NTQ1ODg2MjM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlMjkwYTIyNDU2YjRiZTJiMGNjNzM5ZGI5MjU1OTUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3ZjhmMzg4MGI3YjRiOWU5MGI5YWQ0ZmI4Y2Q2ZjhiID0gJCgnPGRpdiBpZD0iaHRtbF8wN2Y4ZjM4ODBiN2I0YjllOTBiOWFkNGZiOGNkNmY4YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFSSUEgVklSR0lOSUE6ICgtMTkuODY4NzMxMDUsIC00My45MzM3NTg1NDU4ODYyMzUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZTI5MGEyMjQ1NmI0YmUyYjBjYzczOWRiOTI1NTk1MC5zZXRDb250ZW50KGh0bWxfMDdmOGYzODgwYjdiNGI5ZTkwYjlhZDRmYjhjZDZmOGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTI2MzNkMGNkYTBmNDJmN2JkMTc1YzQ5YzgxN2ViMmYuYmluZFBvcHVwKHBvcHVwXzVlMjkwYTIyNDU2YjRiZTJiMGNjNzM5ZGI5MjU1OTUwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcwMmQzM2JkNDA4YzQxMjNhNDRkNTg3NjdhYzhiODgyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgyMTYyMDQsLTQzLjk0MTIzNzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTBlNThiYmU0N2ZmNDJlMTg0YjcxMzc2NDRiYjZkMTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWFiZTdlNjFiZmI4NGFhM2IzNjA1MjJiMzcyZGEwNjYgPSAkKCc8ZGl2IGlkPSJodG1sX2VhYmU3ZTYxYmZiODRhYTNiMzYwNTIyYjM3MmRhMDY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQVJJWkU6ICgtMTkuODIxNjIwNCwgLTQzLjk0MTIzNzEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMGU1OGJiZTQ3ZmY0MmUxODRiNzEzNzY0NGJiNmQxMi5zZXRDb250ZW50KGh0bWxfZWFiZTdlNjFiZmI4NGFhM2IzNjA1MjJiMzcyZGEwNjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzAyZDMzYmQ0MDhjNDEyM2E0NGQ1ODc2N2FjOGI4ODIuYmluZFBvcHVwKHBvcHVwXzEwZTU4YmJlNDdmZjQyZTE4NGI3MTM3NjQ0YmI2ZDEyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3OTJmNzdlM2UyMzQxMzc5ZDRiYmYxZTg0ZTVmMDM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk4MDUwNTYsLTQ0LjAwMTgzMDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGQwYWJjYjNjMGVlNDNiZmJlNzgwMTg2MmRkOTNjYzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTUyZGVhNzAxOWUyNDZlMWFhM2U1MDRmNmEyMDg0MGYgPSAkKCc8ZGl2IGlkPSJodG1sX2U1MmRlYTcwMTllMjQ2ZTFhYTNlNTA0ZjZhMjA4NDBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NSUxJT05BUklPUzogKC0xOS45ODA1MDU2LCAtNDQuMDAxODMwNyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRkMGFiY2IzYzBlZTQzYmZiZTc4MDE4NjJkZDkzY2M1LnNldENvbnRlbnQoaHRtbF9lNTJkZWE3MDE5ZTI0NmUxYWEzZTUwNGY2YTIwODQwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNzkyZjc3ZTNlMjM0MTM3OWQ0YmJmMWU4NGU1ZjAzOS5iaW5kUG9wdXAocG9wdXBfNGQwYWJjYjNjMGVlNDNiZmJlNzgwMTg2MmRkOTNjYzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDQ2YmEyYzQzMjQwNGQ0ODkwZDBlZWEzM2IxN2FhMzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODA4OTMzMSwtNDMuOTU0NzUwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOWJjZWYzN2NmZDU0YjNjYTg4YzBhZDJiMjU0YzY2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YjlhMGVjYWM1ZTc0ZWZlOTgwZGE3Y2MwOWE0MzU4ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNWI5YTBlY2FjNWU3NGVmZTk4MGRhN2NjMDlhNDM1OGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1JTkFTIENBSVhBOiAoLTE5LjgwODkzMzEsIC00My45NTQ3NTAzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzliY2VmMzdjZmQ1NGIzY2E4OGMwYWQyYjI1NGM2NjMuc2V0Q29udGVudChodG1sXzViOWEwZWNhYzVlNzRlZmU5ODBkYTdjYzA5YTQzNThlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA0NmJhMmM0MzI0MDRkNDg5MGQwZWVhMzNiMTdhYTM4LmJpbmRQb3B1cChwb3B1cF9jOWJjZWYzN2NmZDU0YjNjYTg4YzBhZDJiMjU0YzY2Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZTIxZjhkMGVlNGI0NzUxYmNkNGIyMzc5OTM2MmMxZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTIxMDMyNSwtNDMuOTMwNzkwOTYzODkzMjE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzYjMzYjEzNzhiYjRjMDY4Y2FhYzA2MjkyYWIzMjYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I3MDVhY2I5OWM3YjQyYjhiODQ3OWFkOTJhY2VmYWI1ID0gJCgnPGRpdiBpZD0iaHRtbF9iNzA1YWNiOTljN2I0MmI4Yjg0NzlhZDkyYWNlZmFiNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUlOQVNMQU5ESUE6ICgtMTkuODUyMTAzMjUsIC00My45MzA3OTA5NjM4OTMyMTYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wM2IzM2IxMzc4YmI0YzA2OGNhYWMwNjI5MmFiMzI2MS5zZXRDb250ZW50KGh0bWxfYjcwNWFjYjk5YzdiNDJiOGI4NDc5YWQ5MmFjZWZhYjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGUyMWY4ZDBlZTRiNDc1MWJjZDRiMjM3OTkzNjJjMWYuYmluZFBvcHVwKHBvcHVwXzAzYjMzYjEzNzhiYjRjMDY4Y2FhYzA2MjkyYWIzMjYxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JjYmE3OWQzYmJmMTRlNTE4OTU3YmQ2MDIwMDA5MTViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg1MTU1MDA5OTk5OTk5NywtNDMuODk2MjkyOTQ4NDY5NTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjVlYjg5NTI0YjM1NDdjYWJiOTQ3MjJhNGU0OTljYTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDU0N2FmODI5OWFkNDBhZGJkNTYyNzFjODMxZDZmNDkgPSAkKCc8ZGl2IGlkPSJodG1sXzQ1NDdhZjgyOTlhZDQwYWRiZDU2MjcxYzgzMWQ2ZjQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OQVpBUkU6ICgtMTkuODUxNTUwMDk5OTk5OTk3LCAtNDMuODk2MjkyOTQ4NDY5NTcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNWViODk1MjRiMzU0N2NhYmI5NDcyMmE0ZTQ5OWNhNS5zZXRDb250ZW50KGh0bWxfNDU0N2FmODI5OWFkNDBhZGJkNTYyNzFjODMxZDZmNDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmNiYTc5ZDNiYmYxNGU1MTg5NTdiZDYwMjAwMDkxNWIuYmluZFBvcHVwKHBvcHVwX2Y1ZWI4OTUyNGIzNTQ3Y2FiYjk0NzIyYTRlNDk5Y2E1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg2N2Q0YWI4OTg4MjQ4N2ViMTY5MWVkYmEwZWM0YWU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljc5NjUzMTEsLTQzLjk4ODgwNTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzBjNjk0ZmVkNTNkNDJlYWEzMmJhNTA1ZThmYTYyZDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmNlYmJmZTMyNDg1NGQ3ZGEwMjg2M2EyNGQ2ZWZiMTIgPSAkKCc8ZGl2IGlkPSJodG1sX2ZjZWJiZmUzMjQ4NTRkN2RhMDI4NjNhMjRkNmVmYjEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT1ZBIEFNRVJJQ0E6ICgtMTkuNzk2NTMxMSwgLTQzLjk4ODgwNTMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMGM2OTRmZWQ1M2Q0MmVhYTMyYmE1MDVlOGZhNjJkMi5zZXRDb250ZW50KGh0bWxfZmNlYmJmZTMyNDg1NGQ3ZGEwMjg2M2EyNGQ2ZWZiMTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODY3ZDRhYjg5ODgyNDg3ZWIxNjkxZWRiYTBlYzRhZTguYmluZFBvcHVwKHBvcHVwXzMwYzY5NGZlZDUzZDQyZWFhMzJiYTUwNWU4ZmE2MmQyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE4NjI0MjU1MzhmODQwMmVhMTdmZDQ5NTlmNzE0ODdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg4NDAxNDI5OTk5OTk5NywtNDMuOTU2MzM5NjkxNzcyMDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGI4YWY3ODUxZTVjNDVhYWI3ZTIyNDM0NDY4ODQ3ZTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTk3ZGUxY2Q5MjMzNDFjYjk1YjZjNjlmYmU3Y2Y1YmQgPSAkKCc8ZGl2IGlkPSJodG1sXzk5N2RlMWNkOTIzMzQxY2I5NWI2YzY5ZmJlN2NmNWJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT1ZBIENBQ0hPRUlSSU5IQTogKC0xOS44ODQwMTQyOTk5OTk5OTcsIC00My45NTYzMzk2OTE3NzIwOSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiOGFmNzg1MWU1YzQ1YWFiN2UyMjQzNDQ2ODg0N2UyLnNldENvbnRlbnQoaHRtbF85OTdkZTFjZDkyMzM0MWNiOTViNmM2OWZiZTdjZjViZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xODYyNDI1NTM4Zjg0MDJlYTE3ZmQ0OTU5ZjcxNDg3ZS5iaW5kUG9wdXAocG9wdXBfNGI4YWY3ODUxZTVjNDVhYWI3ZTIyNDM0NDY4ODQ3ZTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGU5Yjk2MDkwNjBkNDVjOWE0MTI1NzMyODI4MzU5ZGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQ5Nzc5MjUsLTQzLjk5MTY4NDQ2ODYyMzkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhODdiOTRjZmM2OTQ5YjdiMTRiZWRmZGU1YmJhNmE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiMmY2NTJiOTYwNDRjYzVhNDI0NWEyOTM3ZWRiOThjID0gJCgnPGRpdiBpZD0iaHRtbF8wYjJmNjUyYjk2MDQ0Y2M1YTQyNDVhMjkzN2VkYjk4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9WQSBDSU5UUkE6ICgtMTkuOTQ5Nzc5MjUsIC00My45OTE2ODQ0Njg2MjM5MSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhODdiOTRjZmM2OTQ5YjdiMTRiZWRmZGU1YmJhNmE0LnNldENvbnRlbnQoaHRtbF8wYjJmNjUyYjk2MDQ0Y2M1YTQyNDVhMjkzN2VkYjk4Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZTliOTYwOTA2MGQ0NWM5YTQxMjU3MzI4MjgzNTlkYS5iaW5kUG9wdXAocG9wdXBfZGE4N2I5NGNmYzY5NDliN2IxNGJlZGZkZTViYmE2YTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTJhOTAwNWQwMDg3NGZkMzhmNmNjMjRjNjQzZTdiMGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODk5NDA1MiwtNDMuOTU5MzgzMTY3NTIwMzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzMyMmE1NmQ5N2QyNGYwM2IyMmQxZDk3MzA0ZGViNGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTgzMTNmNjI5MGVkNGZhZDg4ZWMwYjdlZWVmZmIwMTMgPSAkKCc8ZGl2IGlkPSJodG1sX2E4MzEzZjYyOTBlZDRmYWQ4OGVjMGI3ZWVlZmZiMDEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT1ZBIEVTUEVSQU5DQTogKC0xOS44OTk0MDUyLCAtNDMuOTU5MzgzMTY3NTIwMzcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MzIyYTU2ZDk3ZDI0ZjAzYjIyZDFkOTczMDRkZWI0ZC5zZXRDb250ZW50KGh0bWxfYTgzMTNmNjI5MGVkNGZhZDg4ZWMwYjdlZWVmZmIwMTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTJhOTAwNWQwMDg3NGZkMzhmNmNjMjRjNjQzZTdiMGYuYmluZFBvcHVwKHBvcHVwXzczMjJhNTZkOTdkMjRmMDNiMjJkMWQ5NzMwNGRlYjRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg1ZDVjNTA2MDU4ZTRiNjliZmM0MWEzNjFjNjkxYjg1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0MTc5NzIsLTQzLjk5MjY4NjcyMjQ1MDUxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNWNhODhhMGNlZmM0MTdhYTUyNWVmMTA0NzZkOThjMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYzlkNDY5MjRkNjA0MmRkYTIyMzE1MDIyYzcwOTZiMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMWM5ZDQ2OTI0ZDYwNDJkZGEyMjMxNTAyMmM3MDk2YjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVkEgR0FNRUxFSVJBOiAoLTE5Ljk0MTc5NzIsIC00My45OTI2ODY3MjI0NTA1MTQpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNWNhODhhMGNlZmM0MTdhYTUyNWVmMTA0NzZkOThjMS5zZXRDb250ZW50KGh0bWxfMWM5ZDQ2OTI0ZDYwNDJkZGEyMjMxNTAyMmM3MDk2YjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODVkNWM1MDYwNThlNGI2OWJmYzQxYTM2MWM2OTFiODUuYmluZFBvcHVwKHBvcHVwX2I1Y2E4OGEwY2VmYzQxN2FhNTI1ZWYxMDQ3NmQ5OGMxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FjYWI4YzI2NWZkNTQ3ZWU5NDVkZGJhOGRmZDU1NmIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgzMTkzOSwtNDQuMDE3NjkyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OGM4ZTkxMTQyZTM0ZjA0YWQ2MTkwNzRmNjk4NjhjZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MGYwMWYyYjFiYzA0NjZjYjA1ZDVjYTQ1OWY3ZDM4YyA9ICQoJzxkaXYgaWQ9Imh0bWxfODBmMDFmMmIxYmMwNDY2Y2IwNWQ1Y2E0NTlmN2QzOGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVkEgUEFNUFVMSEE6ICgtMTkuODMxOTM5LCAtNDQuMDE3NjkyMyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk4YzhlOTExNDJlMzRmMDRhZDYxOTA3NGY2OTg2OGNmLnNldENvbnRlbnQoaHRtbF84MGYwMWYyYjFiYzA0NjZjYjA1ZDVjYTQ1OWY3ZDM4Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hY2FiOGMyNjVmZDU0N2VlOTQ1ZGRiYThkZmQ1NTZiMi5iaW5kUG9wdXAocG9wdXBfOThjOGU5MTE0MmUzNGYwNGFkNjE5MDc0ZjY5ODY4Y2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTcxODk2YzZlOWFlNGZlYWFmNjZiMWM3NDQxYTY4MjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODg4MDY3NTUwMDAwMDAyLC00My44OTgwMzAyNTExOTIyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hODUzMzMzMDRhMGU0ZDNhYTVjYTkyNzkxY2JjNjAwOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MWQwNjAzNjQxODQ0Y2EzYTA3ZmJjYjRmZjQ5OTVlOSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDFkMDYwMzY0MTg0NGNhM2EwN2ZiY2I0ZmY0OTk1ZTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVkEgVklTVEE6ICgtMTkuODg4MDY3NTUwMDAwMDAyLCAtNDMuODk4MDMwMjUxMTkyMjEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hODUzMzMzMDRhMGU0ZDNhYTVjYTkyNzkxY2JjNjAwOS5zZXRDb250ZW50KGh0bWxfNDFkMDYwMzY0MTg0NGNhM2EwN2ZiY2I0ZmY0OTk1ZTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTcxODk2YzZlOWFlNGZlYWFmNjZiMWM3NDQxYTY4MjYuYmluZFBvcHVwKHBvcHVwX2E4NTMzMzMwNGEwZTRkM2FhNWNhOTI3OTFjYmM2MDA5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk1OWE2ODk0YTc4YzQ1NDI5Yjg2ZGEyMWM3MTBjNWZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk5MDc3NCwtNDQuMDI3OTQ1MjY0ODI2NTU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJiN2IzZmJlOWNmNzQzZWFhYmIyOWI1MTY2OTQzMjVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ2ZjM2MTY0Y2FlNTRmMDQ4ODdkNjdiMGFkNDhhMzM4ID0gJCgnPGRpdiBpZD0iaHRtbF80NmYzNjE2NGNhZTU0ZjA0ODg3ZDY3YjBhZDQ4YTMzOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T0xBUklBOiAoLTE5Ljk5MDc3NCwgLTQ0LjAyNzk0NTI2NDgyNjU1Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJiN2IzZmJlOWNmNzQzZWFhYmIyOWI1MTY2OTQzMjVmLnNldENvbnRlbnQoaHRtbF80NmYzNjE2NGNhZTU0ZjA0ODg3ZDY3YjBhZDQ4YTMzOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NTlhNjg5NGE3OGM0NTQyOWI4NmRhMjFjNzEwYzVmZC5iaW5kUG9wdXAocG9wdXBfMmI3YjNmYmU5Y2Y3NDNlYWFiYjI5YjUxNjY5NDMyNWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGVjODA4NWRiOTk5NDM3MWIwMDM5NGM1NjQ0NDUyOGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTkwMDQ1OCwtNDMuOTYzMTI0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZGUyNTE1NWJhYjA0OWUxOTNmZWIyMGMxYWZiYmFmZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNzM5NTc0OWJhNWI0ZjE0OTc4ZDY0MDU5ZTdjMTg2MyA9ICQoJzxkaXYgaWQ9Imh0bWxfMzczOTU3NDliYTViNGYxNDk3OGQ2NDA1OWU3YzE4NjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9MSE9TIEQmIzM5O0FHVUE6ICgtMTkuOTkwMDQ1OCwgLTQzLjk2MzEyNDkpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZGUyNTE1NWJhYjA0OWUxOTNmZWIyMGMxYWZiYmFmZS5zZXRDb250ZW50KGh0bWxfMzczOTU3NDliYTViNGYxNDk3OGQ2NDA1OWU3YzE4NjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGVjODA4NWRiOTk5NDM3MWIwMDM5NGM1NjQ0NDUyOGIuYmluZFBvcHVwKHBvcHVwX2JkZTI1MTU1YmFiMDQ5ZTE5M2ZlYjIwYzFhZmJiYWZlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlhYjdhYmIyNjU0OTQzYmJhOTMzY2JjOWVkNTI4OThiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk3NTUwMzIsLTQzLjk4MzczNTcxOTg0OTA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA5YmU4NDVjODJhMjQyZTY5OTZhNmY0Yzk2YTc3NWY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M5ZmMzZTI2MzVmYjQxMTdiOTIwZTA0M2Q0MzAzZDMzID0gJCgnPGRpdiBpZD0iaHRtbF9jOWZjM2UyNjM1ZmI0MTE3YjkyMGUwNDNkNDMwM2QzMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEFMTUVJUkFTOiAoLTE5Ljk3NTUwMzIsIC00My45ODM3MzU3MTk4NDkwNCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA5YmU4NDVjODJhMjQyZTY5OTZhNmY0Yzk2YTc3NWY5LnNldENvbnRlbnQoaHRtbF9jOWZjM2UyNjM1ZmI0MTE3YjkyMGUwNDNkNDMwM2QzMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YWI3YWJiMjY1NDk0M2JiYTkzM2NiYzllZDUyODk4Yi5iaW5kUG9wdXAocG9wdXBfMDliZTg0NWM4MmEyNDJlNjk5NmE2ZjRjOTZhNzc1ZjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWY0ZTc3ZDQyZDNjNGU2OGE5ZTBlODVjNmRmNTBhNzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTIyNDUzMzQ5OTk5OTk4LC00My45MDQ4Njc0OTY2MDgxNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjZiMDgyY2FiNzU0NGY3NGJjOTU0MzE2NTg2YTNmNjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTc1YzU1ZWMzYmI0NDljMTkyZGE4YjdmMzMzZGMzZjggPSAkKCc8ZGl2IGlkPSJodG1sXzU3NWM1NWVjM2JiNDQ5YzE5MmRhOGI3ZjMzM2RjM2Y4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QQVJBSVNPOiAoLTE5LjkyMjQ1MzM0OTk5OTk5OCwgLTQzLjkwNDg2NzQ5NjYwODE1NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2YjA4MmNhYjc1NDRmNzRiYzk1NDMxNjU4NmEzZjY3LnNldENvbnRlbnQoaHRtbF81NzVjNTVlYzNiYjQ0OWMxOTJkYThiN2YzMzNkYzNmOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZjRlNzdkNDJkM2M0ZTY4YTllMGU4NWM2ZGY1MGE3MS5iaW5kUG9wdXAocG9wdXBfNjZiMDgyY2FiNzU0NGY3NGJjOTU0MzE2NTg2YTNmNjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjM5NjJjN2ViNWE4NGZmNjk5MGEwMGRkZTE5MmQ5ZWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODkwODAzNywtNDMuOTUyNjA4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ODhmNDhjNGEyYWU0MWEwYWUxYjJlMWM1ZTI4NWYyMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MDY0YzJjMDlkNDY0NjM1OGY1ZGNhMGFlZTFmNDZmZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzA2NGMyYzA5ZDQ2NDYzNThmNWRjYTBhZWUxZjQ2ZmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBBUlFVRSBSSUFDSFVFTE86ICgtMTkuODkwODAzNywgLTQzLjk1MjYwODMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ODhmNDhjNGEyYWU0MWEwYWUxYjJlMWM1ZTI4NWYyMy5zZXRDb250ZW50KGh0bWxfNzA2NGMyYzA5ZDQ2NDYzNThmNWRjYTBhZWUxZjQ2ZmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjM5NjJjN2ViNWE4NGZmNjk5MGEwMGRkZTE5MmQ5ZWQuYmluZFBvcHVwKHBvcHVwXzQ4OGY0OGM0YTJhZTQxYTBhZTFiMmUxYzVlMjg1ZjIzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5ODM4YTU1NzAxNDQ5NmI5ZTFhYzZlYzczM2Y3ZmQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0NTM1NCwtNDMuOTk0OTU0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZmY0NWI5NTFlYjQ0YWIzOTllOGZjYmZkMjhiYWExMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZDRmYmU5NjE5ODU0ZDIzOTg4MjgxNTk1MzFjMjI2MCA9ICQoJzxkaXYgaWQ9Imh0bWxfZGQ0ZmJlOTYxOTg1NGQyMzk4ODI4MTU5NTMxYzIyNjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBBVFJPQ0lOSU86ICgtMTkuOTQ1MzU0LCAtNDMuOTk0OTU0Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVmZjQ1Yjk1MWViNDRhYjM5OWU4ZmNiZmQyOGJhYTEyLnNldENvbnRlbnQoaHRtbF9kZDRmYmU5NjE5ODU0ZDIzOTg4MjgxNTk1MzFjMjI2MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mOTgzOGE1NTcwMTQ0OTZiOWUxYWM2ZWM3MzNmN2ZkMS5iaW5kUG9wdXAocG9wdXBfNWZmNDViOTUxZWI0NGFiMzk5ZThmY2JmZDI4YmFhMTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjQ1YjZhMDVhNWNjNDNkODhlMjJkM2NkMjA3MWU1NTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODQwNjk3NSwtNDMuODkxMTA4NTYwNTU1NTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2E2ZDY5MzU5YzI2NDU5ZjllNWMwZWJkMTY0ZWMyMTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGNhZmY2Y2I2N2UzNDY4NjhmZTgwMGQxNTYzNzg4MWIgPSAkKCc8ZGl2IGlkPSJodG1sX2RjYWZmNmNiNjdlMzQ2ODY4ZmU4MDBkMTU2Mzc4ODFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QQVVMTyBWSTogKC0xOS44NDA2OTc1LCAtNDMuODkxMTA4NTYwNTU1NTUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YTZkNjkzNTljMjY0NTlmOWU1YzBlYmQxNjRlYzIxMi5zZXRDb250ZW50KGh0bWxfZGNhZmY2Y2I2N2UzNDY4NjhmZTgwMGQxNTYzNzg4MWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjQ1YjZhMDVhNWNjNDNkODhlMjJkM2NkMjA3MWU1NTEuYmluZFBvcHVwKHBvcHVwXzdhNmQ2OTM1OWMyNjQ1OWY5ZTVjMGViZDE2NGVjMjEyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0Yjg2N2E0YTk3YzRkNjY5ZmFlMGEwMjU4ZGZlMzM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwMjEyNjksLTQzLjk0OTc5Nzg1NDQ3NjQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlYmM1YWE3NWQxYjQxNDg5NjE2ZTI5NmU0MTVkOGM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M2N2ZiMTljNzc1NTQ4Yjk4MzZkZGQzOThhNDA2YzQyID0gJCgnPGRpdiBpZD0iaHRtbF9jNjdmYjE5Yzc3NTU0OGI5ODM2ZGRkMzk4YTQwNmM0MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEVEUkVJUkEgUFJBRE8gTE9QRVM6ICgtMTkuOTAyMTI2OSwgLTQzLjk0OTc5Nzg1NDQ3NjQzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWViYzVhYTc1ZDFiNDE0ODk2MTZlMjk2ZTQxNWQ4YzYuc2V0Q29udGVudChodG1sX2M2N2ZiMTljNzc1NTQ4Yjk4MzZkZGQzOThhNDA2YzQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk0Yjg2N2E0YTk3YzRkNjY5ZmFlMGEwMjU4ZGZlMzM5LmJpbmRQb3B1cChwb3B1cF8xZWJjNWFhNzVkMWI0MTQ4OTYxNmUyOTZlNDE1ZDhjNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hODAyNTczNDU4NTM0Mzc3OGY1ZjZkZDVmOWQwM2RlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MjI3MzE4LC00My45NDUwOTQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU3YWJjNTE0MDA2MTRmOWM4NmRjNGU1NGM3N2ExY2NkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlhMGNlY2Y3NTU2YjRkNzFiNDU1Y2Q4YjYxMDM4NzRiID0gJCgnPGRpdiBpZD0iaHRtbF85YTBjZWNmNzU1NmI0ZDcxYjQ1NWNkOGI2MTAzODc0YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UElORE9SQU1BOiAoLTE5LjkyMjczMTgsIC00My45NDUwOTQ4KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTdhYmM1MTQwMDYxNGY5Yzg2ZGM0ZTU0Yzc3YTFjY2Quc2V0Q29udGVudChodG1sXzlhMGNlY2Y3NTU2YjRkNzFiNDU1Y2Q4YjYxMDM4NzRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E4MDI1NzM0NTg1MzQzNzc4ZjVmNmRkNWY5ZDAzZGUwLmJpbmRQb3B1cChwb3B1cF81N2FiYzUxNDAwNjE0ZjljODZkYzRlNTRjNzdhMWNjZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNWVlZWNhNzc2NTY0YjdiYjEzMDlmZWJkOWJjYmVlNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NjYwNDA3NSwtNDMuOTE3NjEzNzczMjM1ODE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxMmVjZGQ4NTAzNTQwOGQ4NzYyNDk5MzcxOWViMzNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1NWU3ZmY5OTgwOTQ1MDBiZmQ3YzJhZGFmNjY3MmFlID0gJCgnPGRpdiBpZD0iaHRtbF9lNTVlN2ZmOTk4MDk0NTAwYmZkN2MyYWRhZjY2NzJhZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UElSQUpBOiAoLTE5Ljg2NjA0MDc1LCAtNDMuOTE3NjEzNzczMjM1ODE0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTEyZWNkZDg1MDM1NDA4ZDg3NjI0OTkzNzE5ZWIzM2Quc2V0Q29udGVudChodG1sX2U1NWU3ZmY5OTgwOTQ1MDBiZmQ3YzJhZGFmNjY3MmFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI1ZWVlY2E3NzY1NjRiN2JiMTMwOWZlYmQ5YmNiZWU0LmJpbmRQb3B1cChwb3B1cF81MTJlY2RkODUwMzU0MDhkODc2MjQ5OTM3MTllYjMzZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MjJhODE5NDgxNWQ0MThlYmFjODIxNThhYzc2ZmNlYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MTE4NTE3LC00My45ODk4MzMxODA3NDM2OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzMwODY5Yjc3ZGJlNGYyZWJmNmM2YzRiMDlhNTJhOWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmJmNzg4ZmNhMzNmNDk2NmFmODFlZjIxMWFkYmQzNTUgPSAkKCc8ZGl2IGlkPSJodG1sXzZiZjc4OGZjYTMzZjQ5NjZhZjgxZWYyMTFhZGJkMzU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QSVJBVElOSU5HQTogKC0xOS44MTE4NTE3LCAtNDMuOTg5ODMzMTgwNzQzNjk1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzMwODY5Yjc3ZGJlNGYyZWJmNmM2YzRiMDlhNTJhOWYuc2V0Q29udGVudChodG1sXzZiZjc4OGZjYTMzZjQ5NjZhZjgxZWYyMTFhZGJkMzU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYyMmE4MTk0ODE1ZDQxOGViYWM4MjE1OGFjNzZmY2VjLmJpbmRQb3B1cChwb3B1cF83MzA4NjliNzdkYmU0ZjJlYmY2YzZjNGIwOWE1MmE5Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMjg2YWNkMjdhMzg0ZGNmYTRhZGVmODY1NWEyNWZiNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC4wMDgxMDM5NSwtNDQuMDA3MDgxMDI0MzkzMjE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1YjlhMWI1Mzk0NjQzMDA4MzYyM2RiOTE5ZTAxMTdjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FmZDU3YzI3MDNjYTQ2OWU5ZDkxM2Y5Yzk5ZmZmZWNlID0gJCgnPGRpdiBpZD0iaHRtbF9hZmQ1N2MyNzAzY2E0NjllOWQ5MTNmOWM5OWZmZmVjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UE9OR0VMVVBFOiAoLTIwLjAwODEwMzk1LCAtNDQuMDA3MDgxMDI0MzkzMjE2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjViOWExYjUzOTQ2NDMwMDgzNjIzZGI5MTllMDExN2Muc2V0Q29udGVudChodG1sX2FmZDU3YzI3MDNjYTQ2OWU5ZDkxM2Y5Yzk5ZmZmZWNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IyODZhY2QyN2EzODRkY2ZhNGFkZWY4NjU1YTI1ZmI3LmJpbmRQb3B1cChwb3B1cF9iNWI5YTFiNTM5NDY0MzAwODM2MjNkYjkxOWUwMTE3Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NTk4MmNiZTU3ZWQ0OTgyYTI1NDA2OGNlZWI1OGQzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC4xOTc3MDA2NSwtNDQuNDIyNDgzNjE2MTI2MTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjFhMTNkNDIxNWE1NDJmMjhhMjA5MTk4NzJjZGVhZTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTYxNmVmMTc4YThmNDAxZjgxMWNkMmFmZDg3NTJmOWMgPSAkKCc8ZGl2IGlkPSJodG1sXzk2MTZlZjE3OGE4ZjQwMWY4MTFjZDJhZmQ4NzUyZjljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QUkFDQSBYSUk6ICgtMjAuMTk3NzAwNjUsIC00NC40MjI0ODM2MTYxMjYxNCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIxYTEzZDQyMTVhNTQyZjI4YTIwOTE5ODcyY2RlYWUwLnNldENvbnRlbnQoaHRtbF85NjE2ZWYxNzhhOGY0MDFmODExY2QyYWZkODc1MmY5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NTk4MmNiZTU3ZWQ0OTgyYTI1NDA2OGNlZWI1OGQzZS5iaW5kUG9wdXAocG9wdXBfMjFhMTNkNDIxNWE1NDJmMjhhMjA5MTk4NzJjZGVhZTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDdkZDEzNDUzYzUzNGUzOWEyYzA4MTI0YzViYTEwMDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODk5MzEwNywtNDQuMDA2Njk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkxMjllZjA0NGExZjRiZjBiNTYzMTMzMGE4NGU2NjY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlmZGVlNWVkM2VlZjQzMTc4Y2QwMDRiZjBmNzU4YzI4ID0gJCgnPGRpdiBpZD0iaHRtbF85ZmRlZTVlZDNlZWY0MzE3OGNkMDA0YmYwZjc1OGMyOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UFJJTUFWRVJBOiAoLTE5Ljg5OTMxMDcsIC00NC4wMDY2OTgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MTI5ZWYwNDRhMWY0YmYwYjU2MzEzMzBhODRlNjY2NS5zZXRDb250ZW50KGh0bWxfOWZkZWU1ZWQzZWVmNDMxNzhjZDAwNGJmMGY3NThjMjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDdkZDEzNDUzYzUzNGUzOWEyYzA4MTI0YzViYTEwMDIuYmluZFBvcHVwKHBvcHVwXzkxMjllZjA0NGExZjRiZjBiNTYzMTMzMGE4NGU2NjY1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdmZjVjY2U0NmUwMzRkMTlhYzE1ZTYxN2EyNjI1NDBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg2MDk3Njg5OTk5OTk5NywtNDMuOTI5MDU0NjYxOTk3NDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTI3MTc1MGU4M2E1NGZiNWFmYjYzNjRiNWUzZTAyMDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjQzNDI5YmQ2NTRlNDliOThmNDQwMDU2MTMyZGMwNWQgPSAkKCc8ZGl2IGlkPSJodG1sX2I0MzQyOWJkNjU0ZTQ5Yjk4ZjQ0MDA1NjEzMmRjMDVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QUklNRUlSTyBERSBNQUlPOiAoLTE5Ljg2MDk3Njg5OTk5OTk5NywgLTQzLjkyOTA1NDY2MTk5NzQ3KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTI3MTc1MGU4M2E1NGZiNWFmYjYzNjRiNWUzZTAyMDAuc2V0Q29udGVudChodG1sX2I0MzQyOWJkNjU0ZTQ5Yjk4ZjQ0MDA1NjEzMmRjMDVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdmZjVjY2U0NmUwMzRkMTlhYzE1ZTYxN2EyNjI1NDBjLmJpbmRQb3B1cChwb3B1cF8xMjcxNzUwZTgzYTU0ZmI1YWZiNjM2NGI1ZTNlMDIwMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZWY3NGZkMDRkMzI0YTVkOTgwMDlmYzU4NGQ4NDFjYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTYxNTcyNTAwMDAwMDMsLTQzLjkyNjIzMTAxOTUzMzI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA0M2FlYThiNWJjZTQ3ZWVhZGI1ZjVhZjQ2YjgzNjk3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ2ZjExMTdmZTQxMTQ0OTRiYzc4MjBjMTAxZWRlZGY4ID0gJCgnPGRpdiBpZD0iaHRtbF80NmYxMTE3ZmU0MTE0NDk0YmM3ODIwYzEwMWVkZWRmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UFJPVklERU5DSUE6ICgtMTkuODU2MTU3MjUwMDAwMDAzLCAtNDMuOTI2MjMxMDE5NTMzMjYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNDNhZWE4YjViY2U0N2VlYWRiNWY1YWY0NmI4MzY5Ny5zZXRDb250ZW50KGh0bWxfNDZmMTExN2ZlNDExNDQ5NGJjNzgyMGMxMDFlZGVkZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmVmNzRmZDA0ZDMyNGE1ZDk4MDA5ZmM1ODRkODQxY2IuYmluZFBvcHVwKHBvcHVwXzA0M2FlYThiNWJjZTQ3ZWVhZGI1ZjVhZjQ2YjgzNjk3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQzNzc5NGNjZDBhYzQ2MzhhMzJlZDExMTdjN2Y3MmI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk2NzI1NDYsLTQzLjk0MjM1NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTZiN2Y0NzgyZmI5NGU2NmI1MWQxNDE2MmFiZTM1NGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzU5YzBhZDQ1ZmRjNDg3NmJhN2UzNjA2ZjAzYjhhYzQgPSAkKCc8ZGl2IGlkPSJodG1sX2M1OWMwYWQ0NWZkYzQ4NzZiYTdlMzYwNmYwM2I4YWM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SRUdJTkE6ICgtMTkuOTY3MjU0NiwgLTQzLjk0MjM1NzcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNmI3ZjQ3ODJmYjk0ZTY2YjUxZDE0MTYyYWJlMzU0YS5zZXRDb250ZW50KGh0bWxfYzU5YzBhZDQ1ZmRjNDg3NmJhN2UzNjA2ZjAzYjhhYzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDM3Nzk0Y2NkMGFjNDYzOGEzMmVkMTExN2M3ZjcyYjYuYmluZFBvcHVwKHBvcHVwX2U2YjdmNDc4MmZiOTRlNjZiNTFkMTQxNjJhYmUzNTRhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I0MmNiNjcwMjNkODQzYjJhN2NhMjgxMDBhZTdhMjVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgyOTE0NjQsLTQzLjg5ODQ4MzU5NjYzNzA2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YzU1MDNlNGUyNjE0YjU2OWYxMTQxZjRkZjljY2Q4NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Njg3ODA5OWUyMDM0MWIzYTkxMjRiODYyZTg0ZDVjYiA9ICQoJzxkaXYgaWQ9Imh0bWxfOTY4NzgwOTllMjAzNDFiM2E5MTI0Yjg2MmU4NGQ1Y2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJJQkVJUk8gREUgQUJSRVU6ICgtMTkuODI5MTQ2NCwgLTQzLjg5ODQ4MzU5NjYzNzA2NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdjNTUwM2U0ZTI2MTRiNTY5ZjExNDFmNGRmOWNjZDg1LnNldENvbnRlbnQoaHRtbF85Njg3ODA5OWUyMDM0MWIzYTkxMjRiODYyZTg0ZDVjYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNDJjYjY3MDIzZDg0M2IyYTdjYTI4MTAwYWU3YTI1ZS5iaW5kUG9wdXAocG9wdXBfN2M1NTAzZTRlMjYxNGI1NjlmMTE0MWY0ZGY5Y2NkODUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjZiNWZiYWI5MmIyNGY5MWE5YjcwZDQ0ZjAzZjE1N2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODE3NzYxOCwtNDMuOTgyMjI4MzA5OTE4NDI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJmZTQ3MDY1NjAzNjRiZjk5ZGVkYmMzNzMxZmNkMmQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiNjVlNTVlZjRlMzRlNzc5YzY2ZDY3ODRhYWVlMjMyID0gJCgnPGRpdiBpZD0iaHRtbF8wYjY1ZTU1ZWY0ZTM0ZTc3OWM2NmQ2Nzg0YWFlZTIzMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UklPIEJSQU5DTzogKC0xOS44MTc3NjE4LCAtNDMuOTgyMjI4MzA5OTE4NDI2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmZlNDcwNjU2MDM2NGJmOTlkZWRiYzM3MzFmY2QyZDIuc2V0Q29udGVudChodG1sXzBiNjVlNTVlZjRlMzRlNzc5YzY2ZDY3ODRhYWVlMjMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I2YjVmYmFiOTJiMjRmOTFhOWI3MGQ0NGYwM2YxNTdkLmJpbmRQb3B1cChwb3B1cF8yZmU0NzA2NTYwMzY0YmY5OWRlZGJjMzczMWZjZDJkMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YTkwYTMzM2I2OTQ0MDM5YWVhN2JhMTNkM2MzNmE1NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDMxNDU1NSwtNDMuOTgyOTYzNjg1OTg0MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2NiNjljYzExMzhmNGU0NzhkNmE1N2YyYTI5NWM0ZDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjNjODU5NzJmNGRkNDViMjgzZGUyYWZlNjMyMjYyMmEgPSAkKCc8ZGl2IGlkPSJodG1sXzYzYzg1OTcyZjRkZDQ1YjI4M2RlMmFmZTYzMjI2MjJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQUxHQURPIEZJTEhPOiAoLTE5Ljk0MzE0NTU1LCAtNDMuOTgyOTYzNjg1OTg0MjkpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83Y2I2OWNjMTEzOGY0ZTQ3OGQ2YTU3ZjJhMjk1YzRkNS5zZXRDb250ZW50KGh0bWxfNjNjODU5NzJmNGRkNDViMjgzZGUyYWZlNjMyMjYyMmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGE5MGEzMzNiNjk0NDAzOWFlYTdiYTEzZDNjMzZhNTQuYmluZFBvcHVwKHBvcHVwXzdjYjY5Y2MxMTM4ZjRlNDc4ZDZhNTdmMmEyOTVjNGQ1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JiOTlhYWI0MTQ2MTQ3YTZiMGRkZDhkYmUzOTg2MjZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg3OTAwMTMsLTQzLjk0MTEwNTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGZhZTNhNzY0NzJhNGNjMmJkN2UyZmY5MDZlMmVlYmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDE0ZDk1OTdkZWQ0NGJlZDk0ZDBkNDBkNTRhMjI3YzEgPSAkKCc8ZGl2IGlkPSJodG1sXzAxNGQ5NTk3ZGVkNDRiZWQ5NGQwZDQwZDU0YTIyN2MxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBDUlVaOiAoLTE5Ljg3OTAwMTMsIC00My45NDExMDUyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGZhZTNhNzY0NzJhNGNjMmJkN2UyZmY5MDZlMmVlYmIuc2V0Q29udGVudChodG1sXzAxNGQ5NTk3ZGVkNDRiZWQ5NGQwZDQwZDU0YTIyN2MxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JiOTlhYWI0MTQ2MTQ3YTZiMGRkZDhkYmUzOTg2MjZiLmJpbmRQb3B1cChwb3B1cF8wZmFlM2E3NjQ3MmE0Y2MyYmQ3ZTJmZjkwNmUyZWViYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMGRiMmE3NzY3Mjg0NTE2ODlhOWI1NWI4MTA4MGE3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45ODY3NzQ1LC00NC4wMTE2MDQ3MDc3MDA5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZGZiNTU1MGIzYjU0NDVmYTc2Nzc4MzExMDkzNWExYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOTBjNzZhZGRhN2Q0OWFlOWMwNDQ1OTllZjg0NTczYiA9ICQoJzxkaXYgaWQ9Imh0bWxfZTkwYzc2YWRkYTdkNDlhZTljMDQ0NTk5ZWY4NDU3M2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTlRBIEhFTEVOQTogKC0xOS45ODY3NzQ1LCAtNDQuMDExNjA0NzA3NzAwOTcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZGZiNTU1MGIzYjU0NDVmYTc2Nzc4MzExMDkzNWExYi5zZXRDb250ZW50KGh0bWxfZTkwYzc2YWRkYTdkNDlhZTljMDQ0NTk5ZWY4NDU3M2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDBkYjJhNzc2NzI4NDUxNjg5YTliNTViODEwODBhN2EuYmluZFBvcHVwKHBvcHVwXzZkZmI1NTUwYjNiNTQ0NWZhNzY3NzgzMTEwOTM1YTFiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FkZTEyMWFhN2RiOTRiZWFiNTUyMDI5NWYwYTliYWNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgyMzc4Mjk1MDAwMDAwMiwtNDMuOTc0NTI5NjQwMDMyNTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGI3MDAyYThiZDZhNGI2Nzg2Njk5OWRiYmMxYzEyNjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmFmODM1ZjhmMWMwNDA4N2JiMTY5Y2QzMmIyMGI1YWIgPSAkKCc8ZGl2IGlkPSJodG1sXzZhZjgzNWY4ZjFjMDQwODdiYjE2OWNkMzJiMjBiNWFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBNT05JQ0E6ICgtMTkuODIzNzgyOTUwMDAwMDAyLCAtNDMuOTc0NTI5NjQwMDMyNTcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YjcwMDJhOGJkNmE0YjY3ODY2OTk5ZGJiYzFjMTI2My5zZXRDb250ZW50KGh0bWxfNmFmODM1ZjhmMWMwNDA4N2JiMTY5Y2QzMmIyMGI1YWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWRlMTIxYWE3ZGI5NGJlYWI1NTIwMjk1ZjBhOWJhY2IuYmluZFBvcHVwKHBvcHVwXzRiNzAwMmE4YmQ2YTRiNjc4NjY5OTlkYmJjMWMxMjYzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E1MGU4MDZjZGNhNTQ5MjI5OTNhNWZkZTU0MGQ4YWRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg3MTMyNTMsLTQ0LjAwNDA2MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTZlMjUzNDZlM2IwNGI5ZGIxNWY1OTcwYjlkMjE3YWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmI4MjIwZmNkY2IyNGI3NmExMDg2YzM4ZDcxMTYyNGYgPSAkKCc8ZGl2IGlkPSJodG1sXzJiODIyMGZjZGNiMjRiNzZhMTA4NmMzOGQ3MTE2MjRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBURVJFWklOSEE6ICgtMTkuODcxMzI1MywgLTQ0LjAwNDA2MDUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNmUyNTM0NmUzYjA0YjlkYjE1ZjU5NzBiOWQyMTdhYS5zZXRDb250ZW50KGh0bWxfMmI4MjIwZmNkY2IyNGI3NmExMDg2YzM4ZDcxMTYyNGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTUwZTgwNmNkY2E1NDkyMjk5M2E1ZmRlNTQwZDhhZGEuYmluZFBvcHVwKHBvcHVwXzE2ZTI1MzQ2ZTNiMDRiOWRiMTVmNTk3MGI5ZDIxN2FhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EzN2IwYzZmYjBmMjQwZDc5ZTNlNDkwNTZiNzg1ZTE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwMjk5ODIsLTQzLjk1NDAwNTU4MzkzMjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I0NDMwYzQwZmI3NTQ3MGRiOGNjNjY2OTE0NDBkZmIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNjYzM5OTI2MTU1YTRjZjE5N2VkNzBkMGQyNjFlMTRiID0gJCgnPGRpdiBpZD0iaHRtbF8zY2MzOTkyNjE1NWE0Y2YxOTdlZDcwZDBkMjYxZTE0YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0FOVE8gQU5EUkU6ICgtMTkuOTAyOTk4MiwgLTQzLjk1NDAwNTU4MzkzMjMzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjQ0MzBjNDBmYjc1NDcwZGI4Y2M2NjY5MTQ0MGRmYjEuc2V0Q29udGVudChodG1sXzNjYzM5OTI2MTU1YTRjZjE5N2VkNzBkMGQyNjFlMTRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EzN2IwYzZmYjBmMjQwZDc5ZTNlNDkwNTZiNzg1ZTE2LmJpbmRQb3B1cChwb3B1cF9iNDQzMGM0MGZiNzU0NzBkYjhjYzY2NjkxNDQwZGZiMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMTRmZWExYjZlZDY0MDI0YWIxNDAyMmRmYjFkZTJhMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTAzMDM3LC00My45Mzc5ODg0NjA1MjQ3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZWNjN2FlZjliYTI0MTk3ODM0NDY4OTdlYjU2YTdmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZDU0M2IwZmZmZWY0YjMyOWY5ZTRmNTRmMWVhMTUzOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNWQ1NDNiMGZmZmVmNGIzMjlmOWU0ZjU0ZjFlYTE1MzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlPDg08gQkVSTkFSRE86ICgtMTkuODUwMzAzNywgLTQzLjkzNzk4ODQ2MDUyNDc4KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWVjYzdhZWY5YmEyNDE5NzgzNDQ2ODk3ZWI1NmE3Zjguc2V0Q29udGVudChodG1sXzVkNTQzYjBmZmZlZjRiMzI5ZjllNGY1NGYxZWExNTM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzExNGZlYTFiNmVkNjQwMjRhYjE0MDIyZGZiMWRlMmEwLmJpbmRQb3B1cChwb3B1cF9hZWNjN2FlZjliYTI0MTk3ODM0NDY4OTdlYjU2YTdmOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZWI0MDY1Nzg0Njc0M2U1OWFkYTA2MjBjN2E5NjI4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MDEwMjIyLC00My45NDUyNzc2MTgxMzYwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYTVjYzZiYmUzNzU0YWFiOGIwZjMzZWQzMDhjZjI0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81M2VhMDc0ZmUxNGU0ODQwOTU5ODQ5MDAxZmRkOTBjMCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTNlYTA3NGZlMTRlNDg0MDk1OTg0OTAwMWZkZDkwYzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlPDg08gQ1JJU1RPVkFPOiAoLTE5LjkwMTAyMjIsIC00My45NDUyNzc2MTgxMzYwNik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhNWNjNmJiZTM3NTRhYWI4YjBmMzNlZDMwOGNmMjQ2LnNldENvbnRlbnQoaHRtbF81M2VhMDc0ZmUxNGU0ODQwOTU5ODQ5MDAxZmRkOTBjMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZWI0MDY1Nzg0Njc0M2U1OWFkYTA2MjBjN2E5NjI4Yi5iaW5kUG9wdXAocG9wdXBfZGE1Y2M2YmJlMzc1NGFhYjhiMGYzM2VkMzA4Y2YyNDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTBjMTlhZTE2MTY2NDNmMzg3MTYzOTllNTY5OGEwM2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODU1NTE4NTUsLTQzLjkxNDYzNjc1Mzg4NjY1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMTRiMWJjZmRmNTE0NmFlODA1NjkyZjBkMTk5NTgxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NDhlOWE1ZGE2MTA0MzM4ODEzMzEwZmIwNzQyN2VjNCA9ICQoJzxkaXYgaWQ9Imh0bWxfNDQ4ZTlhNWRhNjEwNDMzODgxMzMxMGZiMDc0MjdlYzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlPDg08gR0FCUklFTDogKC0xOS44NTU1MTg1NSwgLTQzLjkxNDYzNjc1Mzg4NjY1NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QxNGIxYmNmZGY1MTQ2YWU4MDU2OTJmMGQxOTk1ODE2LnNldENvbnRlbnQoaHRtbF80NDhlOWE1ZGE2MTA0MzM4ODEzMzEwZmIwNzQyN2VjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMGMxOWFlMTYxNjY0M2YzODcxNjM5OWU1Njk4YTAzYy5iaW5kUG9wdXAocG9wdXBfZDE0YjFiY2ZkZjUxNDZhZTgwNTY5MmYwZDE5OTU4MTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzE2ZDQxNDU1YjM4NDI0ZDkzY2JkOGU1MzNmYWIyY2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODk5MjQ1ODUsLTQzLjg5NzY1MDU0NzEzNTkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UwMmRmNmY3OGQ4NTQxNmU4NTFmMjVhNjkwYzRmZTI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE1YmE4OGY1YzYxODQ3MTI5MTgyZTliOTU5MTlmYjI0ID0gJCgnPGRpdiBpZD0iaHRtbF8xNWJhODhmNWM2MTg0NzEyOTE4MmU5Yjk1OTE5ZmIyNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U8ODTyBHRVJBTERPOiAoLTE5Ljg5OTI0NTg1LCAtNDMuODk3NjUwNTQ3MTM1OTEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMDJkZjZmNzhkODU0MTZlODUxZjI1YTY5MGM0ZmUyNC5zZXRDb250ZW50KGh0bWxfMTViYTg4ZjVjNjE4NDcxMjkxODJlOWI5NTkxOWZiMjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzE2ZDQxNDU1YjM4NDI0ZDkzY2JkOGU1MzNmYWIyY2YuYmluZFBvcHVwKHBvcHVwX2UwMmRmNmY3OGQ4NTQxNmU4NTFmMjVhNjkwYzRmZTI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0MGE4ZTM0NmY3MTRkZDRhMWJjNmFkMTczMzEzZDA3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgyMjYyNTIsLTQzLjk1Nzk1MTUxNzQ3NDk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI1YjEyZDU0YzQ3NjQ2YmQ5M2NlMjZkODNjOTQzZWYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk4MDQxNWM1NzlhNDRjODJiZTc0OTBmNTEyZWIwNDc5ID0gJCgnPGRpdiBpZD0iaHRtbF85ODA0MTVjNTc5YTQ0YzgyYmU3NDkwZjUxMmViMDQ3OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U8ODTyBKT0FPIEJBVElTVEE6ICgtMTkuODIyNjI1MiwgLTQzLjk1Nzk1MTUxNzQ3NDk2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjViMTJkNTRjNDc2NDZiZDkzY2UyNmQ4M2M5NDNlZjIuc2V0Q29udGVudChodG1sXzk4MDQxNWM1NzlhNDRjODJiZTc0OTBmNTEyZWIwNDc5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U0MGE4ZTM0NmY3MTRkZDRhMWJjNmFkMTczMzEzZDA3LmJpbmRQb3B1cChwb3B1cF8yNWIxMmQ1NGM0NzY0NmJkOTNjZTI2ZDgzYzk0M2VmMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YTg2NGIyZDQzNmE0NDNkYjAyNDlkYjg1YTViODBmZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NzExMTUxNSwtNDMuOTEwMzU5Mzc3NzUzMzY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0NGQ4MTQ0ODYxNTRhOTQ4M2E4ZWQyZTE5NWZhMzg0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M5ZjZkOWUxMGZhZTQwZjdiOGU3MjJhOWIxMDEyYmFjID0gJCgnPGRpdiBpZD0iaHRtbF9jOWY2ZDllMTBmYWU0MGY3YjhlNzIyYTliMTAxMmJhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U8ODTyBNQVJDT1M6ICgtMTkuODcxMTE1MTUsIC00My45MTAzNTkzNzc3NTMzNjYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NDRkODE0NDg2MTU0YTk0ODNhOGVkMmUxOTVmYTM4NC5zZXRDb250ZW50KGh0bWxfYzlmNmQ5ZTEwZmFlNDBmN2I4ZTcyMmE5YjEwMTJiYWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWE4NjRiMmQ0MzZhNDQzZGIwMjQ5ZGI4NWE1YjgwZmYuYmluZFBvcHVwKHBvcHVwXzQ0NGQ4MTQ0ODYxNTRhOTQ4M2E4ZWQyZTE5NWZhMzg0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNjYzkxZTUzZmQ4ZTQ4NTU5MjQ4NmY5MDlmNzgwNTNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg2ODY4Nzc1LC00My45MjM5MzY4MTgxMDMwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNGJhY2ExMWM5M2M0MDJmOGIwNGIyYzc2M2IzY2JiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNDc0M2FjNzdjN2E0NWZiOGM4ZGUyNzkwNzM4ZjNiNiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjQ3NDNhYzc3YzdhNDVmYjhjOGRlMjc5MDczOGYzYjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlPDg08gUEFVTE86ICgtMTkuODY4Njg3NzUsIC00My45MjM5MzY4MTgxMDMwOCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0YmFjYTExYzkzYzQwMmY4YjA0YjJjNzYzYjNjYmJlLnNldENvbnRlbnQoaHRtbF9iNDc0M2FjNzdjN2E0NWZiOGM4ZGUyNzkwNzM4ZjNiNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zY2M5MWU1M2ZkOGU0ODU1OTI0ODZmOTA5Zjc4MDUzYy5iaW5kUG9wdXAocG9wdXBfMzRiYWNhMTFjOTNjNDAyZjhiMDRiMmM3NjNiM2NiYmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzMyNzgyZjg4ZjhmNDZkYWJkYTBkMjY0YTFjMGU0OGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQ3NjU5MDUsLTQzLjkzNzUwOTQ3MjYyNzA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JkNmVhNzA3NzQ2MDQ1Y2M5MDg2ZTBjNzE2ZGZlMjYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M2NGU4MGY5YmJmNTRjZTg4NDEzY2YxZDY1ODI0OTI3ID0gJCgnPGRpdiBpZD0iaHRtbF9jNjRlODBmOWJiZjU0Y2U4ODQxM2NmMWQ2NTgyNDkyNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0FPIFBFRFJPIFZOOiAoLTE5Ljk0NzY1OTA1LCAtNDMuOTM3NTA5NDcyNjI3MDUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZDZlYTcwNzc0NjA0NWNjOTA4NmUwYzcxNmRmZTI2MS5zZXRDb250ZW50KGh0bWxfYzY0ZTgwZjliYmY1NGNlODg0MTNjZjFkNjU4MjQ5MjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzMyNzgyZjg4ZjhmNDZkYWJkYTBkMjY0YTFjMGU0OGUuYmluZFBvcHVwKHBvcHVwX2JkNmVhNzA3NzQ2MDQ1Y2M5MDg2ZTBjNzE2ZGZlMjYxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1YTc1NjZiNDczNTRlYzdhNDE1NmFiYmVlMmVlZDcwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5MzkzMDQsLTQ0LjAxMzMzMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWIxZjJlMWQ1NTFmNDIzMjhhMjMyNDIxZTc3OGIzYWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjAyYzFiMzU0OGNhNGY4ZWI3MDI4OWQ0ZDI0NGZlZDEgPSAkKCc8ZGl2IGlkPSJodG1sX2IwMmMxYjM1NDhjYTRmOGViNzAyODlkNGQyNDRmZWQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tw4NPIFNBTFZBRE9SOiAoLTE5Ljg5MzkzMDQsIC00NC4wMTMzMzM2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWIxZjJlMWQ1NTFmNDIzMjhhMjMyNDIxZTc3OGIzYWQuc2V0Q29udGVudChodG1sX2IwMmMxYjM1NDhjYTRmOGViNzAyODlkNGQyNDRmZWQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE1YTc1NjZiNDczNTRlYzdhNDE1NmFiYmVlMmVlZDcwLmJpbmRQb3B1cChwb3B1cF81YjFmMmUxZDU1MWY0MjMyOGEyMzI0MjFlNzc4YjNhZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMjFiYjZlN2U1MzM0NGY4YmJkMDJlYmRjNmIxMTM2YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC4zOTk4MjM5LC00My41MTcxNzgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JjNzJkZDZjYzU5YzRlMDM5ZTIzODMzNjI0NjY3ZTZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc5N2M3NTY5ODA0YzRkZmI4MmJmMGI0OWI2ZjZiM2Y0ID0gJCgnPGRpdiBpZD0iaHRtbF83OTdjNzU2OTgwNGM0ZGZiODJiZjBiNDliNmY2YjNmNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0FSQU1FTkhBOiAoLTIwLjM5OTgyMzksIC00My41MTcxNzgzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmM3MmRkNmNjNTljNGUwMzllMjM4MzM2MjQ2NjdlNmYuc2V0Q29udGVudChodG1sXzc5N2M3NTY5ODA0YzRkZmI4MmJmMGI0OWI2ZjZiM2Y0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EyMWJiNmU3ZTUzMzQ0ZjhiYmQwMmViZGM2YjExMzZjLmJpbmRQb3B1cChwb3B1cF9iYzcyZGQ2Y2M1OWM0ZTAzOWUyMzgzMzYyNDY2N2U2Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNDE1MTViOWY2ZDE0OGMxOWUwN2U1OGQ1YzQ4MWNhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NjE5Mzc3LC00My45OTgxMjYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmMmM4OGVkZGRkNTQ0NzJhZTUxYWNmODBlMGVjNThhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ0NTQ3MWIyYzI5NzQ5ZDc5ZjMwMWYxMzNjN2U1NDdkID0gJCgnPGRpdiBpZD0iaHRtbF80NDU0NzFiMmMyOTc0OWQ3OWYzMDFmMTMzYzdlNTQ3ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0FSQU5ESTogKC0xOS44NjE5Mzc3LCAtNDMuOTk4MTI2MSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBmMmM4OGVkZGRkNTQ0NzJhZTUxYWNmODBlMGVjNThhLnNldENvbnRlbnQoaHRtbF80NDU0NzFiMmMyOTc0OWQ3OWYzMDFmMTMzYzdlNTQ3ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNDE1MTViOWY2ZDE0OGMxOWUwN2U1OGQ1YzQ4MWNhZS5iaW5kUG9wdXAocG9wdXBfMGYyYzg4ZWRkZGQ1NDQ3MmFlNTFhY2Y4MGUwZWM1OGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjM4YzM4MjExZWM0NDljOWFlMWY3M2MzYTUxYzhiYWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTE1MDY2MDUsLTQzLjg5OTA5ODc0MjQyNjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhZDA0ZTFiNzQyOTRhMzJiZDNkYjI3YzEwMGY2MDg3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E2ZGIwN2Q1NjE0NDRlOGY4MjI2NGU0OWEzMTllMTU3ID0gJCgnPGRpdiBpZD0iaHRtbF9hNmRiMDdkNTYxNDQ0ZThmODIyNjRlNDlhMzE5ZTE1NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0FVREFERTogKC0xOS45MTUwNjYwNSwgLTQzLjg5OTA5ODc0MjQyNjIyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmFkMDRlMWI3NDI5NGEzMmJkM2RiMjdjMTAwZjYwODcuc2V0Q29udGVudChodG1sX2E2ZGIwN2Q1NjE0NDRlOGY4MjI2NGU0OWEzMTllMTU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIzOGMzODIxMWVjNDQ5YzlhZTFmNzNjM2E1MWM4YmFmLmJpbmRQb3B1cChwb3B1cF9iYWQwNGUxYjc0Mjk0YTMyYmQzZGIyN2MxMDBmNjA4Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MDE0NTk5ODNkOWQ0MjQ4YjczYjE0ODliMzY3YTNlMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC4wMjgwMTI4NSwtNDQuMDA3NjY4MzkyODkzNzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTc5NDk0YmZmYmI1NGJhOTk3MmNlOGVmMjhjOGQ3OTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTI3NDU1Y2ZlMGFmNGU3MGE5NzNkNDljOTFmODFmNTUgPSAkKCc8ZGl2IGlkPSJodG1sX2UyNzQ1NWNmZTBhZjRlNzBhOTczZDQ5YzkxZjgxZjU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TRVJSQSBETyBDVVJSQUw6ICgtMjAuMDI4MDEyODUsIC00NC4wMDc2NjgzOTI4OTM3Mik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U3OTQ5NGJmZmJiNTRiYTk5NzJjZThlZjI4YzhkNzkwLnNldENvbnRlbnQoaHRtbF9lMjc0NTVjZmUwYWY0ZTcwYTk3M2Q0OWM5MWY4MWY1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MDE0NTk5ODNkOWQ0MjQ4YjczYjE0ODliMzY3YTNlMS5iaW5kUG9wdXAocG9wdXBfZTc5NDk0YmZmYmI1NGJhOTk3MmNlOGVmMjhjOGQ3OTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmY2MTAwMDRkY2VmNDg0N2E5NjlkOWYyYjM5ZDgwMzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuNzkyNzQ3NjUwMDAwMDAzLC00My45NTYxOTQwNzQ3NDYxMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTc4YzJmY2M5ZThkNDYxOWIwZDc4MmUwOWJiNWVhNzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzYyNmRiNTQ5YWJiNDFiNzljZWI0MTQ2OWVjMDk4ZmUgPSAkKCc8ZGl2IGlkPSJodG1sX2M2MjZkYjU0OWFiYjQxYjc5Y2ViNDE0NjllYzA5OGZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TRVJSQSBWRVJERTogKC0xOS43OTI3NDc2NTAwMDAwMDMsIC00My45NTYxOTQwNzQ3NDYxMzYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNzhjMmZjYzllOGQ0NjE5YjBkNzgyZTA5YmI1ZWE3MS5zZXRDb250ZW50KGh0bWxfYzYyNmRiNTQ5YWJiNDFiNzljZWI0MTQ2OWVjMDk4ZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmY2MTAwMDRkY2VmNDg0N2E5NjlkOWYyYjM5ZDgwMzcuYmluZFBvcHVwKHBvcHVwXzE3OGMyZmNjOWU4ZDQ2MTliMGQ3ODJlMDliYjVlYTcxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNlZTM3ZTIxZWQyNzQwZjg5ODY0YTgyMTcwY2YyYTI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg4MDQzMTUsLTQ0LjAxMjc1NDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTg0MGM2NWFlZjdmNGU5NGJiYTk3MWJjMjYzY2QxZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDc2NjM5YzBhZTE1NDUxNmI0ZTc2ZjRjYzFjOGJkNmMgPSAkKCc8ZGl2IGlkPSJodG1sXzA3NjYzOWMwYWUxNTQ1MTZiNGU3NmY0Y2MxYzhiZDZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TRVJSQU5POiAoLTE5Ljg4MDQzMTUsIC00NC4wMTI3NTQzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTg0MGM2NWFlZjdmNGU5NGJiYTk3MWJjMjYzY2QxZGQuc2V0Q29udGVudChodG1sXzA3NjYzOWMwYWUxNTQ1MTZiNGU3NmY0Y2MxYzhiZDZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNlZTM3ZTIxZWQyNzQwZjg5ODY0YTgyMTcwY2YyYTI3LmJpbmRQb3B1cChwb3B1cF9lODQwYzY1YWVmN2Y0ZTk0YmJhOTcxYmMyNjNjZDFkZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OWZlZjVlNWU4YjM0MTQxODBjMWM1OGJmZmVlNTcyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MjE3NzksLTQzLjk4MTE1NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWIzODZlYWNjZTQ5NDM0OWE4YzQxMDI0ZDJkZTQ1YTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGJjNGMzMWViNjEyNDg3ZGIzZDE4MWVhODYwZmQxM2UgPSAkKCc8ZGl2IGlkPSJodG1sXzBiYzRjMzFlYjYxMjQ4N2RiM2QxODFlYTg2MGZkMTNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TSU5JTUJVOiAoLTE5LjgyMTc3OSwgLTQzLjk4MTE1NzUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YjM4NmVhY2NlNDk0MzQ5YThjNDEwMjRkMmRlNDVhMC5zZXRDb250ZW50KGh0bWxfMGJjNGMzMWViNjEyNDg3ZGIzZDE4MWVhODYwZmQxM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODlmZWY1ZTVlOGIzNDE0MTgwYzFjNThiZmZlZTU3MjAuYmluZFBvcHVwKHBvcHVwXzViMzg2ZWFjY2U0OTQzNDlhOGM0MTAyNGQyZGU0NWEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI4ZjRkMmQ3MjFlMTRiN2ViZjkxYTQzZWZhZmZkZTU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgyMTgzMjE1LC00My45MjY3MjE1MzE2NjEyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODFiMDAzNjZhYTY0NTJmYTFlNTgyZjNlN2E5NTk2NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zY2QxMzYwOTk0MWI0OWI1YTNkY2Q3ZmI2ODM5ZDJiNiA9ICQoJzxkaXYgaWQ9Imh0bWxfM2NkMTM2MDk5NDFiNDliNWEzZGNkN2ZiNjgzOWQyYjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNPTElNT0VTOiAoLTE5LjgyMTgzMjE1LCAtNDMuOTI2NzIxNTMxNjYxMjYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ODFiMDAzNjZhYTY0NTJmYTFlNTgyZjNlN2E5NTk2NC5zZXRDb250ZW50KGh0bWxfM2NkMTM2MDk5NDFiNDliNWEzZGNkN2ZiNjgzOWQyYjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjhmNGQyZDcyMWUxNGI3ZWJmOTFhNDNlZmFmZmRlNTguYmluZFBvcHVwKHBvcHVwXzk4MWIwMDM2NmFhNjQ1MmZhMWU1ODJmM2U3YTk1OTY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk4ZmJjMmZlNGUzMDRhYzBiNTQ4NjFhMmYxMzc1NjhkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg4NjQ3MzA1LC00My45NjU4NjU0MjcyOTYwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85N2FiNDk1MDljOWE0OGY1OGEwYjNiZDkwYzQ1YzA1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MjViMDg3NTk2YWQ0MGU2YWNlMTE4YmU4ZjYyMTUzYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNzI1YjA4NzU5NmFkNDBlNmFjZTExOGJlOGY2MjE1M2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNVTUFSRTogKC0xOS44ODY0NzMwNSwgLTQzLjk2NTg2NTQyNzI5NjA0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTdhYjQ5NTA5YzlhNDhmNThhMGIzYmQ5MGM0NWMwNWEuc2V0Q29udGVudChodG1sXzcyNWIwODc1OTZhZDQwZTZhY2UxMThiZThmNjIxNTNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk4ZmJjMmZlNGUzMDRhYzBiNTQ4NjFhMmYxMzc1NjhkLmJpbmRQb3B1cChwb3B1cF85N2FiNDk1MDljOWE0OGY1OGEwYjNiZDkwYzQ1YzA1YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMzg0MjQ1MWUzNGY0MjNjOGRjYWJkNTZkNTkyMDQ5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NjUyNzc5NSwtNDMuOTMzNDI2MDY0MTkxMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmFlNzUxZWEwY2I2NGQ0ZGJiNDBkNDhiMTdhMWU4NzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmNiMjMzNjcxNGU0NGI2Zjk5MTYyY2Y5NjJhYTRlYzIgPSAkKCc8ZGl2IGlkPSJodG1sXzJjYjIzMzY3MTRlNDRiNmY5OTE2MmNmOTYyYWE0ZWMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TVVpBTkE6ICgtMTkuODY1Mjc3OTUsIC00My45MzM0MjYwNjQxOTEwMSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZhZTc1MWVhMGNiNjRkNGRiYjQwZDQ4YjE3YTFlODczLnNldENvbnRlbnQoaHRtbF8yY2IyMzM2NzE0ZTQ0YjZmOTkxNjJjZjk2MmFhNGVjMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMzg0MjQ1MWUzNGY0MjNjOGRjYWJkNTZkNTkyMDQ5Yi5iaW5kUG9wdXAocG9wdXBfNmFlNzUxZWEwY2I2NGQ0ZGJiNDBkNDhiMTdhMWU4NzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjQ5OWVlMWFjYzIxNDVlNDhlMGM1YjcyM2QwYWJhYmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTE3NjA3OCwtNDMuODg1OTM4ODE1ODI4NDI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRlNTZhNmVkNjE0NDQyNDY4NGE4MTFkNmZhYmE2MjNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkxZDk0MzgyODA1NTQ1M2I4Nzc5MGZjYWM1MTNhZTRlID0gJCgnPGRpdiBpZD0iaHRtbF85MWQ5NDM4MjgwNTU0NTNiODc3OTBmY2FjNTEzYWU0ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VEFRVUFSSUw6ICgtMTkuOTE3NjA3OCwgLTQzLjg4NTkzODgxNTgyODQyNSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRlNTZhNmVkNjE0NDQyNDY4NGE4MTFkNmZhYmE2MjNlLnNldENvbnRlbnQoaHRtbF85MWQ5NDM4MjgwNTU0NTNiODc3OTBmY2FjNTEzYWU0ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NDk5ZWUxYWNjMjE0NWU0OGUwYzViNzIzZDBhYmFiZC5iaW5kUG9wdXAocG9wdXBfNGU1NmE2ZWQ2MTQ0NDI0Njg0YTgxMWQ2ZmFiYTYyM2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGI0MjU2YmIxNDY4NGVkZmI5OGMwMjAzNGY4YjBhMjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTg3OTM3MTUsLTQ0LjAxNjM4NDQ5ODY5MjgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ2NTc5OTc4MmEyYTQ2NzY5MzgwMjU1YzI2ZTVjNWRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdiNGJjM2IxOGIwYTQyODhhZGE2MjIyMmJjYjdkZjhjID0gJCgnPGRpdiBpZD0iaHRtbF83YjRiYzNiMThiMGE0Mjg4YWRhNjIyMjJiY2I3ZGY4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VEVJWEVJUkEgRElBUzogKC0xOS45ODc5MzcxNSwgLTQ0LjAxNjM4NDQ5ODY5MjgzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDY1Nzk5NzgyYTJhNDY3NjkzODAyNTVjMjZlNWM1ZGEuc2V0Q29udGVudChodG1sXzdiNGJjM2IxOGIwYTQyODhhZGE2MjIyMmJjYjdkZjhjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBiNDI1NmJiMTQ2ODRlZGZiOThjMDIwMzRmOGIwYTIwLmJpbmRQb3B1cChwb3B1cF80NjU3OTk3ODJhMmE0Njc2OTM4MDI1NWMyNmU1YzVkYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZGFhZTZkNjBlNmY0MmVkYTIxYmI5YTBmNmE4MDAxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45ODgzMjIyLC00NC4wNDA3OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzViZjljMWU0NjQ2NGM2OThmYTRiNTY3N2YwMmZmNGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjk2MTA3MjFiMmY3NGFhMDk3OTE1ZTFhMGU4NTE1OTEgPSAkKCc8ZGl2IGlkPSJodG1sX2I5NjEwNzIxYjJmNzRhYTA5NzkxNWUxYTBlODUxNTkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5USVJPTDogKC0xOS45ODgzMjIyLCAtNDQuMDQwNzk5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzViZjljMWU0NjQ2NGM2OThmYTRiNTY3N2YwMmZmNGUuc2V0Q29udGVudChodG1sX2I5NjEwNzIxYjJmNzRhYTA5NzkxNWUxYTBlODUxNTkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZkYWFlNmQ2MGU2ZjQyZWRhMjFiYjlhMGY2YTgwMDFhLmJpbmRQb3B1cChwb3B1cF83NWJmOWMxZTQ2NDY0YzY5OGZhNGI1Njc3ZjAyZmY0ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YjljMzk2MTdjYjE0NDkzYjVjYzU2ODQ4ZjE3NDQ0ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MzY4MTI5LC00NC4wMTA4ODMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBhMzI5ODAzNjNiMTQzNGU5MzM1Njk4Mzc1ZGNmNGFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM3MDk0NjY3NTA1ODRiMDI4ZTVmNjFiOTNmNTcxOWE4ID0gJCgnPGRpdiBpZD0iaHRtbF8zNzA5NDY2NzUwNTg0YjAyOGU1ZjYxYjkzZjU3MTlhOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VFJFVk86ICgtMTkuODM2ODEyOSwgLTQ0LjAxMDg4MzIpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYTMyOTgwMzYzYjE0MzRlOTMzNTY5ODM3NWRjZjRhZC5zZXRDb250ZW50KGh0bWxfMzcwOTQ2Njc1MDU4NGIwMjhlNWY2MWI5M2Y1NzE5YTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGI5YzM5NjE3Y2IxNDQ5M2I1Y2M1Njg0OGYxNzQ0NGYuYmluZFBvcHVwKHBvcHVwXzBhMzI5ODAzNjNiMTQzNGU5MzM1Njk4Mzc1ZGNmNGFkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0ODYxMWU5YmI0ZDQ0ZDZiOTQxYzYxMTVhMjk2NDA1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgzNjYzMzQ1LC00My45MjU1NTY3NzI5MzU5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYjA5OTBlMzUxY2I0NjU5ODA2NGI0YTA3YjkxYTNmYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMWU3M2YxNzdjMWU0MWUwYTE1ODNiYzcyYjVjOGU0OCA9ICQoJzxkaXYgaWQ9Imh0bWxfMzFlNzNmMTc3YzFlNDFlMGExNTgzYmM3MmI1YzhlNDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRVUEk6ICgtMTkuODM2NjMzNDUsIC00My45MjU1NTY3NzI5MzU5Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RiMDk5MGUzNTFjYjQ2NTk4MDY0YjRhMDdiOTFhM2ZjLnNldENvbnRlbnQoaHRtbF8zMWU3M2YxNzdjMWU0MWUwYTE1ODNiYzcyYjVjOGU0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNDg2MTFlOWJiNGQ0NGQ2Yjk0MWM2MTE1YTI5NjQwNS5iaW5kUG9wdXAocG9wdXBfZGIwOTkwZTM1MWNiNDY1OTgwNjRiNGEwN2I5MWEzZmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDBiMWQ2MzZkZjAyNGYxMDkxOTM5NDQzYjE4ZDcyNzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODgwOTI3Mzk5OTk5OTk3LC00My45MjM0NTc0OTkwOTI0MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NTk3Nzc1OTQxNjE0M2YwOWE2NWVjNzViZGExYzk5MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lODAwODc0N2E5MTM0YWUyODYxMjkwNWU1YzQxZTIzNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZTgwMDg3NDdhOTEzNGFlMjg2MTI5MDVlNWM0MWUyMzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVOSUFPOiAoLTE5Ljg4MDkyNzM5OTk5OTk5NywgLTQzLjkyMzQ1NzQ5OTA5MjQxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzU5Nzc3NTk0MTYxNDNmMDlhNjVlYzc1YmRhMWM5OTIuc2V0Q29udGVudChodG1sX2U4MDA4NzQ3YTkxMzRhZTI4NjEyOTA1ZTVjNDFlMjM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQwYjFkNjM2ZGYwMjRmMTA5MTkzOTQ0M2IxOGQ3Mjc5LmJpbmRQb3B1cChwb3B1cF83NTk3Nzc1OTQxNjE0M2YwOWE2NWVjNzViZGExYzk5Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMTg1ODUwY2FjZWU0MDgzYmMwMWFiNTE3MjI4ZjNiYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44Njc0MTM2LC00My45NDE1NzcwNzc2ODYzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NGY5ZjE1MzRkNGI0YjIxOTQwNjM5YjBkYzE4Y2QzZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NjAwN2Y5NTczMjY0MjI0OTExNjgwZGE5MWM4ZTlkNSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDYwMDdmOTU3MzI2NDIyNDkxMTY4MGRhOTFjOGU5ZDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVOSVZFUlNJVEFSSU86ICgtMTkuODY3NDEzNiwgLTQzLjk0MTU3NzA3NzY4NjM2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTRmOWYxNTM0ZDRiNGIyMTk0MDYzOWIwZGMxOGNkM2Yuc2V0Q29udGVudChodG1sXzQ2MDA3Zjk1NzMyNjQyMjQ5MTE2ODBkYTkxYzhlOWQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UxODU4NTBjYWNlZTQwODNiYzAxYWI1MTcyMjhmM2JjLmJpbmRQb3B1cChwb3B1cF85NGY5ZjE1MzRkNGI0YjIxOTQwNjM5YjBkYzE4Y2QzZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOWEzMDAwYjQ3ZWE0NmQ4OGQwNjNjZGQ4ODdlNjFlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS42NDAwMDAyLC00NC4zNTY3ODg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiNGQyYTdlYTFlNTRjOWU4ZTRhZWJlNWJmZmNhNWYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0N2QyMjU3YjA1ZjQ5N2JhN2NiY2I2ZmRhNDRkY2QzID0gJCgnPGRpdiBpZD0iaHRtbF83NDdkMjI1N2IwNWY0OTdiYTdjYmNiNmZkYTQ0ZGNkMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VVJVQ1VJQTogKC0xOS42NDAwMDAyLCAtNDQuMzU2Nzg4NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiNGQyYTdlYTFlNTRjOWU4ZTRhZWJlNWJmZmNhNWYyLnNldENvbnRlbnQoaHRtbF83NDdkMjI1N2IwNWY0OTdiYTdjYmNiNmZkYTQ0ZGNkMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOWEzMDAwYjQ3ZWE0NmQ4OGQwNjNjZGQ4ODdlNjFlMC5iaW5kUG9wdXAocG9wdXBfOGI0ZDJhN2VhMWU1NGM5ZThlNGFlYmU1YmZmY2E1ZjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2Q0YTg0YzUyYjhkNDVhYmE3YWQyYjc3MDg2NWUwODEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjAuMDA3MTUwNzUsLTQ0LjAzODQ2ODgzNTg1NTg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI5OTZiZjc4YzM2ZDRiNDY4MDY4NDhjODYwOTdiMTUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU5OGE4OWEzMzY3ZjQ3OTU4Mzg3MTBjZWU3NzViZDFiID0gJCgnPGRpdiBpZD0iaHRtbF81OThhODlhMzM2N2Y0Nzk1ODM4NzEwY2VlNzc1YmQxYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VkFMRSBETyBKQVRPQkE6ICgtMjAuMDA3MTUwNzUsIC00NC4wMzg0Njg4MzU4NTU4NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI5OTZiZjc4YzM2ZDRiNDY4MDY4NDhjODYwOTdiMTUxLnNldENvbnRlbnQoaHRtbF81OThhODlhMzM2N2Y0Nzk1ODM4NzEwY2VlNzc1YmQxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZDRhODRjNTJiOGQ0NWFiYTdhZDJiNzcwODY1ZTA4MS5iaW5kUG9wdXAocG9wdXBfMjk5NmJmNzhjMzZkNGI0NjgwNjg0OGM4NjA5N2IxNTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjdiOTFjZjM2NDc4NDRjNjk4YzMzMzBlMDRlMjVhYjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTEwMjc0OCwtNDMuODk2NzA1MTYxMjE1NjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTRjMDkwZjQyNWZlNGE3Y2IyNjE0MWZmYTZmYzk1YjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDIxZjc5YWFhMzRmNDBhNTgzYTM1NTU3YmVhZGEzZjUgPSAkKCc8ZGl2IGlkPSJodG1sXzQyMWY3OWFhYTM0ZjQwYTU4M2EzNTU1N2JlYWRhM2Y1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WRVJBIENSVVo6ICgtMTkuOTEwMjc0OCwgLTQzLjg5NjcwNTE2MTIxNTYxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTRjMDkwZjQyNWZlNGE3Y2IyNjE0MWZmYTZmYzk1YjYuc2V0Q29udGVudChodG1sXzQyMWY3OWFhYTM0ZjQwYTU4M2EzNTU1N2JlYWRhM2Y1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI3YjkxY2YzNjQ3ODQ0YzY5OGMzMzMwZTA0ZTI1YWI1LmJpbmRQb3B1cChwb3B1cF9lNGMwOTBmNDI1ZmU0YTdjYjI2MTQxZmZhNmZjOTViNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81Njg1ZDkyNWQyZDA0ZmZlOTQ0MjZhNjZkYjc0N2M2YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MTQyMDg5LC00My45NjIyMDM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhYzdiYmQ1N2UwNDQ5MTM5MmIwNmJjMzA2MTBkMGIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgxOGQ0NzdiODgwYTQwOWNhZGI3ZWI3MmVmNDA3NDkzID0gJCgnPGRpdiBpZD0iaHRtbF84MThkNDc3Yjg4MGE0MDljYWRiN2ViNzJlZjQwNzQ5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VklMQSBCUkFTSUxJQTogKC0xOS44MTQyMDg5LCAtNDMuOTYyMjAzNik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhYzdiYmQ1N2UwNDQ5MTM5MmIwNmJjMzA2MTBkMGIxLnNldENvbnRlbnQoaHRtbF84MThkNDc3Yjg4MGE0MDljYWRiN2ViNzJlZjQwNzQ5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81Njg1ZDkyNWQyZDA0ZmZlOTQ0MjZhNjZkYjc0N2M2Yi5iaW5kUG9wdXAocG9wdXBfYWFjN2JiZDU3ZTA0NDkxMzkyYjA2YmMzMDYxMGQwYjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjViYjY3NzcyNWI4NDZjZWFiZTZlNjRmNmJhN2ExMWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTM0OTkzNSwtNDMuOTA4ODU4MjU2MTEzNjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWQ4MWU5MTEzYThhNDBkYWJlZWU1NGU4NzM5YjgyNzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTgzZmIyMzJmYTM3NGNmZDgwNWQyMWJjOGI5YzA0YjggPSAkKCc8ZGl2IGlkPSJodG1sX2E4M2ZiMjMyZmEzNzRjZmQ4MDVkMjFiYzhiOWMwNGI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WSUxBIENBRkVaQUw6ICgtMTkuOTM0OTkzNSwgLTQzLjkwODg1ODI1NjExMzY0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWQ4MWU5MTEzYThhNDBkYWJlZWU1NGU4NzM5YjgyNzcuc2V0Q29udGVudChodG1sX2E4M2ZiMjMyZmEzNzRjZmQ4MDVkMjFiYzhiOWMwNGI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y1YmI2Nzc3MjViODQ2Y2VhYmU2ZTY0ZjZiYTdhMTFhLmJpbmRQb3B1cChwb3B1cF8xZDgxZTkxMTNhOGE0MGRhYmVlZTU0ZTg3MzliODI3Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MTM2ZGViM2E0MTI0NGZkOWZiYzg3MjliYTU4YzI4OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45OTU0MzI4MDAwMDAwMDMsLTQzLjk5MjM2NjU3MzgwNTExNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZDAwMGM2MDJkYzY0NWE3YWI4NzExMTJmZmFlNGQ5MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZGM5ZTFkODEyNDQ0ZTdiYTlhYTU5ZjY1MzBiOWI1NyA9ICQoJzxkaXYgaWQ9Imh0bWxfZGRjOWUxZDgxMjQ0NGU3YmE5YWE1OWY2NTMwYjliNTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZJTEEgQ0VNSUc6ICgtMTkuOTk1NDMyODAwMDAwMDAzLCAtNDMuOTkyMzY2NTczODA1MTE0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWQwMDBjNjAyZGM2NDVhN2FiODcxMTEyZmZhZTRkOTMuc2V0Q29udGVudChodG1sX2RkYzllMWQ4MTI0NDRlN2JhOWFhNTlmNjUzMGI5YjU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkxMzZkZWIzYTQxMjQ0ZmQ5ZmJjODcyOWJhNThjMjg4LmJpbmRQb3B1cChwb3B1cF81ZDAwMGM2MDJkYzY0NWE3YWI4NzExMTJmZmFlNGQ5Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZTBmMjg1ZTk5MjI0NWM3OWZmZDIzZjM2ZTQwNjRiMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzY2NjkwMDAwMDAwMDIsLTQ0LjAwMTk4NDY2NzYwNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODRmNGE2MzUxNWVlNDZiY2ExMzgwYmQ1ZmQ1OGIzOWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDFkOGMwNTZkYWQ5NDhjMmFiOWQ1YWQyMWJkNWFiMWIgPSAkKCc8ZGl2IGlkPSJodG1sXzAxZDhjMDU2ZGFkOTQ4YzJhYjlkNWFkMjFiZDVhYjFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WSUxBIE9FU1RFOiAoLTE5LjkzNjY2OTAwMDAwMDAwMiwgLTQ0LjAwMTk4NDY2NzYwNDMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NGY0YTYzNTE1ZWU0NmJjYTEzODBiZDVmZDU4YjM5ZC5zZXRDb250ZW50KGh0bWxfMDFkOGMwNTZkYWQ5NDhjMmFiOWQ1YWQyMWJkNWFiMWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWUwZjI4NWU5OTIyNDVjNzlmZmQyM2YzNmU0MDY0YjAuYmluZFBvcHVwKHBvcHVwXzg0ZjRhNjM1MTVlZTQ2YmNhMTM4MGJkNWZkNThiMzlkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1MmRkMzQ3Nzk1NTQ4OTNiZjJhMzZjYzVkNDAyNzZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0NDk0MTI1LC00NC4wMjA4MTY0NDA2OTAzOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYjNkYmY1YjhlYTM0NGYzOTM0OWI1ZTJkZTliNTYwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NDdlZjI5OGY2YjY0NzYyODVkZjQ1YWZlMDMwMTJlMCA9ICQoJzxkaXYgaWQ9Imh0bWxfNjQ3ZWYyOThmNmI2NDc2Mjg1ZGY0NWFmZTAzMDEyZTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZJTEEgVklSR0lOSUE6ICgtMTkuOTQ0OTQxMjUsIC00NC4wMjA4MTY0NDA2OTAzOCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ViM2RiZjViOGVhMzQ0ZjM5MzQ5YjVlMmRlOWI1NjAxLnNldENvbnRlbnQoaHRtbF82NDdlZjI5OGY2YjY0NzYyODVkZjQ1YWZlMDMwMTJlMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNTJkZDM0Nzc5NTU0ODkzYmYyYTM2Y2M1ZDQwMjc2Zi5iaW5kUG9wdXAocG9wdXBfZWIzZGJmNWI4ZWEzNDRmMzkzNDliNWUyZGU5YjU2MDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTE0MzY5MjhkODY0NDAzYTg3MzNmYWY2MTJmY2ZiNDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTU1MDA1NSwtNDMuOTk5MDIxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lM2E5ZjhlNThhNWU0ZDhhYjdjOWZlNzIzNDEyODIzZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYjU1M2RiMThiN2Q0MjgzOTRiYTdhYjRmYTgyNTRhNiA9ICQoJzxkaXYgaWQ9Imh0bWxfZGI1NTNkYjE4YjdkNDI4Mzk0YmE3YWI0ZmE4MjU0YTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZJU1RBIEFMRUdSRTogKC0xOS45NTUwMDU1LCAtNDMuOTk5MDIxNCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UzYTlmOGU1OGE1ZTRkOGFiN2M5ZmU3MjM0MTI4MjNlLnNldENvbnRlbnQoaHRtbF9kYjU1M2RiMThiN2Q0MjgzOTRiYTdhYjRmYTgyNTRhNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMTQzNjkyOGQ4NjQ0MDNhODczM2ZhZjYxMmZjZmI0Mi5iaW5kUG9wdXAocG9wdXBfZTNhOWY4ZTU4YTVlNGQ4YWI3YzlmZTcyMzQxMjgyM2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDVhZDBhM2YxNzQ2NDFlMzk3ZGY2MjZiODg0YjhlNWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTg5NTM2NCwtNDQuMDU5Mzc3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMmYzMzFjYjU1YTc0Y2EyYTU3NjVjNWJmZjk2Y2NlZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZTI4Njk4ZmI5MGY0OTg4OTMyMTc3ZjQxYjU5OWQ1NyA9ICQoJzxkaXYgaWQ9Imh0bWxfNWUyODY5OGZiOTBmNDk4ODkzMjE3N2Y0MWI1OTlkNTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldBU0hJTkdUT04gUElSRVM6ICgtMTkuOTg5NTM2NCwgLTQ0LjA1OTM3NzQpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMmYzMzFjYjU1YTc0Y2EyYTU3NjVjNWJmZjk2Y2NlZi5zZXRDb250ZW50KGh0bWxfNWUyODY5OGZiOTBmNDk4ODkzMjE3N2Y0MWI1OTlkNTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDVhZDBhM2YxNzQ2NDFlMzk3ZGY2MjZiODg0YjhlNWIuYmluZFBvcHVwKHBvcHVwXzEyZjMzMWNiNTVhNzRjYTJhNTc2NWM1YmZmOTZjY2VmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFhYmIyNzVlNDMwYzRiMjE4ZDdlOTBmYzFjYzA5MmZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg0MDE0MjMsLTQ0LjAxOTMzNDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjVlNThlNTEwNGNlNGIyZWFkOWZiNTA2Nzg0ZDA2ZjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDllMTgyYTkyMTg3NGM1NGEwODQzYTI4NWU4NDAxMmIgPSAkKCc8ZGl2IGlkPSJodG1sXzA5ZTE4MmE5MjE4NzRjNTRhMDg0M2EyODVlODQwMTJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5YQU5HUklMQTogKC0xOS44NDAxNDIzLCAtNDQuMDE5MzM0NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y1ZTU4ZTUxMDRjZTRiMmVhZDlmYjUwNjc4NGQwNmY4LnNldENvbnRlbnQoaHRtbF8wOWUxODJhOTIxODc0YzU0YTA4NDNhMjg1ZTg0MDEyYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYWJiMjc1ZTQzMGM0YjIxOGQ3ZTkwZmMxY2MwOTJmZi5iaW5kUG9wdXAocG9wdXBfZjVlNThlNTEwNGNlNGIyZWFkOWZiNTA2Nzg0ZDA2ZjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2I5ZmYyNDhlY2NjNDkyOWJiNzNkZWNkYmFjODE0OGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNy4zNzEwNzUsLTY0Ljc1MzAyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YjNkMmIyOGQ3YTY0OWUyOThhYzdjODY4NmFjMGVmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81Y2Y4N2RmYzQ0YTY0MjQ3YTg3ZDZkZmI2YmE5MWYyYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNWNmODdkZmM0NGE2NDI0N2E4N2Q2ZGZiNmJhOTFmMmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlpPTkEgUlVSQUw6ICgtNy4zNzEwNzUsIC02NC43NTMwMjYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YjNkMmIyOGQ3YTY0OWUyOThhYzdjODY4NmFjMGVmNy5zZXRDb250ZW50KGh0bWxfNWNmODdkZmM0NGE2NDI0N2E4N2Q2ZGZiNmJhOTFmMmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2I5ZmYyNDhlY2NjNDkyOWJiNzNkZWNkYmFjODE0OGEuYmluZFBvcHVwKHBvcHVwXzViM2QyYjI4ZDdhNjQ5ZTI5OGFjN2M4Njg2YWMwZWY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmMTY4N2JhYjczNDQ2NjlhMDc2NzhmNWQyMzZlMGZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5MjI2MDcsLTQ0LjAwMzQ1ODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDJhYjkyOGNkYzlhNDBkOGI5YmMyOWYwMDZjMGRmMzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWEzMTQ3MzE0MTk5NDkyMWIzY2E4MzEyMWIwNzUwODQgPSAkKCc8ZGl2IGlkPSJodG1sX2FhMzE0NzMxNDE5OTQ5MjFiM2NhODMxMjFiMDc1MDg0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BTElQSU8gREUgTUVMTzogKC0xOS44OTIyNjA3LCAtNDQuMDAzNDU4Nyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAyYWI5MjhjZGM5YTQwZDhiOWJjMjlmMDA2YzBkZjM4LnNldENvbnRlbnQoaHRtbF9hYTMxNDczMTQxOTk0OTIxYjNjYTgzMTIxYjA3NTA4NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZjE2ODdiYWI3MzQ0NjY5YTA3Njc4ZjVkMjM2ZTBmZS5iaW5kUG9wdXAocG9wdXBfMDJhYjkyOGNkYzlhNDBkOGI5YmMyOWYwMDZjMGRmMzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmQyNWFiZTRkMTAwNDdhMWE5MTYwZTJkMzlmOGI3YjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODQ2NjYyNiwtNDQuMDA2ODA2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZTA3YzVmMjJmYzM0YmExYWIzNWE2ZGRjNjRjMjY0NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MjZkZTQ4MjE0Zjk0YTA4OTk5MjkwNjA1N2Y4YmYzOSA9ICQoJzxkaXYgaWQ9Imh0bWxfNTI2ZGU0ODIxNGY5NGEwODk5OTI5MDYwNTdmOGJmMzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJSQVVOQVM6ICgtMTkuODQ2NjYyNiwgLTQ0LjAwNjgwNjMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZTA3YzVmMjJmYzM0YmExYWIzNWE2ZGRjNjRjMjY0Ny5zZXRDb250ZW50KGh0bWxfNTI2ZGU0ODIxNGY5NGEwODk5OTI5MDYwNTdmOGJmMzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmQyNWFiZTRkMTAwNDdhMWE5MTYwZTJkMzlmOGI3YjMuYmluZFBvcHVwKHBvcHVwXzZlMDdjNWYyMmZjMzRiYTFhYjM1YTZkZGM2NGMyNjQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwNDg1Njc5MjYyMjQ4OThhMjNkMDRlYmYzNzE2NzdhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5OTcwMDU1LC00My45NjUyNTU1ODU4OTYxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMDNlNmQ1ODVmNWU0MTQyYjZkNmViODlkMDNjNWY2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOTg0NWI0N2JmZmY0NWVkOWQ1MTZkNmRlMWJhNGMzZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMDk4NDViNDdiZmZmNDVlZDlkNTE2ZDZkZTFiYTRjM2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBSUNBUkE6ICgtMTkuODk5NzAwNTUsIC00My45NjUyNTU1ODU4OTYxNyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EwM2U2ZDU4NWY1ZTQxNDJiNmQ2ZWI4OWQwM2M1ZjYyLnNldENvbnRlbnQoaHRtbF8wOTg0NWI0N2JmZmY0NWVkOWQ1MTZkNmRlMWJhNGMzZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMDQ4NTY3OTI2MjI0ODk4YTIzZDA0ZWJmMzcxNjc3YS5iaW5kUG9wdXAocG9wdXBfYTAzZTZkNTg1ZjVlNDE0MmI2ZDZlYjg5ZDAzYzVmNjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWIzY2EwMjdkOTNjNDgxOThiYTZjZGJjNWEzM2VmMTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTA1MTMzNiwtNDMuOTc0OTg3MjIwMTA1OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmMzMmRiZDU4YmFkNGRiN2ExNDkzNDZjZDhiNTQxMmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWY3MmYzMTQzODZkNDA0MTliZDhhNzNhZjMwNTYxYzEgPSAkKCc8ZGl2IGlkPSJodG1sXzlmNzJmMzE0Mzg2ZDQwNDE5YmQ4YTczYWYzMDU2MWMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQUlDQVJBIEFERUxBSURFOiAoLTE5LjkwNTEzMzYsIC00My45NzQ5ODcyMjAxMDU5Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZjMzJkYmQ1OGJhZDRkYjdhMTQ5MzQ2Y2Q4YjU0MTJkLnNldENvbnRlbnQoaHRtbF85ZjcyZjMxNDM4NmQ0MDQxOWJkOGE3M2FmMzA1NjFjMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hYjNjYTAyN2Q5M2M0ODE5OGJhNmNkYmM1YTMzZWYxNi5iaW5kUG9wdXAocG9wdXBfZmMzMmRiZDU4YmFkNGRiN2ExNDkzNDZjZDhiNTQxMmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYThiNTI3YmRmYWY2NDgxZWFkMTNjMTYyODc1YmM3MGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTI0MzYxMTUsLTQzLjk3MDA1NDQwMzM0NTY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JkNmVmOGRkYTRjZTQwMTQ5NGEzMThmNDUxNWRlNTVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2OTc1MmE5OTk3ZDQ0M2Q5OTIzOWVlYzY0NmM2ODgzID0gJCgnPGRpdiBpZD0iaHRtbF9mNjk3NTJhOTk5N2Q0NDNkOTkyMzllZWM2NDZjNjg4MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0FMQUZBVEU6ICgtMTkuOTI0MzYxMTUsIC00My45NzAwNTQ0MDMzNDU2Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JkNmVmOGRkYTRjZTQwMTQ5NGEzMThmNDUxNWRlNTVhLnNldENvbnRlbnQoaHRtbF9mNjk3NTJhOTk5N2Q0NDNkOTkyMzllZWM2NDZjNjg4Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hOGI1MjdiZGZhZjY0ODFlYWQxM2MxNjI4NzViYzcwZi5iaW5kUG9wdXAocG9wdXBfYmQ2ZWY4ZGRhNGNlNDAxNDk0YTMxOGY0NTE1ZGU1NWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTIxYzY3ZWMyYzJmNDVhMWEyY2YxODdjZjAzMjhkOTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTEzNTUwOTUsLTQzLjk2NTc0NzQzMTk0ODgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhjNmU4ZDczMWNjNjQxODQ4NTQ2ZTY3Y2I1ODY1OWE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4NGJmYWRjNjA2NDQ3MmU4ZWNiYjhhNTEyOGZhNmI2ID0gJCgnPGRpdiBpZD0iaHRtbF9iODRiZmFkYzYwNjQ0NzJlOGVjYmI4YTUxMjhmYTZiNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0FSTE9TIFBSQVRFUzogKC0xOS45MTM1NTA5NSwgLTQzLjk2NTc0NzQzMTk0ODgxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGM2ZThkNzMxY2M2NDE4NDg1NDZlNjdjYjU4NjU5YTguc2V0Q29udGVudChodG1sX2I4NGJmYWRjNjA2NDQ3MmU4ZWNiYjhhNTEyOGZhNmI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEyMWM2N2VjMmMyZjQ1YTFhMmNmMTg3Y2YwMzI4ZDkwLmJpbmRQb3B1cChwb3B1cF84YzZlOGQ3MzFjYzY0MTg0ODU0NmU2N2NiNTg2NTlhOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZjE1YmFmY2RkN2E0MGI0YmExYjNlMDI5Y2U5NmMwMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MjI3MjA3LC00NC4wMDcxNzUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMzZWUyNmIzZTc3MTQ0MWM5ZTg2NjBiZjBiOWQ0MGVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE2NjkxODM4ZmJlNTQzNGE5NmJlM2VhY2QzMDEwMDk0ID0gJCgnPGRpdiBpZD0iaHRtbF8xNjY5MTgzOGZiZTU0MzRhOTZiZTNlYWNkMzAxMDA5NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q09OSlVOVE8gQ0FMSUZPUk5JQSBJOiAoLTE5LjkyMjcyMDcsIC00NC4wMDcxNzUzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzNlZTI2YjNlNzcxNDQxYzllODY2MGJmMGI5ZDQwZWYuc2V0Q29udGVudChodG1sXzE2NjkxODM4ZmJlNTQzNGE5NmJlM2VhY2QzMDEwMDk0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RmMTViYWZjZGQ3YTQwYjRiYTFiM2UwMjljZTk2YzAwLmJpbmRQb3B1cChwb3B1cF8zM2VlMjZiM2U3NzE0NDFjOWU4NjYwYmYwYjlkNDBlZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YzI4NzY4ODExMWI0NGY0YjBjYTZhZTdhYjU3NDRiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MTkxMDI2LC00NC4wMTEwNTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFkY2I4MzgwMWUzYTRhNzc5ZDRiYWIyZTI1ZmE4NDBmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZjNzdmYmM2NGI2MTRhMTRhZGNhYzVkOWE4ZjkyNjk2ID0gJCgnPGRpdiBpZD0iaHRtbF9mYzc3ZmJjNjRiNjE0YTE0YWRjYWM1ZDlhOGY5MjY5NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q09OSlVOVE8gQ0FMSUZPUk5JQSBJSTogKC0xOS45MTkxMDI2LCAtNDQuMDExMDUzOSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFkY2I4MzgwMWUzYTRhNzc5ZDRiYWIyZTI1ZmE4NDBmLnNldENvbnRlbnQoaHRtbF9mYzc3ZmJjNjRiNjE0YTE0YWRjYWM1ZDlhOGY5MjY5Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YzI4NzY4ODExMWI0NGY0YjBjYTZhZTdhYjU3NDRiNC5iaW5kUG9wdXAocG9wdXBfMWRjYjgzODAxZTNhNGE3NzlkNGJhYjJlMjVmYTg0MGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjRjMGY1OTQ3YjczNDgzMGE3ZWM0NmJmMjVkOGIxYjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODg1NzQwMSwtNDQuMDA4NTE0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OTNiZGFjY2ViNjU0NmM5OGQ1Mjc4ZTFmN2EzNDU3OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZmY2NGI2ZGQ0NmQ0ZWYzOGJhZTc3YWU0NmVkMDQ4MCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWZmNjRiNmRkNDZkNGVmMzhiYWU3N2FlNDZlZDA0ODAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNPTkpVTlRPIENFTFNPIE1BQ0hBRE86ICgtMTkuODg1NzQwMSwgLTQ0LjAwODUxNDMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OTNiZGFjY2ViNjU0NmM5OGQ1Mjc4ZTFmN2EzNDU3OC5zZXRDb250ZW50KGh0bWxfOWZmNjRiNmRkNDZkNGVmMzhiYWU3N2FlNDZlZDA0ODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjRjMGY1OTQ3YjczNDgzMGE3ZWM0NmJmMjVkOGIxYjIuYmluZFBvcHVwKHBvcHVwXzk5M2JkYWNjZWI2NTQ2Yzk4ZDUyNzhlMWY3YTM0NTc4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI0YmJjNzgwZGRiNDRhZGNiZGIyYzUzYThjZWI2NDUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyMjAyMzA1LC00My45OTgxNTE2NjM2Nzg0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZDA4NzNlMTNiZDY0NjBmYjczYmYyYzg4NDk4NTk1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYjJmNDljNDA3MmQ0MmZjOGY5MDYxZjliYWY1NzZjYiA9ICQoJzxkaXYgaWQ9Imh0bWxfYWIyZjQ5YzQwNzJkNDJmYzhmOTA2MWY5YmFmNTc2Y2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRPTSBDQUJSQUw6ICgtMTkuOTIyMDIzMDUsIC00My45OTgxNTE2NjM2Nzg0Myk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhkMDg3M2UxM2JkNjQ2MGZiNzNiZjJjODg0OTg1OTVjLnNldENvbnRlbnQoaHRtbF9hYjJmNDljNDA3MmQ0MmZjOGY5MDYxZjliYWY1NzZjYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNGJiYzc4MGRkYjQ0YWRjYmRiMmM1M2E4Y2ViNjQ1Mi5iaW5kUG9wdXAocG9wdXBfOGQwODczZTEzYmQ2NDYwZmI3M2JmMmM4ODQ5ODU5NWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzAyYmM2N2U4YTljNDc3OGI2OTBiOWNmMmJiMzcxMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTA1NDk5MiwtNDMuOTA0MjY3NzcyODE0NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWM5ZDE2ODYzZmIwNGFlMWI2ZDc4ZDkwYTM2YTVjOTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTM2N2I4ZDk5MDhkNGE4M2E4NjA2NTU4Mjk0MTEzYjQgPSAkKCc8ZGl2IGlkPSJodG1sX2UzNjdiOGQ5OTA4ZDRhODNhODYwNjU1ODI5NDExM2I0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FU1BMQU5BREE6ICgtMTkuOTA1NDk5MiwgLTQzLjkwNDI2Nzc3MjgxNDUyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWM5ZDE2ODYzZmIwNGFlMWI2ZDc4ZDkwYTM2YTVjOTkuc2V0Q29udGVudChodG1sX2UzNjdiOGQ5OTA4ZDRhODNhODYwNjU1ODI5NDExM2I0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMwMmJjNjdlOGE5YzQ3NzhiNjkwYjljZjJiYjM3MTAwLmJpbmRQb3B1cChwb3B1cF85YzlkMTY4NjNmYjA0YWUxYjZkNzhkOTBhMzZhNWM5OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNjg3MTBmNzUxMTI0NDllOWMyYmE3YjllNGY1M2ExOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MzY0ODY2LC00My45OTc5OTUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q2ZGVmMDk5YzMzNDQxZTdhYmUxMDcxZmRlZDUxZWE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhiMWJiM2VmYjAxZjRjNDhhNmQ5YzQ5Y2JhZGU1YzU2ID0gJCgnPGRpdiBpZD0iaHRtbF84YjFiYjNlZmIwMWY0YzQ4YTZkOWM0OWNiYWRlNWM1NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R0FSQ0FTOiAoLTE5LjgzNjQ4NjYsIC00My45OTc5OTUyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDZkZWYwOTljMzM0NDFlN2FiZTEwNzFmZGVkNTFlYTUuc2V0Q29udGVudChodG1sXzhiMWJiM2VmYjAxZjRjNDhhNmQ5YzQ5Y2JhZGU1YzU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E2ODcxMGY3NTExMjQ0OWU5YzJiYTdiOWU0ZjUzYTE4LmJpbmRQb3B1cChwb3B1cF9kNmRlZjA5OWMzMzQ0MWU3YWJlMTA3MWZkZWQ1MWVhNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMjNjMWVjNzJkYWQ0MmZkYmY1ZjQ4ZTA1NzE4MjY2YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MDk2MDUzMDAwMDAwMDMsLTQzLjkxNzUwOTc3Mzc0MzE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ViNDM0ZjExNjQwMjRmMjg4MzFlMTM2MmY2Yzc4MzNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5YzkzOTY5Y2MyYzQzNDRhNTRkYmI4YmY1ZDg5ZGQ1ID0gJCgnPGRpdiBpZD0iaHRtbF84OWM5Mzk2OWNjMmM0MzQ0YTU0ZGJiOGJmNWQ4OWRkNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SE9SVE86ICgtMTkuOTA5NjA1MzAwMDAwMDAzLCAtNDMuOTE3NTA5NzczNzQzMTkpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYjQzNGYxMTY0MDI0ZjI4ODMxZTEzNjJmNmM3ODMzZi5zZXRDb250ZW50KGh0bWxfODljOTM5NjljYzJjNDM0NGE1NGRiYjhiZjVkODlkZDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjIzYzFlYzcyZGFkNDJmZGJmNWY0OGUwNTcxODI2NmIuYmluZFBvcHVwKHBvcHVwX2ViNDM0ZjExNjQwMjRmMjg4MzFlMTM2MmY2Yzc4MzNmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3OTZlYmEwNjQwYTQ5ZDk5OGEwNGNiZGVkZmZhNDJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0NzA0MDIsLTQzLjk3MTgyMjgwMTE4NjU3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODVlZjA3NzgwNTY0YjA0OTJhOWNlMGQ4M2JjNWQ5MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YmY0ZGEzYjk2YmI0OGEzOTE4OTMwNGYyNjEwMjdkMiA9ICQoJzxkaXYgaWQ9Imh0bWxfNmJmNGRhM2I5NmJiNDhhMzkxODkzMDRmMjYxMDI3ZDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpBUkRJTSBBTUVSSUNBOiAoLTE5Ljk0NzA0MDIsIC00My45NzE4MjI4MDExODY1NzYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ODVlZjA3NzgwNTY0YjA0OTJhOWNlMGQ4M2JjNWQ5My5zZXRDb250ZW50KGh0bWxfNmJmNGRhM2I5NmJiNDhhMzkxODkzMDRmMjYxMDI3ZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzc5NmViYTA2NDBhNDlkOTk4YTA0Y2JkZWRmZmE0MmEuYmluZFBvcHVwKHBvcHVwXzk4NWVmMDc3ODA1NjRiMDQ5MmE5Y2UwZDgzYmM1ZDkzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk1YzBiODhhN2UzYjQ2Mzk4ZjE1MTYyYjI2ZTZkMDg4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyOTI0NSwtNDMuOTk5Njg4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNDg4OWViNWY5NzI0MjgxYTc4MDhkNjA2YTI1YzhlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NjIzYWQ4NjczN2Y0Y2NmYTQ2ZDk5ZGFhZGY3Mjc3NCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzYyM2FkODY3MzdmNGNjZmE0NmQ5OWRhYWRmNzI3NzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpPQU8gUElOSEVJUk86ICgtMTkuOTI5MjQ1LCAtNDMuOTk5Njg4Nyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA0ODg5ZWI1Zjk3MjQyODFhNzgwOGQ2MDZhMjVjOGUzLnNldENvbnRlbnQoaHRtbF83NjIzYWQ4NjczN2Y0Y2NmYTQ2ZDk5ZGFhZGY3Mjc3NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NWMwYjg4YTdlM2I0NjM5OGYxNTE2MmIyNmU2ZDA4OC5iaW5kUG9wdXAocG9wdXBfMDQ4ODllYjVmOTcyNDI4MWE3ODA4ZDYwNmEyNWM4ZTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTI1MDgyYzQxOWU0NGVkODk5YzBlYzdiMWM2MGM1OGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODA2NDE0MiwtNDMuOTk0NTc1MzY3ODY4MzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWYyOWU3MjUzODdkNDJiZmFmMzViNzU0ZTM1YjBjYjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGM3NjMzMmZlY2QyNDVkNzkxMjg4NWNhNzQ5YjI1ZjMgPSAkKCc8ZGl2IGlkPSJodG1sXzRjNzYzMzJmZWNkMjQ1ZDc5MTI4ODVjYTc0OWIyNWYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQUdPSU5IQTogKC0xOS44MDY0MTQyLCAtNDMuOTk0NTc1MzY3ODY4MzEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZjI5ZTcyNTM4N2Q0MmJmYWYzNWI3NTRlMzViMGNiMi5zZXRDb250ZW50KGh0bWxfNGM3NjMzMmZlY2QyNDVkNzkxMjg4NWNhNzQ5YjI1ZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTI1MDgyYzQxOWU0NGVkODk5YzBlYzdiMWM2MGM1OGQuYmluZFBvcHVwKHBvcHVwX2FmMjllNzI1Mzg3ZDQyYmZhZjM1Yjc1NGUzNWIwY2IyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg3MDI2OGFhZjY2ODRjNDBiNzM4OTZjNmY1ZmZkMDY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkxNzUzMDA1LC00My45OTAwNTQ2MTk4NzYyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZTgxMDMxOWFjYzY0MGIxYjA5NmFhNGM5NmI5ZTI2OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZmI2YzQ1ZWVlZTU0MjUxODRhMTIyYjZkMmZjMDI3NyA9ICQoJzxkaXYgaWQ9Imh0bWxfYWZiNmM0NWVlZWU1NDI1MTg0YTEyMmI2ZDJmYzAyNzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1JTkFTIEJSQVNJTDogKC0xOS45MTc1MzAwNSwgLTQzLjk5MDA1NDYxOTg3NjIzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGU4MTAzMTlhY2M2NDBiMWIwOTZhYTRjOTZiOWUyNjkuc2V0Q29udGVudChodG1sX2FmYjZjNDVlZWVlNTQyNTE4NGExMjJiNmQyZmMwMjc3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg3MDI2OGFhZjY2ODRjNDBiNzM4OTZjNmY1ZmZkMDY0LmJpbmRQb3B1cChwb3B1cF84ZTgxMDMxOWFjYzY0MGIxYjA5NmFhNGM5NmI5ZTI2OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNDY3ZTI5NTQ0ODE0ZDA5ODI2ZGNmMzVjZjEyY2UzNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MDkyNzY0NSwtNDMuOTc3OTI4MDc5MDMyNTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDM3MGEwYTQ4MTk1NDA5MmFkYWRhZmFiYjQyZmM0OTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjk3OWI4ZGIzNjVmNGRmZTg1NTFhZjg4MzI1ZTdiNGIgPSAkKCc8ZGl2IGlkPSJodG1sXzY5NzliOGRiMzY1ZjRkZmU4NTUxYWY4ODMyNWU3YjRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NT05TRU5IT1IgTUVTU0lBUzogKC0xOS45MDkyNzY0NSwgLTQzLjk3NzkyODA3OTAzMjUyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDM3MGEwYTQ4MTk1NDA5MmFkYWRhZmFiYjQyZmM0OTEuc2V0Q29udGVudChodG1sXzY5NzliOGRiMzY1ZjRkZmU4NTUxYWY4ODMyNWU3YjRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E0NjdlMjk1NDQ4MTRkMDk4MjZkY2YzNWNmMTJjZTM1LmJpbmRQb3B1cChwb3B1cF80MzcwYTBhNDgxOTU0MDkyYWRhZGFmYWJiNDJmYzQ5MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYzRiYWE1ODVjOTA0NzU3ODYyZjBjMDViZDlmN2UzOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44OTMwMTM5LC00My45MzQxMzY3MzE0NTY0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMDJkYzc1ZTQ4MzY0OGM0ODE1Y2U5YTU4Njk5NDI0MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jODVmZjgxYWU2ZGI0NGNjYWUxN2VjYTg5NTA5NWJmNiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzg1ZmY4MWFlNmRiNDRjY2FlMTdlY2E4OTUwOTViZjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVkEgRkxPUkVTVEE6ICgtMTkuODkzMDEzOSwgLTQzLjkzNDEzNjczMTQ1NjQ1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjAyZGM3NWU0ODM2NDhjNDgxNWNlOWE1ODY5OTQyNDAuc2V0Q29udGVudChodG1sX2M4NWZmODFhZTZkYjQ0Y2NhZTE3ZWNhODk1MDk1YmY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZjNGJhYTU4NWM5MDQ3NTc4NjJmMGMwNWJkOWY3ZTM5LmJpbmRQb3B1cChwb3B1cF8yMDJkYzc1ZTQ4MzY0OGM0ODE1Y2U5YTU4Njk5NDI0MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYjBjYmQ1OGJkNmM0MGI5YTMyZGVjNjc3NGM4OGU5ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDE1NTI0LC00My45Njg1MzU5MTc1Mjg0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zODBlY2RjMTcyZjA0YzBjYWNlYWMwZjRjN2E1NjQwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGExMzZiYzQwNDI0OTliYmZiOTZmZWNhYmMyY2I1YSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjhhMTM2YmM0MDQyNDk5YmJmYjk2ZmVjYWJjMmNiNWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVkEgR1JBTkFEQTogKC0xOS45NDE1NTI0LCAtNDMuOTY4NTM1OTE3NTI4NDMpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zODBlY2RjMTcyZjA0YzBjYWNlYWMwZjRjN2E1NjQwMS5zZXRDb250ZW50KGh0bWxfNjhhMTM2YmM0MDQyNDk5YmJmYjk2ZmVjYWJjMmNiNWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWIwY2JkNThiZDZjNDBiOWEzMmRlYzY3NzRjODhlOWQuYmluZFBvcHVwKHBvcHVwXzM4MGVjZGMxNzJmMDRjMGNhY2VhYzBmNGM3YTU2NDAxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAzM2JlYjQwOGIzODRiYTNhMDk0M2Q2MDE0OWFmNzQ3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzMzUwMTM1LC00My45NzcyNTM0NzU3MDEzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYzBjZGNjOTE3NGM0NmE2YWJlNDI2NTUzZjFmNGRkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNzZjNTUzMzJjYzE0ODUzOTkwN2VlOGU4NGUzMzgxOSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzc2YzU1MzMyY2MxNDg1Mzk5MDdlZThlODRlMzM4MTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PVkEgU1VJQ0E6ICgtMTkuOTMzNTAxMzUsIC00My45NzcyNTM0NzU3MDEzMyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNjMGNkY2M5MTc0YzQ2YTZhYmU0MjY1NTNmMWY0ZGQxLnNldENvbnRlbnQoaHRtbF9jNzZjNTUzMzJjYzE0ODUzOTkwN2VlOGU4NGUzMzgxOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMzNiZWI0MDhiMzg0YmEzYTA5NDNkNjAxNDlhZjc0Ny5iaW5kUG9wdXAocG9wdXBfM2MwY2RjYzkxNzRjNDZhNmFiZTQyNjU1M2YxZjRkZDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDBkOTdiYjgzMDZlNDVjMDkxYjcyODYyNTI2ZWU0ZGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTE0MzA0NSwtNDMuOTc5MzU1OTkwMTM3NjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmFlNmMxNzM1YmIyNDgwYmJhNmMxNThjOGRlZTQ2NWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGRkZjdhMmM5MDc4NDA2MmJjMmYyYzkwNTdkZmIxMjEgPSAkKCc8ZGl2IGlkPSJodG1sXzBkZGY3YTJjOTA3ODQwNjJiYzJmMmM5MDU3ZGZiMTIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QQURSRSBFVVNUQVFVSU86ICgtMTkuOTE0MzA0NSwgLTQzLjk3OTM1NTk5MDEzNzYyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmFlNmMxNzM1YmIyNDgwYmJhNmMxNThjOGRlZTQ2NWUuc2V0Q29udGVudChodG1sXzBkZGY3YTJjOTA3ODQwNjJiYzJmMmM5MDU3ZGZiMTIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAwZDk3YmI4MzA2ZTQ1YzA5MWI3Mjg2MjUyNmVlNGRhLmJpbmRQb3B1cChwb3B1cF9mYWU2YzE3MzViYjI0ODBiYmE2YzE1OGM4ZGVlNDY1ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjI3MzZmMzM0MTM0MDlhOWZmMmQxM2U5MWFlNGE1ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NzMxNjQxOTk5OTk5OTgsLTQzLjkzMzgwNzUyNDYyNDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzFiNDQzY2Y4MDEwNGI4Yjg1NWYwZTFhY2UyOWU1MjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjYwZGEzOGNiZDhiNDQ4ZmEyYzZmNDAwM2UzNmM4M2YgPSAkKCc8ZGl2IGlkPSJodG1sX2I2MGRhMzhjYmQ4YjQ0OGZhMmM2ZjQwMDNlMzZjODNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QQUxNQVJFUzogKC0xOS44NzMxNjQxOTk5OTk5OTgsIC00My45MzM4MDc1MjQ2MjQ1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzFiNDQzY2Y4MDEwNGI4Yjg1NWYwZTFhY2UyOWU1Mjkuc2V0Q29udGVudChodG1sX2I2MGRhMzhjYmQ4YjQ0OGZhMmM2ZjQwMDNlMzZjODNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViMjczNmYzMzQxMzQwOWE5ZmYyZDEzZTkxYWU0YTVmLmJpbmRQb3B1cChwb3B1cF9jMWI0NDNjZjgwMTA0YjhiODU1ZjBlMWFjZTI5ZTUyOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NzFiMTY4OTNkZDQ0YTUzODM2OGExMTIwNThjY2IyOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NzAyMjE1LC00My45OTMxMzY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI1NTk1OGVmN2FjYTQ1ZTI5NzljM2Q2NzMyZjczYjJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhhZTY5NzBlNDhlZTQ3MDY5ZGFhMjM5MDE5MGY2MDlmID0gJCgnPGRpdiBpZD0iaHRtbF84YWU2OTcwZTQ4ZWU0NzA2OWRhYTIzOTAxOTBmNjA5ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEFRVUVUQTogKC0xOS44NzAyMjE1LCAtNDMuOTkzMTM2NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI1NTk1OGVmN2FjYTQ1ZTI5NzljM2Q2NzMyZjczYjJhLnNldENvbnRlbnQoaHRtbF84YWU2OTcwZTQ4ZWU0NzA2OWRhYTIzOTAxOTBmNjA5Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NzFiMTY4OTNkZDQ0YTUzODM2OGExMTIwNThjY2IyOC5iaW5kUG9wdXAocG9wdXBfMjU1OTU4ZWY3YWNhNDVlMjk3OWMzZDY3MzJmNzNiMmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGM3ZTY0NmFlZGE1NGJmMTllYTRhZWZmZTVhMjJmOTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjIuNDkyNDA3MiwtNDcuODMwNjk1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZTNiYmM5ZDg0ZDk0N2NiOWFjMjUxMGM1MzU3NTk0ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZTY5MThmNTFhYjM0ZTIyOWIyYjA2MzcyNWY5NTQ3YyA9ICQoJzxkaXYgaWQ9Imh0bWxfZmU2OTE4ZjUxYWIzNGUyMjliMmIwNjM3MjVmOTU0N2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBFRFJPIElJOiAoLTIyLjQ5MjQwNzIsIC00Ny44MzA2OTU0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmUzYmJjOWQ4NGQ5NDdjYjlhYzI1MTBjNTM1NzU5NGYuc2V0Q29udGVudChodG1sX2ZlNjkxOGY1MWFiMzRlMjI5YjJiMDYzNzI1Zjk1NDdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RjN2U2NDZhZWRhNTRiZjE5ZWE0YWVmZmU1YTIyZjk0LmJpbmRQb3B1cChwb3B1cF9iZTNiYmM5ZDg0ZDk0N2NiOWFjMjUxMGM1MzU3NTk0Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NDEyZmYwMDg3N2Y0NjgwYjFhOWU3Mjk2OTBhNjY0YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MzMyNjM3NSwtNDMuOTUyNTg2MTg1MTYwNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzQ5YjI0YjJmNmU3NDljM2E1YWNmYzliYjU3MTc3OTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzE4NzEyYTJjYTc5NGMzZWJkNjhjMjE4NzZiMTQyNTUgPSAkKCc8ZGl2IGlkPSJodG1sXzcxODcxMmEyY2E3OTRjM2ViZDY4YzIxODc2YjE0MjU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QTEFOQUxUTzogKC0xOS44MzMyNjM3NSwgLTQzLjk1MjU4NjE4NTE2MDQzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzQ5YjI0YjJmNmU3NDljM2E1YWNmYzliYjU3MTc3OTEuc2V0Q29udGVudChodG1sXzcxODcxMmEyY2E3OTRjM2ViZDY4YzIxODc2YjE0MjU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc0MTJmZjAwODc3ZjQ2ODBiMWE5ZTcyOTY5MGE2NjRiLmJpbmRQb3B1cChwb3B1cF8zNDliMjRiMmY2ZTc0OWMzYTVhY2ZjOWJiNTcxNzc5MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZGQzNWJlZjFlYTA0MGZhOTEwZmIwZWNjMWZkMWE3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MTMxMzM2MDAwMDAwMDIsLTQzLjkwMjg1Njk5NTc5NjIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VlYjkzM2Y5ZGUzMDQxMzM5OGYxOGY0NTViZjlhZDg5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzljYzFhNmQwY2M0OTQ3ZmRhNGU5OWY5YTJiNGIwMjUxID0gJCgnPGRpdiBpZD0iaHRtbF85Y2MxYTZkMGNjNDk0N2ZkYTRlOTlmOWEyYjRiMDI1MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UE9NUEVJQTogKC0xOS45MTMxMzM2MDAwMDAwMDIsIC00My45MDI4NTY5OTU3OTYyMSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VlYjkzM2Y5ZGUzMDQxMzM5OGYxOGY0NTViZjlhZDg5LnNldENvbnRlbnQoaHRtbF85Y2MxYTZkMGNjNDk0N2ZkYTRlOTlmOWEyYjRiMDI1MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZGQzNWJlZjFlYTA0MGZhOTEwZmIwZWNjMWZkMWE3YS5iaW5kUG9wdXAocG9wdXBfZWViOTMzZjlkZTMwNDEzMzk4ZjE4ZjQ1NWJmOWFkODkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTE0ZTcwZDczMzg3NGI5YTljYjFkM2Y2MjlkYmRhNzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODkxMjk5NSwtNDMuOTQxNzEzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNjg3OWE3ZWMyZjE0Y2MwODBkZmM3OGU4N2FlMWRmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hY2JmODJmMzNlOWQ0MWJiOGMwMjBhNTg5OTM3ODg2MSA9ICQoJzxkaXYgaWQ9Imh0bWxfYWNiZjgyZjMzZTlkNDFiYjhjMDIwYTU4OTkzNzg4NjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJFTkFTQ0VOQ0E6ICgtMTkuODkxMjk5NSwgLTQzLjk0MTcxMzIpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNjg3OWE3ZWMyZjE0Y2MwODBkZmM3OGU4N2FlMWRmOC5zZXRDb250ZW50KGh0bWxfYWNiZjgyZjMzZTlkNDFiYjhjMDIwYTU4OTkzNzg4NjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTE0ZTcwZDczMzg3NGI5YTljYjFkM2Y2MjlkYmRhNzAuYmluZFBvcHVwKHBvcHVwXzA2ODc5YTdlYzJmMTRjYzA4MGRmYzc4ZTg3YWUxZGY4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmNjIwMmE1OWE2NjQ5OTRiZjE4YTI0MTM4YmZjOTJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkwMDMzMjEsLTQzLjkyMzcyMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDU5YzlmNTFlOTcxNDA3Mzk5YzJhYjkzNzY1NjE1OTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTE3ZjljYzJmMTU1NDRjZWFlNjM0YjAyYzg0M2RkN2YgPSAkKCc8ZGl2IGlkPSJodG1sXzExN2Y5Y2MyZjE1NTQ0Y2VhZTYzNGIwMmM4NDNkZDdmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQUdSQURBIEZBTUlMSUE6ICgtMTkuOTAwMzMyMSwgLTQzLjkyMzcyMjgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNTljOWY1MWU5NzE0MDczOTljMmFiOTM3NjU2MTU5Ni5zZXRDb250ZW50KGh0bWxfMTE3ZjljYzJmMTU1NDRjZWFlNjM0YjAyYzg0M2RkN2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGY2MjAyYTU5YTY2NDk5NGJmMThhMjQxMzhiZmM5MmUuYmluZFBvcHVwKHBvcHVwXzA1OWM5ZjUxZTk3MTQwNzM5OWMyYWI5Mzc2NTYxNTk2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5MGZiNGM4ZjZiNjQ4M2Q5OWQ1MzE0YjEzYWVkZTRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyMzc2ODY1LC00My45MjEyNDU4MjU0MzgyMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzNmN2UyY2Y5YmFmNDRjZjg5Nzc3OTExOTQ3ZDJhNWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODE3ZTI2ZmVmYjQ0NDY3MmI5ZTA5MGM4N2VhNjUxNjkgPSAkKCc8ZGl2IGlkPSJodG1sXzgxN2UyNmZlZmI0NDQ2NzJiOWUwOTBjODdlYTY1MTY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBFRklHRU5JQTogKC0xOS45MjM3Njg2NSwgLTQzLjkyMTI0NTgyNTQzODIzNCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMzZjdlMmNmOWJhZjQ0Y2Y4OTc3NzkxMTk0N2QyYTVlLnNldENvbnRlbnQoaHRtbF84MTdlMjZmZWZiNDQ0NjcyYjllMDkwYzg3ZWE2NTE2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mOTBmYjRjOGY2YjY0ODNkOTlkNTMxNGIxM2FlZGU0ZS5iaW5kUG9wdXAocG9wdXBfMzNmN2UyY2Y5YmFmNDRjZjg5Nzc3OTExOTQ3ZDJhNWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWYzNTU2MWRiNjY2NGFmZTg0ZTkzN2I2N2YzYWQ2MTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODkwMzMxMSwtNDMuOTA5NjgxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YzI2ODMwNzc4ZTA0MWNiYTVlODM5NTQxZTkxYzI3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMWY4YzM4MjcyOGQ0YTlmOGJhYWRiYWU4ZmFjMGEyNSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzFmOGMzODI3MjhkNGE5ZjhiYWFkYmFlOGZhYzBhMjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTlRBIElORVM6ICgtMTkuODkwMzMxMSwgLTQzLjkwOTY4MTIpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YzI2ODMwNzc4ZTA0MWNiYTVlODM5NTQxZTkxYzI3Ny5zZXRDb250ZW50KGh0bWxfMzFmOGMzODI3MjhkNGE5ZjhiYWFkYmFlOGZhYzBhMjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWYzNTU2MWRiNjY2NGFmZTg0ZTkzN2I2N2YzYWQ2MTIuYmluZFBvcHVwKHBvcHVwXzhjMjY4MzA3NzhlMDQxY2JhNWU4Mzk1NDFlOTFjMjc3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q5OTFiNTE1ODRkZjQ4Yjk5M2Q0MzY4NTcyOGFmM2Y3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5MTc5NDQsLTQzLjkyOTkxMzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTJhMjQ0N2YwMmE5NGNjODljNDI0NDAzNjBmYTk2ZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWYwNzZlMWU2NGI1NDgxMWE2MjE1YmMwNGJjOTAwN2MgPSAkKCc8ZGl2IGlkPSJodG1sX2VmMDc2ZTFlNjRiNTQ4MTFhNjIxNWJjMDRiYzkwMDdjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TSUxWRUlSQTogKC0xOS44OTE3OTQ0LCAtNDMuOTI5OTEzMik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UyYTI0NDdmMDJhOTRjYzg5YzQyNDQwMzYwZmE5NmRlLnNldENvbnRlbnQoaHRtbF9lZjA3NmUxZTY0YjU0ODExYTYyMTViYzA0YmM5MDA3Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kOTkxYjUxNTg0ZGY0OGI5OTNkNDM2ODU3MjhhZjNmNy5iaW5kUG9wdXAocG9wdXBfZTJhMjQ0N2YwMmE5NGNjODljNDI0NDAzNjBmYTk2ZGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGU4ZDFhM2RlZTEyNGVjZDgzY2EwYWI1MDJkZmVhMzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODczMzY3MiwtNDMuOTY3NjE1MTI5MDU3MjM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkOTVkZjRkOWFmNDRlMDU5OTk0MWFhMWU3MWI5NTVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZjZGM0MjA0NWFhNTRjYTJhNzI5MTY1MGQ0ZjhhOTE0ID0gJCgnPGRpdiBpZD0iaHRtbF9mY2RjNDIwNDVhYTU0Y2EyYTcyOTE2NTBkNGY4YTkxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VUZNRzogKC0xOS44NzMzNjcyLCAtNDMuOTY3NjE1MTI5MDU3MjM2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2Q5NWRmNGQ5YWY0NGUwNTk5OTQxYWExZTcxYjk1NWMuc2V0Q29udGVudChodG1sX2ZjZGM0MjA0NWFhNTRjYTJhNzI5MTY1MGQ0ZjhhOTE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RlOGQxYTNkZWUxMjRlY2Q4M2NhMGFiNTAyZGZlYTMwLmJpbmRQb3B1cChwb3B1cF8zZDk1ZGY0ZDlhZjQ0ZTA1OTk5NDFhYTFlNzFiOTU1Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kM2NlM2QzMWE5NDA0MWEwYTQxMDg1NDI2NzgyZWUzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC4wMDcyNzcyNSwtNDQuMDA2OTUwNTM2ODA4MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGQ3N2RjZjJjNDk2NGU2YTg3NDlkMjUwN2YxMGMzNmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2FmYTQ4OGNlNzA1NDJlOTk4MWI4YzMxOGRlZGIxYjggPSAkKCc8ZGl2IGlkPSJodG1sXzdhZmE0ODhjZTcwNTQyZTk5ODFiOGMzMThkZWRiMWI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQVJSRUlSTzogKC0yMC4wMDcyNzcyNSwgLTQ0LjAwNjk1MDUzNjgwODE1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGQ3N2RjZjJjNDk2NGU2YTg3NDlkMjUwN2YxMGMzNmMuc2V0Q29udGVudChodG1sXzdhZmE0ODhjZTcwNTQyZTk5ODFiOGMzMThkZWRiMWI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QzY2UzZDMxYTk0MDQxYTBhNDEwODU0MjY3ODJlZTNlLmJpbmRQb3B1cChwb3B1cF84ZDc3ZGNmMmM0OTY0ZTZhODc0OWQyNTA3ZjEwYzM2Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lOGE5M2I0Zjk4Y2M0NGQyYTExYTAxMzc2MDRhNzdhNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NTg2MTA5LC00My45OTIyMjUxMjM2NzAwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NTFhOTdiM2RkNjk0ZmNjYmExZGZkZDg2ZmJhYThlYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNGFhZDEyZWM1YWM0MWNiOTJjZTIwYTgxNDQxODEzZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMTRhYWQxMmVjNWFjNDFjYjkyY2UyMGE4MTQ0MTgxM2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJFVEFOSUE6ICgtMTkuOTU4NjEwOSwgLTQzLjk5MjIyNTEyMzY3MDAzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzUxYTk3YjNkZDY5NGZjY2JhMWRmZGQ4NmZiYWE4ZWIuc2V0Q29udGVudChodG1sXzE0YWFkMTJlYzVhYzQxY2I5MmNlMjBhODE0NDE4MTNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U4YTkzYjRmOThjYzQ0ZDJhMTFhMDEzNzYwNGE3N2E0LmJpbmRQb3B1cChwb3B1cF83NTFhOTdiM2RkNjk0ZmNjYmExZGZkZDg2ZmJhYThlYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZTkzZGUxNDgzNDM0ZWVkYWY5NjhmNThlOWFlN2ZjMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44OTk1Mjg2OTk5OTk5OTgsLTQzLjkzNzM5NzI5MzAzMDczNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NzQ2OTM4ZTdjNzI0YTc0YTE0NTVlOThhNWNmMjlmMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NWIwYTU3ODE1ODE0ZDQ1YjZlZWRhN2RkODM2MTE3ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTViMGE1NzgxNTgxNGQ0NWI2ZWVkYTdkZDgzNjExN2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNPTkNPUkRJQTogKC0xOS44OTk1Mjg2OTk5OTk5OTgsIC00My45MzczOTcyOTMwMzA3MzUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NzQ2OTM4ZTdjNzI0YTc0YTE0NTVlOThhNWNmMjlmMC5zZXRDb250ZW50KGh0bWxfNTViMGE1NzgxNTgxNGQ0NWI2ZWVkYTdkZDgzNjExN2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGU5M2RlMTQ4MzQzNGVlZGFmOTY4ZjU4ZTlhZTdmYzAuYmluZFBvcHVwKHBvcHVwXzc3NDY5MzhlN2M3MjRhNzRhMTQ1NWU5OGE1Y2YyOWYwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgyODBhYWM2ODRlZjQyMjA5ZjAxYjZmODZlYzUxNzVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5NzkzMDcsLTQzLjkxMzA5MTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGJmZDczNzM3MGJjNGQyZGEzMDcyODc2NWY0YzZiZTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDQ0NjQ2Mzc3YjI1NDdmMzk0MWUwZmIwNzVhMzhiNDYgPSAkKCc8ZGl2IGlkPSJodG1sX2Q0NDY0NjM3N2IyNTQ3ZjM5NDFlMGZiMDc1YTM4YjQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JTlNUSVRVVE8gQUdST05PTUlDTzogKC0xOS44OTc5MzA3LCAtNDMuOTEzMDkxMik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiZmQ3MzczNzBiYzRkMmRhMzA3Mjg3NjVmNGM2YmUzLnNldENvbnRlbnQoaHRtbF9kNDQ2NDYzNzdiMjU0N2YzOTQxZTBmYjA3NWEzOGI0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MjgwYWFjNjg0ZWY0MjIwOWYwMWI2Zjg2ZWM1MTc1ZC5iaW5kUG9wdXAocG9wdXBfNGJmZDczNzM3MGJjNGQyZGEzMDcyODc2NWY0YzZiZTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTA3MDM3NDkxZTNhNDMyMGIxZTcxOGY5ODhhZDgzYjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTEzMTMzNjAwMDAwMDAyLC00My45MDI4NTY5OTU3OTYyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMDA5NjRmOWUyZjg0OTQzYWUxZTI5NjM1OTVjZWMwZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMGRkNTc1NDk5Njc0MWNlYjMzZWFiNzQ0YmFjZjczNyA9ICQoJzxkaXYgaWQ9Imh0bWxfMzBkZDU3NTQ5OTY3NDFjZWIzM2VhYjc0NGJhY2Y3MzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBPTVBFSUE6ICgtMTkuOTEzMTMzNjAwMDAwMDAyLCAtNDMuOTAyODU2OTk1Nzk2MjEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMDA5NjRmOWUyZjg0OTQzYWUxZTI5NjM1OTVjZWMwZS5zZXRDb250ZW50KGh0bWxfMzBkZDU3NTQ5OTY3NDFjZWIzM2VhYjc0NGJhY2Y3MzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTA3MDM3NDkxZTNhNDMyMGIxZTcxOGY5ODhhZDgzYjkuYmluZFBvcHVwKHBvcHVwX2IwMDk2NGY5ZTJmODQ5NDNhZTFlMjk2MzU5NWNlYzBlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI5ZDEyZThkM2U0YzRiOTU5YTExYTM5NWZkODhiMWMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzNDMzODYsLTQ0LjAxMjg1NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2MxNTFhNjFhOGI4NDFhNmIxN2ZiNDIzYzFhOTI4MTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDk3ZjVhNzIyOWI2NGExM2IxMzIxYTQxYzljMGY5OGQgPSAkKCc8ZGl2IGlkPSJodG1sXzQ5N2Y1YTcyMjliNjRhMTNiMTMyMWE0MWM5YzBmOThkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBNQVJJQTogKC0xOS45MzQzMzg2LCAtNDQuMDEyODU3Mik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNjMTUxYTYxYThiODQxYTZiMTdmYjQyM2MxYTkyODE5LnNldENvbnRlbnQoaHRtbF80OTdmNWE3MjI5YjY0YTEzYjEzMjFhNDFjOWMwZjk4ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yOWQxMmU4ZDNlNGM0Yjk1OWExMWEzOTVmZDg4YjFjMS5iaW5kUG9wdXAocG9wdXBfM2MxNTFhNjFhOGI4NDFhNmIxN2ZiNDIzYzFhOTI4MTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGYxZDdmYjhjODI1NDk2ZTg2MmY0NGI0ODg5YmI1MDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODc2MzA4OTUsLTQzLjk1NjU3NTIxOTM2NDEyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NzJhZWE0ZTY5MGM0YjAzOTg4NDkzM2Q3NDQ5ODg1MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzUwZDIyNTAxYTQ0ZWM1OTBlYzM0M2ZmNDE5YzBmZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYzM1MGQyMjUwMWE0NGVjNTkwZWMzNDNmZjQxOWMwZmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlPDg08gRlJBTkNJU0NPOiAoLTE5Ljg3NjMwODk1LCAtNDMuOTU2NTc1MjE5MzY0MTI2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTcyYWVhNGU2OTBjNGIwMzk4ODQ5MzNkNzQ0OTg4NTIuc2V0Q29udGVudChodG1sX2MzNTBkMjI1MDFhNDRlYzU5MGVjMzQzZmY0MTljMGZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRmMWQ3ZmI4YzgyNTQ5NmU4NjJmNDRiNDg4OWJiNTAxLmJpbmRQb3B1cChwb3B1cF81NzJhZWE0ZTY5MGM0YjAzOTg4NDkzM2Q3NDQ5ODg1Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMThkYzRjNDc4NTI0ZTIzOTMwNDM4N2E0Y2U5OWQyOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MDg0NzY0LC00My45NzY3NjcyNjc3NjY5NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmZhMzc4NDc2NmFhNDIzODhjYWY3MDFkY2ZhZTBkZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODY1ZjExYTMyZTZkNDc4MThlMmZlNzg4ZmRiMmQ2YmQgPSAkKCc8ZGl2IGlkPSJodG1sXzg2NWYxMWEzMmU2ZDQ3ODE4ZTJmZTc4OGZkYjJkNmJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WRU5EQSBOT1ZBOiAoLTE5LjgwODQ3NjQsIC00My45NzY3NjcyNjc3NjY5NDUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZmEzNzg0NzY2YWE0MjM4OGNhZjcwMWRjZmFlMGRlYS5zZXRDb250ZW50KGh0bWxfODY1ZjExYTMyZTZkNDc4MThlMmZlNzg4ZmRiMmQ2YmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzE4ZGM0YzQ3ODUyNGUyMzkzMDQzODdhNGNlOTlkMjkuYmluZFBvcHVwKHBvcHVwX2JmYTM3ODQ3NjZhYTQyMzg4Y2FmNzAxZGNmYWUwZGVhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJlMjI1M2NjOWQ4YTRmYTE4OTA3NWU1ZjI4YWJhMmNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjgyMjQ1OTI1LC00My45NDg3NzgwNTkwMjQwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMWVlOTYyODBkN2E0NzgzOTQwM2QwMDhjNjFkMjkzNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMzc3ZmMzMDcwNGM0Y2FjOTM2MmE3ODUwMjUzYzU2NiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTM3N2ZjMzA3MDRjNGNhYzkzNjJhNzg1MDI1M2M1NjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZJTEEgQ0xPUklTOiAoLTE5LjgyMjQ1OTI1LCAtNDMuOTQ4Nzc4MDU5MDI0MDUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMWVlOTYyODBkN2E0NzgzOTQwM2QwMDhjNjFkMjkzNC5zZXRDb250ZW50KGh0bWxfMTM3N2ZjMzA3MDRjNGNhYzkzNjJhNzg1MDI1M2M1NjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmUyMjUzY2M5ZDhhNGZhMTg5MDc1ZTVmMjhhYmEyY2EuYmluZFBvcHVwKHBvcHVwX2UxZWU5NjI4MGQ3YTQ3ODM5NDAzZDAwOGM2MWQyOTM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg2MDY1ZjQ4M2U3MjQ4NGQ5NzIwYTM2NWM3MWIzNzQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg1MTkwNDgsLTQzLjk0NzczODc2ODk4MDUzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81OWY5YjUzZGI3YTY0NmVkODNmZDNjY2MyZmI2M2E4YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYmQ0NWY3ZDRlZTY0ODMyYTc5MGIxOWVmOGRiN2ViOCA9ICQoJzxkaXYgaWQ9Imh0bWxfYWJkNDVmN2Q0ZWU2NDgzMmE3OTBiMTllZjhkYjdlYjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFFUk9QT1JUTzogKC0xOS44NTE5MDQ4LCAtNDMuOTQ3NzM4NzY4OTgwNTM1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTlmOWI1M2RiN2E2NDZlZDgzZmQzY2NjMmZiNjNhOGIuc2V0Q29udGVudChodG1sX2FiZDQ1ZjdkNGVlNjQ4MzJhNzkwYjE5ZWY4ZGI3ZWI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg2MDY1ZjQ4M2U3MjQ4NGQ5NzIwYTM2NWM3MWIzNzQzLmJpbmRQb3B1cChwb3B1cF81OWY5YjUzZGI3YTY0NmVkODNmZDNjY2MyZmI2M2E4Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNjJjZWYyYTcyZjQ0MzljYjliMWVmNDU1ZTg0ODRiYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzMxNzQsLTQzLjk2OTA3NzE0NzMyNTM4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZmU2NTBkYjVmNGM0MmU1OWRlMTI2ZjFlZmUyNmQ0MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNDc0MGYzNTFhZjc0NzkzYWRjZDg4NDVmYTk3YzE2MyA9ICQoJzxkaXYgaWQ9Imh0bWxfZTQ3NDBmMzUxYWY3NDc5M2FkY2Q4ODQ1ZmE5N2MxNjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFMVE8gQkFSUk9DQTogKC0xOS45MzMxNzQsIC00My45NjkwNzcxNDczMjUzODYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZmU2NTBkYjVmNGM0MmU1OWRlMTI2ZjFlZmUyNmQ0MC5zZXRDb250ZW50KGh0bWxfZTQ3NDBmMzUxYWY3NDc5M2FkY2Q4ODQ1ZmE5N2MxNjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzYyY2VmMmE3MmY0NDM5Y2I5YjFlZjQ1NWU4NDg0YmEuYmluZFBvcHVwKHBvcHVwXzlmZTY1MGRiNWY0YzQyZTU5ZGUxMjZmMWVmZTI2ZDQwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgwOTlmYzkyZTkwNDRlZTQ5YWM3MzM3Mzg0YjNhYTAxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg5NzY4NzQ1LC00My45NzUzMzMwNDYzMzMwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MWIzMGZkZTZjMTI0Zjg4OTE2MjJmZDExNzk1YTRmMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYzJmNmQ5MTI0OGE0Y2U3YjQ2ZGE5N2RlMTYwY2MzZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZWMyZjZkOTEyNDhhNGNlN2I0NmRhOTdkZTE2MGNjM2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFMVE8gRE9TIENBSUNBUkFTOiAoLTE5Ljg5NzY4NzQ1LCAtNDMuOTc1MzMzMDQ2MzMzMDYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MWIzMGZkZTZjMTI0Zjg4OTE2MjJmZDExNzk1YTRmMy5zZXRDb250ZW50KGh0bWxfZWMyZjZkOTEyNDhhNGNlN2I0NmRhOTdkZTE2MGNjM2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODA5OWZjOTJlOTA0NGVlNDlhYzczMzczODRiM2FhMDEuYmluZFBvcHVwKHBvcHVwXzQxYjMwZmRlNmMxMjRmODg5MTYyMmZkMTE3OTVhNGYzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY4MTlkMDE3YmQyYjQ1YmZhNjdmM2JiNjc3ZTJmMzg1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyMzM4MTYsLTQzLjk1MjAxMDgyMjczMjQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI5OGIxYWE5OGVjOTRmZDM5NmQ4MDdhYjIzODA2ZWRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg2MGNjYTU4Njg0MzQzNjRhZjZjYjA5YzIwODA2MzQ2ID0gJCgnPGRpdiBpZD0iaHRtbF84NjBjY2E1ODY4NDM0MzY0YWY2Y2IwOWMyMDgwNjM0NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFSUk8gUFJFVE86ICgtMTkuOTIzMzgxNiwgLTQzLjk1MjAxMDgyMjczMjQyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjk4YjFhYTk4ZWM5NGZkMzk2ZDgwN2FiMjM4MDZlZGMuc2V0Q29udGVudChodG1sXzg2MGNjYTU4Njg0MzQzNjRhZjZjYjA5YzIwODA2MzQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY4MTlkMDE3YmQyYjQ1YmZhNjdmM2JiNjc3ZTJmMzg1LmJpbmRQb3B1cChwb3B1cF8yOThiMWFhOThlYzk0ZmQzOTZkODA3YWIyMzgwNmVkYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83Yzc0YzI2NjU1MTQ0MjhjYTkzYTk0NjE4YjA1MzUzMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzM3NDMzNSwtNDMuOTYzOTk2NDQyNzQ0NTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjJhZTBlMzY3ZDk3NGM0OGExYWU1ZWJmOGRkMjU2ZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTk4MTU2ODY4OWY0NGVhMDlhZDJhYWI0N2IwZWMxNzYgPSAkKCc8ZGl2IGlkPSJodG1sXzk5ODE1Njg2ODlmNDRlYTA5YWQyYWFiNDdiMGVjMTc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CQVJST0NBOiAoLTE5LjkzMzc0MzM1LCAtNDMuOTYzOTk2NDQyNzQ0NTYpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMmFlMGUzNjdkOTc0YzQ4YTFhZTVlYmY4ZGQyNTZlYS5zZXRDb250ZW50KGh0bWxfOTk4MTU2ODY4OWY0NGVhMDlhZDJhYWI0N2IwZWMxNzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2M3NGMyNjY1NTE0NDI4Y2E5M2E5NDYxOGIwNTM1MzAuYmluZFBvcHVwKHBvcHVwX2YyYWUwZTM2N2Q5NzRjNDhhMWFlNWViZjhkZDI1NmVhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBkMjcwNWVhZTZlNDRjMWJiMGJjMmZiYzZmZWJjMmVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk3NjAwODg1LC00My45Njg5Nzk0Mzc2NTE4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZjM3ZTAzODU5OTY0YjNjOTI4ZjNkMDhlMmNkZDFmZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zOTM5NGRhYmNkN2M0MzNkYWFkMWQ3YzRmYzgzMjZjYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzkzOTRkYWJjZDdjNDMzZGFhZDFkN2M0ZmM4MzI2Y2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJVUklUSVM6ICgtMTkuOTc2MDA4ODUsIC00My45Njg5Nzk0Mzc2NTE4Nyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNmMzdlMDM4NTk5NjRiM2M5MjhmM2QwOGUyY2RkMWZmLnNldENvbnRlbnQoaHRtbF8zOTM5NGRhYmNkN2M0MzNkYWFkMWQ3YzRmYzgzMjZjYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZDI3MDVlYWU2ZTQ0YzFiYjBiYzJmYmM2ZmViYzJlYy5iaW5kUG9wdXAocG9wdXBfM2YzN2UwMzg1OTk2NGIzYzkyOGYzZDA4ZTJjZGQxZmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2UyZjJmMTZjN2RiNGIyZWE1OTU3NGEwMWRkNzhmZDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODc5MzAxNywtNDMuOTk5NTk4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZGZhMGRjMjRhMDM0NWFjODczNGNkYjVmMWIzOTQ5NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZjJmMDM1Nzc5NWM0NDgwYTE3OThjOGM2NzM4N2UyOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMmYyZjAzNTc3OTVjNDQ4MGExNzk4YzhjNjczODdlMjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBU1RFTE86ICgtMTkuODc5MzAxNywgLTQzLjk5OTU5ODgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZGZhMGRjMjRhMDM0NWFjODczNGNkYjVmMWIzOTQ5Ny5zZXRDb250ZW50KGh0bWxfMmYyZjAzNTc3OTVjNDQ4MGExNzk4YzhjNjczODdlMjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2UyZjJmMTZjN2RiNGIyZWE1OTU3NGEwMWRkNzhmZDEuYmluZFBvcHVwKHBvcHVwXzJkZmEwZGMyNGEwMzQ1YWM4NzM0Y2RiNWYxYjM5NDk3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRjZGM3YTQzMDU2NTQ4ZDk4NzQ3YmRhYTE0OGZiZDMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkxOTMzMDgsLTQzLjk0MDM0ODgzNzM5ODgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UxOGY3NTY2NmRkNjQ0N2Y4NDgzZDhhMzc0NzZiOGQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVlOGYxZjcyMmZmMDQxODQ4NWY3ZGFlYmJlNTA4MjA4ID0gJCgnPGRpdiBpZD0iaHRtbF81ZThmMWY3MjJmZjA0MTg0ODVmN2RhZWJiZTUwODIwOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0VOVFJPOiAoLTE5LjkxOTMzMDgsIC00My45NDAzNDg4MzczOTg4Myk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UxOGY3NTY2NmRkNjQ0N2Y4NDgzZDhhMzc0NzZiOGQ2LnNldENvbnRlbnQoaHRtbF81ZThmMWY3MjJmZjA0MTg0ODVmN2RhZWJiZTUwODIwOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80Y2RjN2E0MzA1NjU0OGQ5ODc0N2JkYWExNDhmYmQzMi5iaW5kUG9wdXAocG9wdXBfZTE4Zjc1NjY2ZGQ2NDQ3Zjg0ODNkOGEzNzQ3NmI4ZDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjE1ODk1YTM5YmVjNDc4NGEwOTYwNWQyMDVhNTcyYTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODg5MjM5LC00My45MjQ4NTc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgxN2Q2NDUyMWQwZjRiN2Q4MjEwMDRhM2YxZGEzZjcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ3MTk1ZDIwNWQwNTQzNzk5YWExZjI1MGZhNDVlMWUxID0gJCgnPGRpdiBpZD0iaHRtbF80NzE5NWQyMDVkMDU0Mzc5OWFhMWYyNTBmYTQ1ZTFlMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0lEQURFIE5PVkE6ICgtMTkuODg5MjM5LCAtNDMuOTI0ODU3NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxN2Q2NDUyMWQwZjRiN2Q4MjEwMDRhM2YxZGEzZjcyLnNldENvbnRlbnQoaHRtbF80NzE5NWQyMDVkMDU0Mzc5OWFhMWYyNTBmYTQ1ZTFlMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMTU4OTVhMzliZWM0Nzg0YTA5NjA1ZDIwNWE1NzJhNi5iaW5kUG9wdXAocG9wdXBfODE3ZDY0NTIxZDBmNGI3ZDgyMTAwNGEzZjFkYTNmNzIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTA5NjNhNTIzMTY4NGY5MzgzMDE1OGRiYzEyNWVmMmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTA5NDM5LC00My45MzcxMzc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJmNGU3YTFhMjFkMTQxNzM5NzJkNmUwYmEyN2ZiOWRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IwZDI2NzNlNGFkMjQ0ODZhZTczZDdhNTBjMWQzN2UwID0gJCgnPGRpdiBpZD0iaHRtbF9iMGQyNjczZTRhZDI0NDg2YWU3M2Q3YTUwYzFkMzdlMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q09MRUdJTyBCQVRJU1RBOiAoLTE5LjkwOTQzOSwgLTQzLjkzNzEzNzcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZjRlN2ExYTIxZDE0MTczOTcyZDZlMGJhMjdmYjlkZC5zZXRDb250ZW50KGh0bWxfYjBkMjY3M2U0YWQyNDQ4NmFlNzNkN2E1MGMxZDM3ZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTA5NjNhNTIzMTY4NGY5MzgzMDE1OGRiYzEyNWVmMmIuYmluZFBvcHVwKHBvcHVwXzJmNGU3YTFhMjFkMTQxNzM5NzJkNmUwYmEyN2ZiOWRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFiNTVhNmE5NjQ3MTRkNTRiYTk5ODI2OGE2ZWM2YTc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyNDEyMTYsLTQzLjk4OTUwMjAzMjQ5Nzg5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZjU0NTQ5YmI1ZDk0MzllYWQ4YjQ4ZTZhM2ZlNGE3MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MzQ4MzU5NTFjMzU0ODY0OGVjZjc5NTdmMDM2M2VmZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDM0ODM1OTUxYzM1NDg2NDhlY2Y3OTU3ZjAzNjNlZmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNPUkFDQU8gRVVDQVJJU1RJQ086ICgtMTkuOTI0MTIxNiwgLTQzLjk4OTUwMjAzMjQ5Nzg5Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFmNTQ1NDliYjVkOTQzOWVhZDhiNDhlNmEzZmU0YTczLnNldENvbnRlbnQoaHRtbF80MzQ4MzU5NTFjMzU0ODY0OGVjZjc5NTdmMDM2M2VmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYjU1YTZhOTY0NzE0ZDU0YmE5OTgyNjhhNmVjNmE3OC5iaW5kUG9wdXAocG9wdXBfMWY1NDU0OWJiNWQ5NDM5ZWFkOGI0OGU2YTNmZTRhNzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDMzZGZkYzM3OTQ4NGJkNjhhMTM0NTEwZTM5OWZmODggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODU4NTcxODQ5OTk5OTk3LC00My45NDA0NTkzMjc2ODQzOTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWVkMmQ5NDNhMzVkNDhlZDg1MDMzYzRjZmY2ZmRkM2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDdjNGU3NWU2ZDU1NDYwMGE2MzNlZTAwNDhmODFiZjQgPSAkKCc8ZGl2IGlkPSJodG1sXzQ3YzRlNzVlNmQ1NTQ2MDBhNjMzZWUwMDQ4ZjgxYmY0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ET05BIENMQVJBOiAoLTE5Ljg1ODU3MTg0OTk5OTk5NywgLTQzLjk0MDQ1OTMyNzY4NDM5NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFlZDJkOTQzYTM1ZDQ4ZWQ4NTAzM2M0Y2ZmNmZkZDNmLnNldENvbnRlbnQoaHRtbF80N2M0ZTc1ZTZkNTU0NjAwYTYzM2VlMDA0OGY4MWJmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMzNkZmRjMzc5NDg0YmQ2OGExMzQ1MTBlMzk5ZmY4OC5iaW5kUG9wdXAocG9wdXBfMWVkMmQ5NDNhMzVkNDhlZDg1MDMzYzRjZmY2ZmRkM2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGNkNGU0NzlmYjgzNGE0NWIzYzQzNTZhMjY4Mjg1NWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTYzMTI1NywtNDMuOTYxMTA5NTQ1MzA0MjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTU1ZTFjMmQxNDNkNGJlMjk3NzFlM2ZkMTNjZTc1YWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTQzMTkyOTExZDJkNDEyOWFhNWVjYWQwZmIwOGU3ZGIgPSAkKCc8ZGl2IGlkPSJodG1sX2E0MzE5MjkxMWQyZDQxMjlhYTVlY2FkMGZiMDhlN2RiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FU1RPUklMOiAoLTE5Ljk2MzEyNTcsIC00My45NjExMDk1NDUzMDQyOCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE1NWUxYzJkMTQzZDRiZTI5NzcxZTNmZDEzY2U3NWFkLnNldENvbnRlbnQoaHRtbF9hNDMxOTI5MTFkMmQ0MTI5YWE1ZWNhZDBmYjA4ZTdkYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80Y2Q0ZTQ3OWZiODM0YTQ1YjNjNDM1NmEyNjgyODU1YS5iaW5kUG9wdXAocG9wdXBfMTU1ZTFjMmQxNDNkNGJlMjk3NzFlM2ZkMTNjZTc1YWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzg5YTgwYTJmY2UxNDUxYjkxNGE0ZTlhMzc5OTYyYmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTEyNzQ2NCwtNDMuOTMwMjAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MzQyZDg1NzdjZTE0ZjljYjgwMmRkYzM1NTI0NjU1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYzVlYzQxNmFmMmI0ZTA1OGE3YzcwMDY3MjJlZGNkMCA9ICQoJzxkaXYgaWQ9Imh0bWxfMWM1ZWM0MTZhZjJiNGUwNThhN2M3MDA2NzIyZWRjZDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZMT1JFU1RBOiAoLTE5LjkxMjc0NjQsIC00My45MzAyMDA2KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjM0MmQ4NTc3Y2UxNGY5Y2I4MDJkZGMzNTUyNDY1NWEuc2V0Q29udGVudChodG1sXzFjNWVjNDE2YWYyYjRlMDU4YTdjNzAwNjcyMmVkY2QwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM4OWE4MGEyZmNlMTQ1MWI5MTRhNGU5YTM3OTk2MmJlLmJpbmRQb3B1cChwb3B1cF82MzQyZDg1NzdjZTE0ZjljYjgwMmRkYzM1NTI0NjU1YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZTc1NzhmMGJlYTM0Mjc4YWI0NGY4NGJjYzY5YjdlOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45Mzg4Nzk2NDk5OTk5OTcsLTQzLjk2NTY3MzkyODA4Mjc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UxNDk1NGUyYWM5NDRlZTU5NGY1ZDU5MWY2NTQyNGRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JlMjgwOTE5YzIxZjQ4MjVhZjllOWEzNjM0YWIzMzk2ID0gJCgnPGRpdiBpZD0iaHRtbF9iZTI4MDkxOWMyMWY0ODI1YWY5ZTlhMzYzNGFiMzM5NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R1JBSkFVOiAoLTE5LjkzODg3OTY0OTk5OTk5NywgLTQzLjk2NTY3MzkyODA4Mjc0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTE0OTU0ZTJhYzk0NGVlNTk0ZjVkNTkxZjY1NDI0ZGEuc2V0Q29udGVudChodG1sX2JlMjgwOTE5YzIxZjQ4MjVhZjllOWEzNjM0YWIzMzk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBlNzU3OGYwYmVhMzQyNzhhYjQ0Zjg0YmNjNjliN2U4LmJpbmRQb3B1cChwb3B1cF9lMTQ5NTRlMmFjOTQ0ZWU1OTRmNWQ1OTFmNjU0MjRkYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjA4YzdhN2NkZTQ0ODBkYjkxOTMwYWVhNWJhZDFkNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44MzY0MTMwNDk5OTk5OTcsLTQzLjk1OTg3ODcyODYzMDgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdjNjU3YjVmYTcyYjRjMDc5MWQzYTI1ZTYwNTIxNjk4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhMjJlNGM2YmY4NzQwMzA5NTMyMjNmYmIzN2ViNTQyID0gJCgnPGRpdiBpZD0iaHRtbF9kYTIyZTRjNmJmODc0MDMwOTUzMjIzZmJiMzdlYjU0MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SVRBUE9BOiAoLTE5LjgzNjQxMzA0OTk5OTk5NywgLTQzLjk1OTg3ODcyODYzMDgxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2M2NTdiNWZhNzJiNGMwNzkxZDNhMjVlNjA1MjE2OTguc2V0Q29udGVudChodG1sX2RhMjJlNGM2YmY4NzQwMzA5NTMyMjNmYmIzN2ViNTQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViMDhjN2E3Y2RlNDQ4MGRiOTE5MzBhZWE1YmFkMWQ1LmJpbmRQb3B1cChwb3B1cF83YzY1N2I1ZmE3MmI0YzA3OTFkM2EyNWU2MDUyMTY5OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZWM0NjIwZDYzNWQ0YWU5ODY3ZDczZjU3NTNjMTlkZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTY1NzgyNSwtNDMuOTQ5OTQzMzQ5MjYzNzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDRiOGJmZjkzZDQ3NDI2OWFkMTQyNGExZTZlYzc3ZTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmM2NGFhMDUxOTliNDI3NmFiOTgxZDRlNzNjMGJhNjcgPSAkKCc8ZGl2IGlkPSJodG1sXzZjNjRhYTA1MTk5YjQyNzZhYjk4MWQ0ZTczYzBiYTY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KQVJBR1VBOiAoLTE5Ljg1NjU3ODI1LCAtNDMuOTQ5OTQzMzQ5MjYzNzIpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNGI4YmZmOTNkNDc0MjY5YWQxNDI0YTFlNmVjNzdlNi5zZXRDb250ZW50KGh0bWxfNmM2NGFhMDUxOTliNDI3NmFiOTgxZDRlNzNjMGJhNjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWVjNDYyMGQ2MzVkNGFlOTg2N2Q3M2Y1NzUzYzE5ZGQuYmluZFBvcHVwKHBvcHVwX2Q0YjhiZmY5M2Q0NzQyNjlhZDE0MjRhMWU2ZWM3N2U2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlmZGI1ODIxMjdjZDRkOTFhMjE4MTQyNDk1NjU0ZTI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljg0MzkwMzQwMDAwMDAwMiwtNDMuOTYzMjUxMzA1NDA3MjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTE1MjZlOGRiNjc1NDgwMjg0ZDg4NDA1OTJjYTIzYzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2ViN2U1ODI4NWUxNGZmODgwMWQxZjBiMzg1NzAzNTcgPSAkKCc8ZGl2IGlkPSJodG1sX2NlYjdlNTgyODVlMTRmZjg4MDFkMWYwYjM4NTcwMzU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KQVJESU0gQVRMQU5USUNPOiAoLTE5Ljg0MzkwMzQwMDAwMDAwMiwgLTQzLjk2MzI1MTMwNTQwNzIxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTE1MjZlOGRiNjc1NDgwMjg0ZDg4NDA1OTJjYTIzYzYuc2V0Q29udGVudChodG1sX2NlYjdlNTgyODVlMTRmZjg4MDFkMWYwYjM4NTcwMzU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlmZGI1ODIxMjdjZDRkOTFhMjE4MTQyNDk1NjU0ZTI0LmJpbmRQb3B1cChwb3B1cF9lMTUyNmU4ZGI2NzU0ODAyODRkODg0MDU5MmNhMjNjNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YWM0ZTFlNDBmODg0OWNkYmJmMmVkYzM5MDM1ODQyNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NjE4MzU4LC00My45NTQ3NTY5MTUwNTA1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OGEyNmFhMWYzNjg0YTJmOTQyNDdiYjJjNTY2MDg5NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MjQ2NmRhYTE1YjU0Y2M4YWI3Njk2ZWM0N2U1MTE4OCA9ICQoJzxkaXYgaWQ9Imh0bWxfOTI0NjZkYWExNWI1NGNjOGFiNzY5NmVjNDdlNTExODgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxJQkVSREFERTogKC0xOS44NjE4MzU4LCAtNDMuOTU0NzU2OTE1MDUwNTcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82OGEyNmFhMWYzNjg0YTJmOTQyNDdiYjJjNTY2MDg5Ni5zZXRDb250ZW50KGh0bWxfOTI0NjZkYWExNWI1NGNjOGFiNzY5NmVjNDdlNTExODgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmFjNGUxZTQwZjg4NDljZGJiZjJlZGMzOTAzNTg0MjQuYmluZFBvcHVwKHBvcHVwXzY4YTI2YWExZjM2ODRhMmY5NDI0N2JiMmM1NjYwODk2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I3MGUxNGJmZWRiYTQ1NzQ4NDNhZDdkZDY5Nzk0OGMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyOTgzMDc5OTk5OTk5OCwtNDMuOTEzNjg5OTQ1NzM0MTM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JmZmQ1MWM1OWE1ODRmNDQ4YzY1NDFlYzQ5OWFlM2FlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdmMWRhNDRiNmZhYTRiMjU4NjkyZTUwMTc0YjA3ZjM1ID0gJCgnPGRpdiBpZD0iaHRtbF83ZjFkYTQ0YjZmYWE0YjI1ODY5MmU1MDE3NGIwN2YzNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9WTyBTQU8gTFVDQVM6ICgtMTkuOTI5ODMwNzk5OTk5OTk4LCAtNDMuOTEzNjg5OTQ1NzM0MTM0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmZmZDUxYzU5YTU4NGY0NDhjNjU0MWVjNDk5YWUzYWUuc2V0Q29udGVudChodG1sXzdmMWRhNDRiNmZhYTRiMjU4NjkyZTUwMTc0YjA3ZjM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I3MGUxNGJmZWRiYTQ1NzQ4NDNhZDdkZDY5Nzk0OGMzLmJpbmRQb3B1cChwb3B1cF9iZmZkNTFjNTlhNTg0ZjQ0OGM2NTQxZWM0OTlhZTNhZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MWU5ZTA3ZWFmNGM0ODg1ODhiOGMwZGNlZDM2NGQyYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NzIyNTM2LC00My45ODI5ODc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc5NGE1NzQ2YzFkNjQ2YjdhNGI4Yzk0MzQzNDM1YjVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg1NTI5ODJhNzI3NjRjN2FhZTljYTBhMjY4ZTAzMDlhID0gJCgnPGRpdiBpZD0iaHRtbF84NTUyOTgyYTcyNzY0YzdhYWU5Y2EwYTI2OGUwMzA5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1VSTyBQUkVUTzogKC0xOS44NzIyNTM2LCAtNDMuOTgyOTg3Nyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc5NGE1NzQ2YzFkNjQ2YjdhNGI4Yzk0MzQzNDM1YjVkLnNldENvbnRlbnQoaHRtbF84NTUyOTgyYTcyNzY0YzdhYWU5Y2EwYTI2OGUwMzA5YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MWU5ZTA3ZWFmNGM0ODg1ODhiOGMwZGNlZDM2NGQyYy5iaW5kUG9wdXAocG9wdXBfNzk0YTU3NDZjMWQ2NDZiN2E0YjhjOTQzNDM0MzViNWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzg4ZGIwNDQxOTQ3NDRjZThlZjhkMDFmM2RlYjNkNzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODYzODAzNiwtNDMuOTc0OTI4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMDk3ZWFmMjVhMTI0YjRlOGE3NTQ0OWZlNmRkMmRhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMDIwZTAyOGQyNzU0ZTk2YWQxY2JkZGQwYzUwMWJkYiA9ICQoJzxkaXYgaWQ9Imh0bWxfYTAyMGUwMjhkMjc1NGU5NmFkMWNiZGRkMGM1MDFiZGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBBTVBVTEhBOiAoLTE5Ljg2MzgwMzYsIC00My45NzQ5Mjg3KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDA5N2VhZjI1YTEyNGI0ZThhNzU0NDlmZTZkZDJkYTcuc2V0Q29udGVudChodG1sX2EwMjBlMDI4ZDI3NTRlOTZhZDFjYmRkZDBjNTAxYmRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M4OGRiMDQ0MTk0NzQ0Y2U4ZWY4ZDAxZjNkZWIzZDc1LmJpbmRQb3B1cChwb3B1cF8wMDk3ZWFmMjVhMTI0YjRlOGE3NTQ0OWZlNmRkMmRhNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OGNjYmE0MGI3Yzg0NmQwYWYzOWM0NDM3M2EwNWY4ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MjQxMTM5MDAwMDAwMDIsLTQzLjk2MjM0NjI2NTcyNjY2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZDQ0YjUzM2NjMDU0ZTY0OTM5NmI2ZTk1YmNlOWRmYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZDhiYmU4NzhhMWE0NmY1OGY1OTgzODFhZTgwYzgxZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZmQ4YmJlODc4YTFhNDZmNThmNTk4MzgxYWU4MGM4MWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBSQURPOiAoLTE5LjkyNDExMzkwMDAwMDAwMiwgLTQzLjk2MjM0NjI2NTcyNjY2Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhkNDRiNTMzY2MwNTRlNjQ5Mzk2YjZlOTViY2U5ZGZiLnNldENvbnRlbnQoaHRtbF9mZDhiYmU4NzhhMWE0NmY1OGY1OTgzODFhZTgwYzgxZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81OGNjYmE0MGI3Yzg0NmQwYWYzOWM0NDM3M2EwNWY4ZS5iaW5kUG9wdXAocG9wdXBfOGQ0NGI1MzNjYzA1NGU2NDkzOTZiNmU5NWJjZTlkZmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjBmMzM3ZjIzMjM3NGI4ZmIyNmZlZGRkZmY0N2I0OTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODM5MDg0NzQ5OTk5OTk4LC00My45Nzc4ODQwNDEwMDQ4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMzdmOTEwOTkyZDU0NjZkYWU2N2Y0MWI3ZjI0YjU5YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xODlkMGZjNDgxOWM0ZWJmYjBmZmY2YzQ4ZTk2NGQzYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTg5ZDBmYzQ4MTljNGViZmIwZmZmNmM0OGU5NjRkM2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTlRBIEFNRUxJQTogKC0xOS44MzkwODQ3NDk5OTk5OTgsIC00My45Nzc4ODQwNDEwMDQ4MSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIzN2Y5MTA5OTJkNTQ2NmRhZTY3ZjQxYjdmMjRiNTliLnNldENvbnRlbnQoaHRtbF8xODlkMGZjNDgxOWM0ZWJmYjBmZmY2YzQ4ZTk2NGQzYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMGYzMzdmMjMyMzc0YjhmYjI2ZmVkZGRmZjQ3YjQ5Ni5iaW5kUG9wdXAocG9wdXBfMjM3ZjkxMDk5MmQ1NDY2ZGFlNjdmNDFiN2YyNGI1OWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzkwNjQ1ODgwMTczNGFiYTlmZjBlY2VjN2EzYmI2ZGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODM0NzQ5OSwtNDMuOTY3ODExOTAwNzY3NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDUzYTcyYzk1ZjIwNGM1YTljN2VhMjkyYzcyNzA2OTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzU0YmJhMWI1MjRlNGNhYTk3ZTk0M2UxOTQwMmVmYTggPSAkKCc8ZGl2IGlkPSJodG1sXzM1NGJiYTFiNTI0ZTRjYWE5N2U5NDNlMTk0MDJlZmE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBCUkFOQ0E6ICgtMTkuODM0NzQ5OSwgLTQzLjk2NzgxMTkwMDc2NzQxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDUzYTcyYzk1ZjIwNGM1YTljN2VhMjkyYzcyNzA2OTEuc2V0Q29udGVudChodG1sXzM1NGJiYTFiNTI0ZTRjYWE5N2U5NDNlMTk0MDJlZmE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM5MDY0NTg4MDE3MzRhYmE5ZmYwZWNlYzdhM2JiNmRmLmJpbmRQb3B1cChwb3B1cF8wNTNhNzJjOTVmMjA0YzVhOWM3ZWEyOTJjNzI3MDY5MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZTExYjIxNzgwZmM0ODA5YTFiNmQxNTJjZDdjYWRiOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NjM0ODE0LC00My45NDYzMTY5OTMxMzE4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OGM1MjM4MzMzNjc0MmEwYTk1MWRiYWNhYmYwZmQ3MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZTc1OTg4MjY1M2M0MzQzYjFmNTM0MTZmNmFiZDI1NCA9ICQoJzxkaXYgaWQ9Imh0bWxfZWU3NTk4ODI2NTNjNDM0M2IxZjUzNDE2ZjZhYmQyNTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTlRBIFJPU0E6ICgtMTkuODYzNDgxNCwgLTQzLjk0NjMxNjk5MzEzMTgzKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOThjNTIzODMzMzY3NDJhMGE5NTFkYmFjYWJmMGZkNzIuc2V0Q29udGVudChodG1sX2VlNzU5ODgyNjUzYzQzNDNiMWY1MzQxNmY2YWJkMjU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NlMTFiMjE3ODBmYzQ4MDlhMWI2ZDE1MmNkN2NhZGI4LmJpbmRQb3B1cChwb3B1cF85OGM1MjM4MzMzNjc0MmEwYTk1MWRiYWNhYmYwZmQ3Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YzI1YWQ2MzllMzA0ZTcxOTMxMTI2Yzc5MDQyNDc2NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MTQ4OTIxLC00My45MTcwNDYxNDM2NTE3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80M2Q0NWE2ODg4MDM0MTEyYTJiM2I5ZTcwYzQzZGQ4OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81Zjg5MzBkNzkyMDg0MzUxYjVlMDBmZDBhYzliY2E0MiA9ICQoJzxkaXYgaWQ9Imh0bWxfNWY4OTMwZDc5MjA4NDM1MWI1ZTAwZmQwYWM5YmNhNDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTlRBIFRFUkVaQTogKC0xOS45MTQ4OTIxLCAtNDMuOTE3MDQ2MTQzNjUxNzgpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80M2Q0NWE2ODg4MDM0MTEyYTJiM2I5ZTcwYzQzZGQ4OS5zZXRDb250ZW50KGh0bWxfNWY4OTMwZDc5MjA4NDM1MWI1ZTAwZmQwYWM5YmNhNDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmMyNWFkNjM5ZTMwNGU3MTkzMTEyNmM3OTA0MjQ3NjQuYmluZFBvcHVwKHBvcHVwXzQzZDQ1YTY4ODgwMzQxMTJhMmIzYjllNzBjNDNkZDg5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkxY2ZlNTcyY2YzMDQwNzE5MGM5ZGNiMzgxYWY4YzIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzMTE1NjM1MDAwMDAwMiwtNDMuOTIxMjYxNjkzOTkwNjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDg4MjEwYzQzNjE2NDU0Mjk4Nzc1M2FkNjZhNmFiMDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGU2ZTZlNmRlZDJjNGE0ZWI0NzU3MjdkYWVlYTBkNzUgPSAkKCc8ZGl2IGlkPSJodG1sX2RlNmU2ZTZkZWQyYzRhNGViNDc1NzI3ZGFlZWEwZDc1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tw4NPIExVQ0FTOiAoLTE5LjkzMTE1NjM1MDAwMDAwMiwgLTQzLjkyMTI2MTY5Mzk5MDYyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDg4MjEwYzQzNjE2NDU0Mjk4Nzc1M2FkNjZhNmFiMDkuc2V0Q29udGVudChodG1sX2RlNmU2ZTZkZWQyYzRhNGViNDc1NzI3ZGFlZWEwZDc1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkxY2ZlNTcyY2YzMDQwNzE5MGM5ZGNiMzgxYWY4YzIzLmJpbmRQb3B1cChwb3B1cF80ODgyMTBjNDM2MTY0NTQyOTg3NzUzYWQ2NmE2YWIwOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYTc4ZmUxZGJiN2Q0MWUzODM4ODE4NjUwYjA4OTcxMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS44NTc5NTg3LC00My45ODgyNzk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E2MTFjOTNiNmZiNDQ4NjdhODEwOTVkNWUzZDk2OTUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y0OTc4MjA4YjQ3ZTQ5ZDFhOTg1YWI5MWM3OTQ3ZmU2ID0gJCgnPGRpdiBpZD0iaHRtbF9mNDk3ODIwOGI0N2U0OWQxYTk4NWFiOTFjNzk0N2ZlNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkFOREVJUkFOVEVTOiAoLTE5Ljg1Nzk1ODcsIC00My45ODgyNzk4KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTYxMWM5M2I2ZmI0NDg2N2E4MTA5NWQ1ZTNkOTY5NTMuc2V0Q29udGVudChodG1sX2Y0OTc4MjA4YjQ3ZTQ5ZDFhOTg1YWI5MWM3OTQ3ZmU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBhNzhmZTFkYmI3ZDQxZTM4Mzg4MTg2NTBiMDg5NzExLmJpbmRQb3B1cChwb3B1cF9hNjExYzkzYjZmYjQ0ODY3YTgxMDk1ZDVlM2Q5Njk1Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NWVhMjlkZmFhMzk0N2ZiYjNjYjA2MWM3NjNlMzUxZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45ODAyNzUyLC00My45NDY1NzAwNzcxNzI0OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODJiMGZlMTEyODNhNDY2ZjhjYWI0YWQyY2Y5NzMzOWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTIzZjVmNGRjNDFkNGEzZjhhOGJkYzQ4ZmRhZDI5NjIgPSAkKCc8ZGl2IGlkPSJodG1sXzUyM2Y1ZjRkYzQxZDRhM2Y4YThiZGM0OGZkYWQyOTYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CRUxWRURFUkU6ICgtMTkuOTgwMjc1MiwgLTQzLjk0NjU3MDA3NzE3MjQ5NSk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgyYjBmZTExMjgzYTQ2NmY4Y2FiNGFkMmNmOTczMzliLnNldENvbnRlbnQoaHRtbF81MjNmNWY0ZGM0MWQ0YTNmOGE4YmRjNDhmZGFkMjk2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NWVhMjlkZmFhMzk0N2ZiYjNjYjA2MWM3NjNlMzUxZi5iaW5kUG9wdXAocG9wdXBfODJiMGZlMTEyODNhNDY2ZjhjYWI0YWQyY2Y5NzMzOWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmJhMmRmYmJhYjA2NGI1NWE3ZjA4OWI1MWYyZmI0NGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQzNDQyNiwtNDMuOTMyMDkyODE0NDA5OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjFkODZiY2ZiNWE2NGJiZDk5YWEzN2RiNjBhY2VjOGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTRlNTFjY2JhNmQ0NDg4Yzg1ZjJmN2FmZGI4MjIyNjMgPSAkKCc8ZGl2IGlkPSJodG1sXzU0ZTUxY2NiYTZkNDQ4OGM4NWYyZjdhZmRiODIyMjYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DQVJNTzogKC0xOS45NDM0NDI2LCAtNDMuOTMyMDkyODE0NDA5OTEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMWQ4NmJjZmI1YTY0YmJkOTlhYTM3ZGI2MGFjZWM4Yi5zZXRDb250ZW50KGh0bWxfNTRlNTFjY2JhNmQ0NDg4Yzg1ZjJmN2FmZGI4MjIyNjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmJhMmRmYmJhYjA2NGI1NWE3ZjA4OWI1MWYyZmI0NGQuYmluZFBvcHVwKHBvcHVwX2YxZDg2YmNmYjVhNjRiYmQ5OWFhMzdkYjYwYWNlYzhiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU4NWY0ODA4ZWE0OTQxZjg5ZTZiZWMzODA3MTFmMmJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkzODQ3NjcwMDAwMDAwMiwtNDMuOTUwNjYwMDY1MzU0MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTQ3Y2U5OTU3ZTgxNGM3ZDg0NzgzOTJlOTgwY2FjZjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2E0ODkxMzA4ZmNjNDYyMWIwNWNjNTk4YzNiMDA2ODMgPSAkKCc8ZGl2IGlkPSJodG1sXzdhNDg5MTMwOGZjYzQ2MjFiMDVjYzU5OGMzYjAwNjgzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DSURBREUgSkFSRElNOiAoLTE5LjkzODQ3NjcwMDAwMDAwMiwgLTQzLjk1MDY2MDA2NTM1NDM0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTQ3Y2U5OTU3ZTgxNGM3ZDg0NzgzOTJlOTgwY2FjZjIuc2V0Q29udGVudChodG1sXzdhNDg5MTMwOGZjYzQ2MjFiMDVjYzU5OGMzYjAwNjgzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU4NWY0ODA4ZWE0OTQxZjg5ZTZiZWMzODA3MTFmMmJhLmJpbmRQb3B1cChwb3B1cF81NDdjZTk5NTdlODE0YzdkODQ3ODM5MmU5ODBjYWNmMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMTBmNzdlZjE5MmM0YWIxYTk5MDMwMGU3N2E1ZjFlOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDU4NzQwOTk5OTk5OTcsLTQzLjk1MTIyODYyNTc3MDg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VjNDliMWNmZWMxNDQzYWU5YWViMGE0ZmMyOTUxZWYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA0NjE0MzdmYjU3MDQ2OGViYjNiMzVkNjRmMGZkZmI0ID0gJCgnPGRpdiBpZD0iaHRtbF8wNDYxNDM3ZmI1NzA0NjhlYmIzYjM1ZDY0ZjBmZGZiNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q09SQUNBTyBERSBKRVNVUzogKC0xOS45NDU4NzQwOTk5OTk5OTcsIC00My45NTEyMjg2MjU3NzA4NCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjNDliMWNmZWMxNDQzYWU5YWViMGE0ZmMyOTUxZWYxLnNldENvbnRlbnQoaHRtbF8wNDYxNDM3ZmI1NzA0NjhlYmIzYjM1ZDY0ZjBmZGZiNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMTBmNzdlZjE5MmM0YWIxYTk5MDMwMGU3N2E1ZjFlOC5iaW5kUG9wdXAocG9wdXBfZWM0OWIxY2ZlYzE0NDNhZTlhZWIwYTRmYzI5NTFlZjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWVlMjliZTViOGRkNDk0N2IzYmEwODE1YjdjNzU2NDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQ0MjU4OCwtNDMuOTI4NDEyOTYwNTk3MzU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg3NTJkY2Q4YzcyMjQ2NGE4ZGY0MGVmMmZhMmYxZGJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjNWQ2MDJjYTQ5ODRmY2JhZTMwNWZjMWJjNTI4MTgzID0gJCgnPGRpdiBpZD0iaHRtbF83YzVkNjAyY2E0OTg0ZmNiYWUzMDVmYzFiYzUyODE4MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q1JVWkVJUk86ICgtMTkuOTQ0MjU4OCwgLTQzLjkyODQxMjk2MDU5NzM1Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg3NTJkY2Q4YzcyMjQ2NGE4ZGY0MGVmMmZhMmYxZGJhLnNldENvbnRlbnQoaHRtbF83YzVkNjAyY2E0OTg0ZmNiYWUzMDVmYzFiYzUyODE4Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZWUyOWJlNWI4ZGQ0OTQ3YjNiYTA4MTViN2M3NTY0MC5iaW5kUG9wdXAocG9wdXBfODc1MmRjZDhjNzIyNDY0YThkZjQwZWYyZmEyZjFkYmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjM5MTViNGFjNDdhNDVlNmI4YTBkMDFhNTQwMWUwMzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTMyNTE2MjAwMDAwMDAyLC00My45MjczMTgyNzM0NjMyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNjk3MDk3MDUyZGM0MzUzYWZlZGFiMTNlNWU0OTUyMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMmQwNzI0N2U4ZGQ0YmY2YjZlMzUwNDlkMzQ4Y2ZiZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTJkMDcyNDdlOGRkNGJmNmI2ZTM1MDQ5ZDM0OGNmYmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZVTkNJT05BUklPUzogKC0xOS45MzI1MTYyMDAwMDAwMDIsIC00My45MjczMTgyNzM0NjMyOCk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M2OTcwOTcwNTJkYzQzNTNhZmVkYWIxM2U1ZTQ5NTIxLnNldENvbnRlbnQoaHRtbF8xMmQwNzI0N2U4ZGQ0YmY2YjZlMzUwNDlkMzQ4Y2ZiZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMzkxNWI0YWM0N2E0NWU2YjhhMGQwMWE1NDAxZTAzNC5iaW5kUG9wdXAocG9wdXBfYzY5NzA5NzA1MmRjNDM1M2FmZWRhYjEzZTVlNDk1MjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzM2NTM1OTU3NTI0NGYwYjlhOGY3Y2QxNTdlNjg2NDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTM5NjM3NiwtNDMuOTU4NjY5MDk1NjE0ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTdiNWY2NDYzMjE2NGIwNTk4OGFhYWIwODJiNTE3YmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjRlZGEzY2Q3MDI2NDM1ZGJmNjc2OGRmNmEzNDAyMjkgPSAkKCc8ZGl2IGlkPSJodG1sX2I0ZWRhM2NkNzAyNjQzNWRiZjY3NjhkZjZhMzQwMjI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HVVRJRVJSRVo6ICgtMTkuOTM5NjM3NiwgLTQzLjk1ODY2OTA5NTYxNDg1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTdiNWY2NDYzMjE2NGIwNTk4OGFhYWIwODJiNTE3YmYuc2V0Q29udGVudChodG1sX2I0ZWRhM2NkNzAyNjQzNWRiZjY3NjhkZjZhMzQwMjI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzczNjUzNTk1NzUyNDRmMGI5YThmN2NkMTU3ZTY4NjQwLmJpbmRQb3B1cChwb3B1cF9lN2I1ZjY0NjMyMTY0YjA1OTg4YWFhYjA4MmI1MTdiZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYzczMmI3OTJjZjg0YmFhOGZiMTUwNDdlZWI3MzljYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzIxNTMxLC00My45NDM1NzUwNDg0MTA1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYzcwZTE4NTMxYzA0OTJhYTUxMzAwM2Q0OWIyZTVhMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGE4MGZkMmI5NmE0NjIwYTA0NTg5ZTY5MWI5ODk4NiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjhhODBmZDJiOTZhNDYyMGEwNDU4OWU2OTFiOTg5ODYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxPVVJERVM6ICgtMTkuOTMyMTUzMSwgLTQzLjk0MzU3NTA0ODQxMDUxKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2M3MGUxODUzMWMwNDkyYWE1MTMwMDNkNDliMmU1YTMuc2V0Q29udGVudChodG1sXzY4YTgwZmQyYjk2YTQ2MjBhMDQ1ODllNjkxYjk4OTg2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZjNzMyYjc5MmNmODRiYWE4ZmIxNTA0N2VlYjczOWNjLmJpbmRQb3B1cChwb3B1cF9jYzcwZTE4NTMxYzA0OTJhYTUxMzAwM2Q0OWIyZTVhMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYTkwZjg2ZDQwMjU0MGVlYWY4OGM0MTUxMWQyNTQ0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDY2NTc0LC00My45NTYzNjMxNzU0MDExNjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjc5NjI3M2RjMmI3NDYzZTgwYjYxYjQzODQ4ZjM1ODQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTI3MTY3YWFmNDAxNGRjZDg2NDdkYTg0ODlkOTc5ODQgPSAkKCc8ZGl2IGlkPSJodG1sXzEyNzE2N2FhZjQwMTRkY2Q4NjQ3ZGE4NDg5ZDk3OTg0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MVVhFTUJVUkdPOiAoLTE5Ljk0NjY1NzQsIC00My45NTYzNjMxNzU0MDExNjUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNzk2MjczZGMyYjc0NjNlODBiNjFiNDM4NDhmMzU4NC5zZXRDb250ZW50KGh0bWxfMTI3MTY3YWFmNDAxNGRjZDg2NDdkYTg0ODlkOTc5ODQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2E5MGY4NmQ0MDI1NDBlZWFmODhjNDE1MTFkMjU0NGUuYmluZFBvcHVwKHBvcHVwX2I3OTYyNzNkYzJiNzQ2M2U4MGI2MWI0Mzg0OGYzNTg0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E5ZTUwOWRkOWEzMjQ0N2RiYWJjOWQ3MmRmMDUyZGE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk1NTQzNDQsLTQzLjkxMTYwOTIxMzMxOTg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNiNWE0MjFhMjRhNjRlZTBhZGMyYjk3OGY3MjVjZGE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YzNzQwNDUzZTFlNDQwN2FiZGZkZjNhMjdkMWI0NGNmID0gJCgnPGRpdiBpZD0iaHRtbF9mMzc0MDQ1M2UxZTQ0MDdhYmRmZGYzYTI3ZDFiNDRjZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUFOR0FCRUlSQVM6ICgtMTkuOTU1NDM0NCwgLTQzLjkxMTYwOTIxMzMxOTg0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2I1YTQyMWEyNGE2NGVlMGFkYzJiOTc4ZjcyNWNkYTcuc2V0Q29udGVudChodG1sX2YzNzQwNDUzZTFlNDQwN2FiZGZkZjNhMjdkMWI0NGNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E5ZTUwOWRkOWEzMjQ0N2RiYWJjOWQ3MmRmMDUyZGE4LmJpbmRQb3B1cChwb3B1cF8zYjVhNDIxYTI0YTY0ZWUwYWRjMmI5NzhmNzI1Y2RhNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNWY2MjNiYTFiMjc0YmY0YWRmNzk2YjMzM2U4NWJjYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDc3MDQ2NSwtNDMuOTA0NjI5MDgxNTIwMDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5MWEyMGI0OTQ3MDQ0OTM4MjA1MWNiYWU2ODdhOWFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAxMzBkMjk4ZDVlMTRlMDRiM2UxZWRhZGUxM2RiZjIxID0gJCgnPGRpdiBpZD0iaHRtbF8wMTMwZDI5OGQ1ZTE0ZTA0YjNlMWVkYWRlMTNkYmYyMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEFSUVVFIERBUyBNQU5HQUJFSVJBUzogKC0xOS45NDc3MDQ2NSwgLTQzLjkwNDYyOTA4MTUyMDA1Nik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5MWEyMGI0OTQ3MDQ0OTM4MjA1MWNiYWU2ODdhOWFmLnNldENvbnRlbnQoaHRtbF8wMTMwZDI5OGQ1ZTE0ZTA0YjNlMWVkYWRlMTNkYmYyMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNWY2MjNiYTFiMjc0YmY0YWRmNzk2YjMzM2U4NWJjYS5iaW5kUG9wdXAocG9wdXBfOTkxYTIwYjQ5NDcwNDQ5MzgyMDUxY2JhZTY4N2E5YWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWY2YmYyNzE2YzVmNDI4OGFjOGQwNzI2ZTI4OWFiOTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTYzMjI1NiwtNDMuOTQ1MTAwOTYwOTM3NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTMyMDIwMjgxMmNhNGJiMjhkZjc2MzZhNjM1Mzc3OWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYThkNGI5MjRlYjc5NGZiNzlkZTdlOGM0NGEyMzg1MjUgPSAkKCc8ZGl2IGlkPSJodG1sX2E4ZDRiOTI0ZWI3OTRmYjc5ZGU3ZThjNDRhMjM4NTI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UQSBMVUNJQTogKC0xOS45NjMyMjU2LCAtNDMuOTQ1MTAwOTYwOTM3NjcpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MzIwMjAyODEyY2E0YmIyOGRmNzYzNmE2MzUzNzc5YS5zZXRDb250ZW50KGh0bWxfYThkNGI5MjRlYjc5NGZiNzlkZTdlOGM0NGEyMzg1MjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWY2YmYyNzE2YzVmNDI4OGFjOGQwNzI2ZTI4OWFiOTAuYmluZFBvcHVwKHBvcHVwXzUzMjAyMDI4MTJjYTRiYjI4ZGY3NjM2YTYzNTM3NzlhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI3MzY4ZTg3NTU1MzQ5YWU5ZDkzNzZhMDViNjhkM2JlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjkyODgxMTM1LC00My45NTE0MDc0Mjk5NDkxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNTcwYmJmMjAyN2M0YjU5OGUxM2VmMjY0OTg4ZGQzNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZjM0MjQ4YzA1NjM0MjM0YmRjZTBjNjFjMjQwNjM4ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfM2YzNDI0OGMwNTYzNDIzNGJkY2UwYzYxYzI0MDYzOGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNBTlRPIEFHT1NUSU5ITzogKC0xOS45Mjg4MTEzNSwgLTQzLjk1MTQwNzQyOTk0OTE0KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjU3MGJiZjIwMjdjNGI1OThlMTNlZjI2NDk4OGRkMzcuc2V0Q29udGVudChodG1sXzNmMzQyNDhjMDU2MzQyMzRiZGNlMGM2MWMyNDA2MzhmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI3MzY4ZTg3NTU1MzQ5YWU5ZDkzNzZhMDViNjhkM2JlLmJpbmRQb3B1cChwb3B1cF9iNTcwYmJmMjAyN2M0YjU5OGUxM2VmMjY0OTg4ZGQzNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMzdmZDAyNTllN2U0NmQwYjI1YmM3NTFkZmZjZWZiZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NDMzMjk0LC00My45NDM0MjAyNTIxOTM0MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTUzNmMxNjAzYTk3NDVkY2FmNTMzMzE4Y2I4ZmY0NWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzBkYzVhNDg2MGQ5NGI0NWI0NTBhYjBiNmM1NmEyOTYgPSAkKCc8ZGl2IGlkPSJodG1sXzcwZGM1YTQ4NjBkOTRiNDViNDUwYWIwYjZjNTZhMjk2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQU5UTyBBTlRPTklPOiAoLTE5Ljk0MzMyOTQsIC00My45NDM0MjAyNTIxOTM0MDUpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NTM2YzE2MDNhOTc0NWRjYWY1MzMzMThjYjhmZjQ1Yi5zZXRDb250ZW50KGh0bWxfNzBkYzVhNDg2MGQ5NGI0NWI0NTBhYjBiNmM1NmEyOTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDM3ZmQwMjU5ZTdlNDZkMGIyNWJjNzUxZGZmY2VmYmUuYmluZFBvcHVwKHBvcHVwXzk1MzZjMTYwM2E5NzQ1ZGNhZjUzMzMxOGNiOGZmNDViKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EzYWI3ZmU1NGIxMjQ4MGFiY2E2MjM5NTc1OGM3ZGE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk1NzcwODY1LC00My45NTMyNDE1NDI1OTE1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzhjMTUwNDVlMWQ0NWMwOWZlNTFlYzFkMDdkZTUyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYjg2MGZhZjc3Y2E0NjQ0YTYzYmViNzIxZjEyNzdhZCA9ICQoJzxkaXYgaWQ9Imh0bWxfY2I4NjBmYWY3N2NhNDY0NGE2M2JlYjcyMWYxMjc3YWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlPDg08gQkVOVE86ICgtMTkuOTU3NzA4NjUsIC00My45NTMyNDE1NDI1OTE1Nyk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFjOGMxNTA0NWUxZDQ1YzA5ZmU1MWVjMWQwN2RlNTJlLnNldENvbnRlbnQoaHRtbF9jYjg2MGZhZjc3Y2E0NjQ0YTYzYmViNzIxZjEyNzdhZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hM2FiN2ZlNTRiMTI0ODBhYmNhNjIzOTU3NThjN2RhNi5iaW5kUG9wdXAocG9wdXBfMWM4YzE1MDQ1ZTFkNDVjMDlmZTUxZWMxZDA3ZGU1MmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWE0Y2NmYjNiY2U5NDk3OTk2OGRlNTg2Y2I3M2VlYjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuODYwMzgzNCwtNDMuOTY2MTEwMTY2MjI1MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzRlZGZkZThhMGQ2NDVjYWIyOTMyMzZmZjdmZDNlMzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2U4ZDUwMjJjMzk1NDk0MTliZTdhMmYxNWQyNmViMTggPSAkKCc8ZGl2IGlkPSJodG1sXzNlOGQ1MDIyYzM5NTQ5NDE5YmU3YTJmMTVkMjZlYjE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tw4NPIEpPU0UgUEFNUFVMSEE6ICgtMTkuODYwMzgzNCwgLTQzLjk2NjExMDE2NjIyNTAyKTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzRlZGZkZThhMGQ2NDVjYWIyOTMyMzZmZjdmZDNlMzAuc2V0Q29udGVudChodG1sXzNlOGQ1MDIyYzM5NTQ5NDE5YmU3YTJmMTVkMjZlYjE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VhNGNjZmIzYmNlOTQ5Nzk5NjhkZTU4NmNiNzNlZWI3LmJpbmRQb3B1cChwb3B1cF83NGVkZmRlOGEwZDY0NWNhYjI5MzIzNmZmN2ZkM2UzMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MGUyMTRlMzdlNzI0ZGJjYTI0OWI5ZWVhZmM0YTIyMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy05LjI5NDQyNzksLTQwLjgyNDk4MjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmY2ZTcwYzk2YWY5NDM0NzljMTM0ZjU3YTkxMDZhM2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWM5OGI2OWVjYTQ2NGMwZGFmYWNlZTQyNmUwZGQxNzAgPSAkKCc8ZGl2IGlkPSJodG1sXzljOThiNjllY2E0NjRjMGRhZmFjZWU0MjZlMGRkMTcwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tw4NPIExVSVM6ICgtOS4yOTQ0Mjc5LCAtNDAuODI0OTgyNik8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJmNmU3MGM5NmFmOTQzNDc5YzEzNGY1N2E5MTA2YTNiLnNldENvbnRlbnQoaHRtbF85Yzk4YjY5ZWNhNDY0YzBkYWZhY2VlNDI2ZTBkZDE3MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MGUyMTRlMzdlNzI0ZGJjYTI0OWI5ZWVhZmM0YTIyMy5iaW5kUG9wdXAocG9wdXBfMmY2ZTcwYzk2YWY5NDM0NzljMTM0ZjU3YTkxMDZhM2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTI5OGE1ZjA1MmM0NGY2MzhjNjg3YzdmMmYxNjg5ZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuOTQ3NjU5MDUsLTQzLjkzNzUwOTQ3MjYyNzA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgyYzZmMjNiNTNiNTRmZjc4NDRkMTk4ODAyNTczMDA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwOTA5ODdiZGMwZTRmZmZiZmIwODU0NTQ4NDNmYWMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ExNGQzNjNmZjhiMjRiNGY4MDYyMzlmZjMyZjljNTY3ID0gJCgnPGRpdiBpZD0iaHRtbF9hMTRkMzYzZmY4YjI0YjRmODA2MjM5ZmYzMmY5YzU2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U8ODTyBQRURSTzogKC0xOS45NDc2NTkwNSwgLTQzLjkzNzUwOTQ3MjYyNzA1KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzA5MDk4N2JkYzBlNGZmZmJmYjA4NTQ1NDg0M2ZhYzEuc2V0Q29udGVudChodG1sX2ExNGQzNjNmZjhiMjRiNGY4MDYyMzlmZjMyZjljNTY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkyOThhNWYwNTJjNDRmNjM4YzY4N2M3ZjJmMTY4OWY4LmJpbmRQb3B1cChwb3B1cF9jMDkwOTg3YmRjMGU0ZmZmYmZiMDg1NDU0ODQzZmFjMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZmE2M2QwMGRhM2E0MDIyOWVlZDY2YWU5YmQ3NjI5MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45MzUyMjA1LC00My45MzQ0NDYzNDAxOTc0NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzI3NzMzZTUyMjc3NGRiOWFlZmQ0NzJhYzhjNzc3NzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTdjOGE4Zjg5MDFjNDk1MGIyMTAzMDI5NjYzMzBhZWIgPSAkKCc8ZGl2IGlkPSJodG1sXzU3YzhhOGY4OTAxYzQ5NTBiMjEwMzAyOTY2MzMwYWViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TQVZBU1NJOiAoLTE5LjkzNTIyMDUsIC00My45MzQ0NDYzNDAxOTc0NTQpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMjc3MzNlNTIyNzc0ZGI5YWVmZDQ3MmFjOGM3Nzc3OC5zZXRDb250ZW50KGh0bWxfNTdjOGE4Zjg5MDFjNDk1MGIyMTAzMDI5NjYzMzBhZWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2ZhNjNkMDBkYTNhNDAyMjllZWQ2NmFlOWJkNzYyOTEuYmluZFBvcHVwKHBvcHVwX2MyNzczM2U1MjI3NzRkYjlhZWZkNDcyYWM4Yzc3Nzc4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjZjNjOGY1NGJmYzQyZGU5OWI0YTdlNDA4MTBkMmFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0MDU1NTc1LC00My45MTg0MjMwNDQ5NTU1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF84MmM2ZjIzYjUzYjU0ZmY3ODQ0ZDE5ODgwMjU3MzAwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NmE4MjVjMDFiMTI0ODZhYjZhNjljYTA0ZDAzZjdmMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NGFkNGE5ZWU4YmQ0NWJkYWVlZmJlOTRkZGUzNTYyZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzRhZDRhOWVlOGJkNDViZGFlZWZiZTk0ZGRlMzU2MmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNFUlJBOiAoLTE5Ljk0MDU1NTc1LCAtNDMuOTE4NDIzMDQ0OTU1NTIpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NmE4MjVjMDFiMTI0ODZhYjZhNjljYTA0ZDAzZjdmMS5zZXRDb250ZW50KGh0bWxfNzRhZDRhOWVlOGJkNDViZGFlZWZiZTk0ZGRlMzU2MmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWNmM2M4ZjU0YmZjNDJkZTk5YjRhN2U0MDgxMGQyYWUuYmluZFBvcHVwKHBvcHVwXzY2YTgyNWMwMWIxMjQ4NmFiNmE2OWNhMDRkMDNmN2YxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRlYmEyN2I3OWE0ODRiYTNhODRlMTAxMmVhY2Q4YmExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5Ljk0OTM2MjQsLTQzLjkzMjU4NjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2JhNmQwMDIxMzA2NDhiMThiOWNmNmRjMWY3NDZjYWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmQxOTM4YjVhMTU3NDI5MDkzYTYwMmFiNDdhMDQ5NmIgPSAkKCc8ZGl2IGlkPSJodG1sXzJkMTkzOGI1YTE1NzQyOTA5M2E2MDJhYjQ3YTA0OTZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TSU9OOiAoLTE5Ljk0OTM2MjQsIC00My45MzI1ODY5KTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2JhNmQwMDIxMzA2NDhiMThiOWNmNmRjMWY3NDZjYWIuc2V0Q29udGVudChodG1sXzJkMTkzOGI1YTE1NzQyOTA5M2E2MDJhYjQ3YTA0OTZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRlYmEyN2I3OWE0ODRiYTNhODRlMTAxMmVhY2Q4YmExLmJpbmRQb3B1cChwb3B1cF8zYmE2ZDAwMjEzMDY0OGIxOGI5Y2Y2ZGMxZjc0NmNhYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYTQ3YWM0MWM4MjQ0MDI3OTU4MTUzNzQ5NzJjOTYxMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS45NTA2MTkyNSwtNDMuOTUwMjYzNTg2NzI5MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODJjNmYyM2I1M2I1NGZmNzg0NGQxOTg4MDI1NzMwMDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmU0MmQ3NTIwYWFiNGEyN2E5MzczNzUyZTdiYTY0YzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGVlMGJhZjgzZDIzNDE3NWEwYjM2YWYwZTE4ZTM2OTEgPSAkKCc8ZGl2IGlkPSJodG1sXzBlZTBiYWY4M2QyMzQxNzVhMGIzNmFmMGUxOGUzNjkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WSUxBIFBBUklTOiAoLTE5Ljk1MDYxOTI1LCAtNDMuOTUwMjYzNTg2NzI5MDEpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZTQyZDc1MjBhYWI0YTI3YTkzNzM3NTJlN2JhNjRjMC5zZXRDb250ZW50KGh0bWxfMGVlMGJhZjgzZDIzNDE3NWEwYjM2YWYwZTE4ZTM2OTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmE0N2FjNDFjODI0NDAyNzk1ODE1Mzc0OTcyYzk2MTMuYmluZFBvcHVwKHBvcHVwX2ZlNDJkNzUyMGFhYjRhMjdhOTM3Mzc1MmU3YmE2NGMwKTsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x7f475fe6f278>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"map_bh"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"By viewing the map it's clear that geopy defined many points out of bounds of Belo Horizonte. Besides that, as I live in Belo Horizonte, I could detect some neighborhoods far from downtown that were inacurately defined by geopy.\n",
"\n",
"So, we chose to restrict the analysis to neighborhoods not far from downtown.\n",
"\n",
"Also, the location of \"Pindorama\" neighborhood, near from downtown, is remarkably wrong. So it will be removed too."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3. Methodology "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So now we have 4 clean datasets:\n",
"\n",
"* bh_food_venues\n",
"* bh_stores_venues\n",
"* bh_pro_venues\n",
"* bh_all_venues\n",
"\n",
"They will be our asset for training our model using classification algorithms - the venues categories will be its features (after an onehot) and the social class will be the target variable.\n",
"\n",
"The resulting models will be evaluated and we will show the best dataset and best classification algorithm for our goal.\n",
"\n",
"Let's pick one dataset and see if it's ready to go:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"SAVASSI 100\n",
"LOURDES 100\n",
"CENTRO 100\n",
"FUNCIONARIOS 100\n",
"CARMO 92\n",
" ... \n",
"PATROCINIO 5\n",
"ENGENHO NOGUEIRA 4\n",
"ALTO DOS PINHEIROS 4\n",
"UFMG 4\n",
"BANDEIRANTES 2\n",
"Name: Neighborhood, Length: 161, dtype: int64"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bh_all_venues['Neighborhood'].value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As we are going to use the Venues categories as features of our clustering algorithms, it's appropriate to avoid neighborhoods with small number of venues, because it's high potential to become outliers.\n",
"\n",
"Unfortunately, the dataset of stores become too small after that restriction, so it will be discarded.\n",
"\n",
"Now let's take a fast view on the most common Venues Categories of **bh_all_venues**:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Bakery 296\n",
"Bar 259\n",
"Brazilian Restaurant 230\n",
"Gym / Fitness Center 193\n",
"Burger Joint 165\n",
" ... \n",
"Fish Market 1\n",
"Speakeasy 1\n",
"Travel Agency 1\n",
"Design Studio 1\n",
"Butcher 1\n",
"Name: Venue Category, Length: 272, dtype: int64"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bh_all_venues['Venue Category'].value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looks like we are ready now to prepare our dataset to the classification algorithm.\n",
"\n",
"Now we do one hot encoding and drop columns that are not features or target.\n",
"\n",
"Then we split training set with test set and build KNN, SVM and Logistic regression models.\n",
"\n",
"The target (y) will be tested in the following formats:\n",
"\n",
"* the actual class\n",
"* if the class == 'luxury'\n",
"* if the class == 'high'\n",
"* if the class == 'regular'\n",
"* if the class == 'low'\n",
"* if the class == 'high' or 'luxury'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4. Results"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As mentioned before, we built KNN, SVM and Logistic regression models, but we will show only the results obtained by Logistic regression, because it gets the better scores (jaccard index score)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.1 All venue categories dataset scores"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* the actual class: 0.6666\n",
"* if the class == 'luxury': **0.9**\n",
"* if the class == 'high': 0.8666\n",
"* if the class == 'regular': 0.3333\n",
"* if the class == 'low': **0.9**\n",
"* if the class == 'high' or 'luxury': 0.7666"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.2 Food venue categories dataset scores"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* the actual class: 0.6923\n",
"* if the class == 'luxury': 0.8\n",
"* if the class == 'high': **0.96**\n",
"* if the class == 'regular': 0.3076\n",
"* if the class == 'low': **0.923**\n",
"* if the class == 'high' or 'luxury': 0.7692"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.3 Professional venue categories dataset scores"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* the actual class: 0.5714\n",
"* if the class == 'luxury': 0.8571\n",
"* if the class == 'high': 0.8928\n",
"* if the class == 'regular': 0.4286\n",
"* if the class == 'low': 0.8214\n",
"* if the class == 'high' or 'luxury': 0.75"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5. Discussion"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It's interesting to see that the food venue categories dataset got the best overall results but closely followed by the all categories which indicates that may be possible to combine two or more categories to get optimistic scores, as it's clear that there are categories that disturbs the score (see the professional venue categories dataset). \n",
"\n",
"Besides that, it's also interesting to see that the model built with foods venues categories dataset can predict the 'high' and 'low' class remarkably well, and definately could be used in a different city, similar to 'Belo Horizonte'. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 6. Conclusion"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Even though we couldn't get a great model to predict the actual class of a Neighborhood, we could get interesting results on predicting the 'high' and 'low' classes using the Food categories dataset, and predicting 'luxury' and 'low' casses using the All categories dataset."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python",
"language": "python",
"name": "conda-env-python-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment