Skip to content

Instantly share code, notes, and snippets.

@QuantumDamage
Created January 6, 2019 11:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save QuantumDamage/1a60f0560a44e9baea5c1e0423080bcb to your computer and use it in GitHub Desktop.
Save QuantumDamage/1a60f0560a44e9baea5c1e0423080bcb to your computer and use it in GitHub Desktop.
Analiza skupień na przykładzie algorytmu k-średnich
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {
"trusted": true,
"scrolled": true
},
"cell_type": "code",
"source": "# Kod 1\n\nimport pandas as pd\n\nznaczki = pd.read_excel(\"../input/wykaz-zt-polski.xls\", skiprows = 4)\n\nznaczki.rename(columns={\"GPS\":\"lat\", \"Unnamed: 5\":\"lon\"}, inplace=True)\n\nznaczki[\"lat\"] = znaczki[\"lat\"].astype(float)\nznaczki[\"lon\"] = znaczki[\"lon\"].astype(float)",
"execution_count": 1,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# Kod 2\n\nfrom sklearn.cluster import KMeans\n\nn_clusters = 12\n\nkmeans = KMeans(n_clusters = n_clusters, random_state = 42)\n\ncoordinates = znaczki[[\"lat\", \"lon\"]]\n\nkmeans.fit(coordinates)\n\nznaczki[\"grupa\"] = kmeans.labels_\n\nznaczki.head()",
"execution_count": 2,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 2,
"data": {
"text/plain": " LP. Numer znaczka Nazwa znaczka \\\n0 1 No. 001 Rysy – najwyższy szczyt polskich Tatr \n1 2 No. 002 Schronisko \"Murowaniec\" na Hali Gąsienicowej \n2 3 No. 003 Babia Góra – najwyższy szczyt Beskidu Żywieckiego \n3 4 No. 004 Schronisko Morskie Oko \n4 5 No. 005 Schronisko Głodówka \n\n Województwo lat lon grupa \n0 małopolskie 49.179628 20.087987 1 \n1 małopolskie 49.244167 20.007222 1 \n2 małopolskie 49.573055 19.529444 4 \n3 małopolskie 49.201378 20.071276 1 \n4 małopolskie 49.302124 20.116664 1 ",
"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>LP.</th>\n <th>Numer znaczka</th>\n <th>Nazwa znaczka</th>\n <th>Województwo</th>\n <th>lat</th>\n <th>lon</th>\n <th>grupa</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1</td>\n <td>No. 001</td>\n <td>Rysy – najwyższy szczyt polskich Tatr</td>\n <td>małopolskie</td>\n <td>49.179628</td>\n <td>20.087987</td>\n <td>1</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2</td>\n <td>No. 002</td>\n <td>Schronisko \"Murowaniec\" na Hali Gąsienicowej</td>\n <td>małopolskie</td>\n <td>49.244167</td>\n <td>20.007222</td>\n <td>1</td>\n </tr>\n <tr>\n <th>2</th>\n <td>3</td>\n <td>No. 003</td>\n <td>Babia Góra – najwyższy szczyt Beskidu Żywieckiego</td>\n <td>małopolskie</td>\n <td>49.573055</td>\n <td>19.529444</td>\n <td>4</td>\n </tr>\n <tr>\n <th>3</th>\n <td>4</td>\n <td>No. 004</td>\n <td>Schronisko Morskie Oko</td>\n <td>małopolskie</td>\n <td>49.201378</td>\n <td>20.071276</td>\n <td>1</td>\n </tr>\n <tr>\n <th>4</th>\n <td>5</td>\n <td>No. 005</td>\n <td>Schronisko Głodówka</td>\n <td>małopolskie</td>\n <td>49.302124</td>\n <td>20.116664</td>\n <td>1</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import folium\nimport folium.plugins",
"execution_count": 3,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "colours = ['red', 'blue', 'green', 'purple', 'orange', 'darkred',\n 'lightred', 'beige', 'darkblue', 'darkgreen', 'cadetblue',\n 'darkpurple', 'white', 'pink', 'lightblue', 'lightgreen',\n 'gray', 'black', 'lightgray']",
"execution_count": 4,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "lat_max = coordinates[\"lat\"].max()\nlat_min = coordinates[\"lat\"].min()\nlon_max = coordinates[\"lon\"].max()\nlon_min = coordinates[\"lon\"].min()\n\nboulder_coords = [lat_min + (lat_max - lat_min)/2, lon_min + (lon_max - lon_min)/2]\n\nmy_map = folium.Map(location = boulder_coords)\nmy_map_int = folium.Map(location = boulder_coords)\n\nmy_map.fit_bounds(bounds=[(lat_min, lon_min), (lat_max, lon_max)])\nmy_map_int.fit_bounds(bounds=[(lat_min, lon_min), (lat_max, lon_max)])",
"execution_count": 5,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "from geopy.geocoders import Nominatim\nfrom geopy.exc import GeocoderTimedOut\ngeolocator = Nominatim(user_agent=\"jakbadacdane.pl\")",
"execution_count": 6,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "feature_groups = []\nfor feature_group in range(n_clusters):\n coords_tmp = kmeans.cluster_centers_[feature_group]\n location = geolocator.reverse(\"{}, {}\".format(coords_tmp[0],coords_tmp[1]), timeout = 64)\n feature_groups.append(folium.FeatureGroup(name=str(location)))",
"execution_count": 7,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "marker_groups = []\nfor cluster in range(n_clusters):\n punkty = znaczki[znaczki[\"grupa\"] == cluster]\n color = colours[cluster]\n print(cluster, len(punkty), color)\n \n marker_groups.append(folium.plugins.MarkerCluster())\n \n for index,punkt in punkty.iterrows():\n first_marker = folium.Marker([punkt[\"lat\"], punkt[\"lon\"]], \n icon=folium.Icon(color=color), \n popup= punkt[\"Numer znaczka\"]+ \" \" + punkt[\"Nazwa znaczka\"])\n \n second_marker = folium.Marker([punkt[\"lat\"], punkt[\"lon\"]], \n icon=folium.Icon(color=color), \n popup= punkt[\"Numer znaczka\"]+ \" \" + punkt[\"Nazwa znaczka\"])\n \n first_marker.add_to(marker_groups[cluster])\n \n second_marker.add_to(my_map)\n \n marker_groups[cluster].add_to(feature_groups[cluster])",
"execution_count": 8,
"outputs": [
{
"output_type": "stream",
"text": "0 46 red\n1 67 blue\n2 92 green\n3 47 purple\n4 110 orange\n5 121 darkred\n6 95 lightred\n7 30 beige\n8 39 darkblue\n9 37 darkgreen\n10 34 cadetblue\n11 30 darkpurple\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "my_map",
"execution_count": 9,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 9,
"data": {
"text/plain": "<folium.folium.Map at 0x7f1c76646400>",
"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+ICNtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNiA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbNTEuOTQyMzIxNSwxOS4wMzk3MzNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyczogW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciB0aWxlX2xheWVyXzNhNTI2MDNiMDczMjRiZWViMWE4Njg5MTAwZjQ4ZjQzID0gTC50aWxlTGF5ZXIoCiAgICAgICAgICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgICAgICAgICAgewogICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICJtYXhab29tIjogMTgsCiAgIm1pblpvb20iOiAxLAogICJub1dyYXAiOiBmYWxzZSwKICAic3ViZG9tYWlucyI6ICJhYmMiCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAKICAgIAogICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgbWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2LmZpdEJvdW5kcygKICAgICAgICAgICAgICAgICAgICBbWzQ5LjA4Nzk5MywgMTQuMjgzNjYyXSwgWzU0Ljc5NjY1LCAyMy43OTU4MDRdXSwKICAgICAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzMyZDZhNzAzMDkwZDQ5ZjdiYjYzMjgyYzMzZjZlYTkyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMDg0NzksMTguMTYxMTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNDRjNmM5ODVkMjgwNGVlYTkzZDdlNzUwZDcyOTJjMzcgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zMmQ2YTcwMzA5MGQ0OWY3YmI2MzI4MmMzM2Y2ZWE5Mi5zZXRJY29uKGljb25fNDRjNmM5ODVkMjgwNGVlYTkzZDdlNzUwZDcyOTJjMzcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjJmNDRmNDhjYTc1NGNlN2IxMTI0ZjY0MTlmZGVhNWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDI4OTA3NDE0YTMyNDViZjg2NTY4OGExMTIyZjk0MDIgPSAkKCc8ZGl2IGlkPSJodG1sX2QyODkwNzQxNGEzMjQ1YmY4NjU2ODhhMTEyMmY5NDAyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTY3IEdyw7NkIFJ5Y2Vyc2tpIHcgQnljenluaWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYyZjQ0ZjQ4Y2E3NTRjZTdiMTEyNGY2NDE5ZmRlYTVjLnNldENvbnRlbnQoaHRtbF9kMjg5MDc0MTRhMzI0NWJmODY1Njg4YTExMjJmOTQwMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzMyZDZhNzAzMDkwZDQ5ZjdiYjYzMjgyYzMzZjZlYTkyLmJpbmRQb3B1cChwb3B1cF82MmY0NGY0OGNhNzU0Y2U3YjExMjRmNjQxOWZkZWE1Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NjgyYzZmOGM3YzI0Y2ZmYjhkNjk0NGY3ZDkyZmY5YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjIyMDQ1MSwxOC41NzI4NzldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzM1Nzg1ZmJkNWQ5NGYwMDhhZjQ0M2E1MzBkNGQ0N2YgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82NjgyYzZmOGM3YzI0Y2ZmYjhkNjk0NGY3ZDkyZmY5Yi5zZXRJY29uKGljb25fYzM1Nzg1ZmJkNWQ5NGYwMDhhZjQ0M2E1MzBkNGQ0N2YpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWI5MjI5ZmMzNjQyNDUwNzhiYTliNTE1MzkwNzVlNmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTc2ZTQzN2NhN2QxNGZmNzg3MjIyM2Y5NzBiMjhhNWMgPSAkKCc8ZGl2IGlkPSJodG1sXzE3NmU0MzdjYTdkMTRmZjc4NzIyMjNmOTcwYjI4YTVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTY5IFJhdHVzeiBpIEJyYW1hIEtyYWtvd3NrYSB3IFdpZWx1bml1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYjkyMjlmYzM2NDI0NTA3OGJhOWI1MTUzOTA3NWU2Zi5zZXRDb250ZW50KGh0bWxfMTc2ZTQzN2NhN2QxNGZmNzg3MjIyM2Y5NzBiMjhhNWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NjgyYzZmOGM3YzI0Y2ZmYjhkNjk0NGY3ZDkyZmY5Yi5iaW5kUG9wdXAocG9wdXBfMWI5MjI5ZmMzNjQyNDUwNzhiYTliNTE1MzkwNzVlNmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmY5OWVkMzE4N2FkNGJkM2FiOWY2OWRkZjE5ZTI0MDggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4wNTkwODQsMTkuMjAzNTkyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2RhMTczNDQxYjk2MjQ2YmVhNTFiMTc0NjU2NTBiMWU1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYmY5OWVkMzE4N2FkNGJkM2FiOWY2OWRkZjE5ZTI0MDguc2V0SWNvbihpY29uX2RhMTczNDQxYjk2MjQ2YmVhNTFiMTc0NjU2NTBiMWU1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4ZGNmNTQxNmFmYTRjYWFhNDcyODllYWZmZTFmMGU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M2Mzk0ZmVjZWFhYzQzNmJhYzVlZWNhNjA4NmJlNjFhID0gJCgnPGRpdiBpZD0iaHRtbF9jNjM5NGZlY2VhYWM0MzZiYWM1ZWVjYTYwODZiZTYxYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDIwMiBaYW1layBLcsOzbGV3c2tpIHcgxYHEmWN6eWN5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83OGRjZjU0MTZhZmE0Y2FhYTQ3Mjg5ZWFmZmUxZjBlNi5zZXRDb250ZW50KGh0bWxfYzYzOTRmZWNlYWFjNDM2YmFjNWVlY2E2MDg2YmU2MWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iZjk5ZWQzMTg3YWQ0YmQzYWI5ZjY5ZGRmMTllMjQwOC5iaW5kUG9wdXAocG9wdXBfNzhkY2Y1NDE2YWZhNGNhYWE0NzI4OWVhZmZlMWYwZTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWI2NTNmNTMyOGE5NDZmYjg4OTVmODJkM2E3YWQyYzAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS45Njg3ODcsMTguNzkwNjE1Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iOTRlMmQwNWNjMjc0YjcwOTc4MWQ4MTJkOTE2ODYzYyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzViNjUzZjUzMjhhOTQ2ZmI4ODk1ZjgyZDNhN2FkMmMwLnNldEljb24oaWNvbl9iOTRlMmQwNWNjMjc0YjcwOTc4MWQ4MTJkOTE2ODYzYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNDVkMDhmZjZjZTE0OGIyOGZmNmY5OGMyMjRiMTNmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOWNiOGJkNWYzMmQ0MTg5YjI1YWVlODBjZDU0NDY0OSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDljYjhiZDVmMzJkNDE4OWIyNWFlZTgwY2Q1NDQ2NDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyMjAgS2FzenRlbCBSeWNlcnNraSBuYSBHb3LEhWN5Y2ggxblyw7NkxYJhY2ggPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNDVkMDhmZjZjZTE0OGIyOGZmNmY5OGMyMjRiMTNmNy5zZXRDb250ZW50KGh0bWxfZDljYjhiZDVmMzJkNDE4OWIyNWFlZTgwY2Q1NDQ2NDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81YjY1M2Y1MzI4YTk0NmZiODg5NWY4MmQzYTdhZDJjMC5iaW5kUG9wdXAocG9wdXBfMjQ1ZDA4ZmY2Y2UxNDhiMjhmZjZmOThjMjI0YjEzZjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGVhN2JjNjI1MjYxNDEyZWJlYWVkMWM0MWZjY2Y4OGMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS45NzMwNywxOC43ODg4ODVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fODMwYzBiMzU3MGZkNDNlY2E4NzY5MDYwM2EyMzg3ZWQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wZWE3YmM2MjUyNjE0MTJlYmVhZWQxYzQxZmNjZjg4Yy5zZXRJY29uKGljb25fODMwYzBiMzU3MGZkNDNlY2E4NzY5MDYwM2EyMzg3ZWQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTdhOGM0ODEzNDk1NDBiNDk3YjA5NGExYTQ3NTk1ZjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTQwYTc5OTdlNzViNGRmYjgyMzk4MDI2ODcxZmRkMmIgPSAkKCc8ZGl2IGlkPSJodG1sXzE0MGE3OTk3ZTc1YjRkZmI4MjM5ODAyNjg3MWZkZDJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjIyIFphbWVrIEFyY3liaXNrdXDDs3cgdyBVbmllam93aWUgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hN2E4YzQ4MTM0OTU0MGI0OTdiMDk0YTFhNDc1OTVmMi5zZXRDb250ZW50KGh0bWxfMTQwYTc5OTdlNzViNGRmYjgyMzk4MDI2ODcxZmRkMmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wZWE3YmM2MjUyNjE0MTJlYmVhZWQxYzQxZmNjZjg4Yy5iaW5kUG9wdXAocG9wdXBfYTdhOGM0ODEzNDk1NDBiNDk3YjA5NGExYTQ3NTk1ZjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDFhZTQxYzcyY2ViNDdkZDkwOGM2ODM2ZGI2MGUwOGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4wNjAwNTEsMTkuMjI5Nzk0MDAwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzc2MmFlNTRhNjU4ODQ2MzhhZTA5MTBmNTM3YTIwOWM1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZDFhZTQxYzcyY2ViNDdkZDkwOGM2ODM2ZGI2MGUwOGIuc2V0SWNvbihpY29uXzc2MmFlNTRhNjU4ODQ2MzhhZTA5MTBmNTM3YTIwOWM1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk4NWNiYzQ2YzYxNzQ4N2M5MjM3Y2ZiNzgyODc1NTMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5NzhhNjM1OTY0NDQ1MTFhZmZkZmU0ZDBlYjE4OGEzID0gJCgnPGRpdiBpZD0iaHRtbF9kOTc4YTYzNTk2NDQ0NTExYWZmZGZlNGQwZWIxODhhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDIyNSDFgcSZY3p5Y2thIFphZ3JvZGEgQ2jFgm9wc2thIHcgS3dpYXRrw7N3a3U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk4NWNiYzQ2YzYxNzQ4N2M5MjM3Y2ZiNzgyODc1NTMxLnNldENvbnRlbnQoaHRtbF9kOTc4YTYzNTk2NDQ0NTExYWZmZGZlNGQwZWIxODhhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QxYWU0MWM3MmNlYjQ3ZGQ5MDhjNjgzNmRiNjBlMDhiLmJpbmRQb3B1cChwb3B1cF85ODVjYmM0NmM2MTc0ODdjOTIzN2NmYjc4Mjg3NTUzMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kMDY4ZTcxZmEyNjE0Y2U1YWRiMWJhNjYyZTUzOWIyZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjA1NjQ5NiwxOS4yMzI2NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jZmRmMjQ4MWI4Zjc0OTRkYWMyOWVhNzg1ZjJiMDgzZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2QwNjhlNzFmYTI2MTRjZTVhZGIxYmE2NjJlNTM5YjJlLnNldEljb24oaWNvbl9jZmRmMjQ4MWI4Zjc0OTRkYWMyOWVhNzg1ZjJiMDgzZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YWFjOTQzN2I2ZTc0MGI1YjcyZTYyZThkYzM2YzU1MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZDU2OTJiY2YwOTU0MDNkYmZmNGE4OGQ3YTBjOTllMSA9ICQoJzxkaXYgaWQ9Imh0bWxfOGQ1NjkyYmNmMDk1NDAzZGJmZjRhODhkN2EwYzk5ZTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyMzEgQXJjaGlrb2xlZ2lhdGEgTk1QIEtyw7Nsb3dlaiBpIMWbdy4gQWxla3NlZ28gdyBUdW1pZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmFhYzk0MzdiNmU3NDBiNWI3MmU2MmU4ZGMzNmM1NTIuc2V0Q29udGVudChodG1sXzhkNTY5MmJjZjA5NTQwM2RiZmY0YTg4ZDdhMGM5OWUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDA2OGU3MWZhMjYxNGNlNWFkYjFiYTY2MmU1MzliMmUuYmluZFBvcHVwKHBvcHVwXzZhYWM5NDM3YjZlNzQwYjViNzJlNjJlOGRjMzZjNTUyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzViYTNlMGY5YmFkMTQ4MDViZGY0ZjczMTY1MWY0OGJlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMjIwMTc3LDE4LjU2NzQxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzc3YjFjNmEyZjA2ZTQ5N2Q4YTVhNDRjYmE0N2Y0NWYzID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNWJhM2UwZjliYWQxNDgwNWJkZjRmNzMxNjUxZjQ4YmUuc2V0SWNvbihpY29uXzc3YjFjNmEyZjA2ZTQ5N2Q4YTVhNDRjYmE0N2Y0NWYzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3MWE3Yzg1NjZjYTQ1NjViN2YzNzdmMTEyOTAyM2RhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI5NzAzNGM2ZjE5ODRjYjZhMzA5NjAzZGM4YzcxYzJlID0gJCgnPGRpdiBpZD0iaHRtbF8yOTcwMzRjNmYxOTg0Y2I2YTMwOTYwM2RjOGM3MWMyZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI0NSBNdXpldW0gWmllbWkgV2llbHXFhHNraWVqIHcgV2llbHVuaXU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3MWE3Yzg1NjZjYTQ1NjViN2YzNzdmMTEyOTAyM2RhLnNldENvbnRlbnQoaHRtbF8yOTcwMzRjNmYxOTg0Y2I2YTMwOTYwM2RjOGM3MWMyZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzViYTNlMGY5YmFkMTQ4MDViZGY0ZjczMTY1MWY0OGJlLmJpbmRQb3B1cChwb3B1cF9jNzFhN2M4NTY2Y2E0NTY1YjdmMzc3ZjExMjkwMjNkYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82Yzc2NzJiMWMxYmI0Zjk5YTc1OGU4M2FkMWFlNTQzNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjEzODY2OCwxOC41MTQzMzldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMTE2ZjkwZWFkNmViNDQ2MWI4MmZjNzcyM2NkM2U2ZGQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82Yzc2NzJiMWMxYmI0Zjk5YTc1OGU4M2FkMWFlNTQzNS5zZXRJY29uKGljb25fMTE2ZjkwZWFkNmViNDQ2MWI4MmZjNzcyM2NkM2U2ZGQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjQ1ZmNkNmI4NDI0NGM1ZTk0MzYyYmE5ZGZmNDNiZTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzgyZmNmM2IxZDc5NGFmMmIzMDNkMDk3MGFiZTRlYzQgPSAkKCc8ZGl2IGlkPSJodG1sXzM4MmZjZjNiMWQ3OTRhZjJiMzAzZDA5NzBhYmU0ZWM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjQ2IE11emV1bSBXbsSZdHJ6IER3b3Jza2ljaCB3IE/FvGFyb3dpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjQ1ZmNkNmI4NDI0NGM1ZTk0MzYyYmE5ZGZmNDNiZTUuc2V0Q29udGVudChodG1sXzM4MmZjZjNiMWQ3OTRhZjJiMzAzZDA5NzBhYmU0ZWM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmM3NjcyYjFjMWJiNGY5OWE3NThlODNhZDFhZTU0MzUuYmluZFBvcHVwKHBvcHVwX2Y0NWZjZDZiODQyNDRjNWU5NDM2MmJhOWRmZjQzYmU1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzYyODViNDM5NGRmODRkZDM4MmFjOWY3NjI0OGUzYjlmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNzYwODM4LDE4LjE3MTcyOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hZjg5NDcyYmU0OGM0NmNlOTI2NDI4YjcwMjYxYTlmNCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzYyODViNDM5NGRmODRkZDM4MmFjOWY3NjI0OGUzYjlmLnNldEljb24oaWNvbl9hZjg5NDcyYmU0OGM0NmNlOTI2NDI4YjcwMjYxYTlmNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZTVjN2E2NTAxNWY0YWMzOTQzYThmMTA3MTA5NzA0YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZjMzZmMwYzhmNjc0OWRjODkyM2Y5YjAxMDM0YjlhNSA9ICQoJzxkaXYgaWQ9Imh0bWxfOWYzM2ZjMGM4ZjY3NDlkYzg5MjNmOWIwMTAzNGI5YTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyNDcgUGHFgmFjIFTFgm9raW5pYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGU1YzdhNjUwMTVmNGFjMzk0M2E4ZjEwNzEwOTcwNGIuc2V0Q29udGVudChodG1sXzlmMzNmYzBjOGY2NzQ5ZGM4OTIzZjliMDEwMzRiOWE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjI4NWI0Mzk0ZGY4NGRkMzgyYWM5Zjc2MjQ4ZTNiOWYuYmluZFBvcHVwKHBvcHVwXzhlNWM3YTY1MDE1ZjRhYzM5NDNhOGYxMDcxMDk3MDRiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzkwNDFiMGIzMjFiZTRmNmM5ODZhMTE0Nzg5N2JmNDFkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMzI1ODgzLDE3LjU2NDY3OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iMjRjNzg3OThiOWY0OTUwYjVlMmQxOGE2ZTM5ZWNiMSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzkwNDFiMGIzMjFiZTRmNmM5ODZhMTE0Nzg5N2JmNDFkLnNldEljb24oaWNvbl9iMjRjNzg3OThiOWY0OTUwYjVlMmQxOGE2ZTM5ZWNiMSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZWIzNjMxZjgyNjY0OWZhODI5MTJhNDU4NmZhYWI0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MjkzMWEwZDQ1M2M0ZjQyOTY3YWFlZTA5NjQzZWFjYyA9ICQoJzxkaXYgaWQ9Imh0bWxfOTI5MzFhMGQ0NTNjNGY0Mjk2N2FhZWUwOTY0M2VhY2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyNzYgTXV6ZXVtIFJlZ2lvbmFsbmUgaW0uIER6aWVjaSBXcnplc2nFhHNraWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZWIzNjMxZjgyNjY0OWZhODI5MTJhNDU4NmZhYWI0Ni5zZXRDb250ZW50KGh0bWxfOTI5MzFhMGQ0NTNjNGY0Mjk2N2FhZWUwOTY0M2VhY2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MDQxYjBiMzIxYmU0ZjZjOTg2YTExNDc4OTdiZjQxZC5iaW5kUG9wdXAocG9wdXBfMmViMzYzMWY4MjY2NDlmYTgyOTEyYTQ1ODZmYWFiNDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOThmMmU4NDZkZGQwNDczY2IxOTk4MmFlOGYzNTY0YjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi43ODU3NSwxNy43NDYxMTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fODUwYWZmZjM3NmQzNGFjNzk0MmFmMjA0YmU1MGEyZjEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85OGYyZTg0NmRkZDA0NzNjYjE5OTgyYWU4ZjM1NjRiOC5zZXRJY29uKGljb25fODUwYWZmZjM3NmQzNGFjNzk0MmFmMjA0YmU1MGEyZjEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjQwNGQ2MmRkMGEyNGVhNWE5MWY1YjMxMDYxMzViZTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2JmMjNlNTg5OWYwNDg3ODhhODU5YTE1M2MyYjA5MjkgPSAkKCc8ZGl2IGlkPSJodG1sXzNiZjIzZTU4OTlmMDQ4Nzg4YTg1OWExNTNjMmIwOTI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjgwIE11emV1bSBBcmNoZW9sb2dpY3puZSB3IEJpc2t1cGluaWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI0MDRkNjJkZDBhMjRlYTVhOTFmNWIzMTA2MTM1YmUyLnNldENvbnRlbnQoaHRtbF8zYmYyM2U1ODk5ZjA0ODc4OGE4NTlhMTUzYzJiMDkyOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk4ZjJlODQ2ZGRkMDQ3M2NiMTk5ODJhZThmMzU2NGI4LmJpbmRQb3B1cChwb3B1cF8yNDA0ZDYyZGQwYTI0ZWE1YTkxZjViMzEwNjEzNWJlMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MTExNTNjNzk1MWM0MjFhYjJjODVhYzU4YjM1N2UxOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjE2NjE0OCwxNy42OTAxNDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMDFiZTQ0OGUzZjRmNDlhYmI5MzRkNzgwMzBiYmYzMmQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80MTExNTNjNzk1MWM0MjFhYjJjODVhYzU4YjM1N2UxOS5zZXRJY29uKGljb25fMDFiZTQ0OGUzZjRmNDlhYmI5MzRkNzgwMzBiYmYzMmQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWIwMTg4NTA0ZDI2NDY1ZWFjZjhmMmQ2ODRmNmZkZjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGFiNzRmYjkyMjg3NDRmZWFjZWYwZDc0NjVmZDY3YTggPSAkKCc8ZGl2IGlkPSJodG1sXzRhYjc0ZmI5MjI4NzQ0ZmVhY2VmMGQ3NDY1ZmQ2N2E4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjgxIE11emV1bSBaaWVtaSBQeXpkcnNraWVqIHcgUHl6ZHJhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FiMDE4ODUwNGQyNjQ2NWVhY2Y4ZjJkNjg0ZjZmZGYxLnNldENvbnRlbnQoaHRtbF80YWI3NGZiOTIyODc0NGZlYWNlZjBkNzQ2NWZkNjdhOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQxMTE1M2M3OTUxYzQyMWFiMmM4NWFjNThiMzU3ZTE5LmJpbmRQb3B1cChwb3B1cF9hYjAxODg1MDRkMjY0NjVlYWNmOGYyZDY4NGY2ZmRmMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84ZjY2OGMyYjJhNWQ0OTM4YjhjNGNiNWJlNzI3YzI0NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjQwOTA2OSwxOC44NzUxM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82ZGIyY2Q5NzZlNzc0ZGEyYWZiMzliZjA2MDdlZDRiOCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzhmNjY4YzJiMmE1ZDQ5MzhiOGM0Y2I1YmU3MjdjMjQ2LnNldEljb24oaWNvbl82ZGIyY2Q5NzZlNzc0ZGEyYWZiMzliZjA2MDdlZDRiOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wM2E0YTI0NjA0NjQ0MDBkODMxNjg2MjIzZGZkMDZmNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYTQ1NjQwZWZhNzk0ODI4YjUzNjE5NDM4ZjFhZjBjMCA9ICQoJzxkaXYgaWQ9Imh0bWxfYWE0NTY0MGVmYTc5NDgyOGI1MzYxOTQzOGYxYWYwYzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyOTQgUGFyayBLdWx0dXJvd3kgV2lldHJ6eWNob3dpY2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzYTRhMjQ2MDQ2NDQwMGQ4MzE2ODYyMjNkZmQwNmY1LnNldENvbnRlbnQoaHRtbF9hYTQ1NjQwZWZhNzk0ODI4YjUzNjE5NDM4ZjFhZjBjMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhmNjY4YzJiMmE1ZDQ5MzhiOGM0Y2I1YmU3MjdjMjQ2LmJpbmRQb3B1cChwb3B1cF8wM2E0YTI0NjA0NjQ0MDBkODMxNjg2MjIzZGZkMDZmNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kOTFlZTliMjFkMDY0NDdkYTJhNjgzZTZmZDkyZjA1OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjYzMDI5NywxOC4xNzk1NjZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMmQ2YWUyMGNkODY3NDQ2MmJjYWUzNTExNzFhZTVlMDYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kOTFlZTliMjFkMDY0NDdkYTJhNjgzZTZmZDkyZjA1OC5zZXRJY29uKGljb25fMmQ2YWUyMGNkODY3NDQ2MmJjYWUzNTExNzFhZTVlMDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzg2YmM5MzhmYjEwNDI0ZmJjNTEyZWEwYjViYWY5YWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjJiOWVmYTNmODZiNDdhODkwNTgxYzg0YTc3Y2RhMmQgPSAkKCc8ZGl2IGlkPSJodG1sXzIyYjllZmEzZjg2YjQ3YTg5MDU4MWM4NGE3N2NkYTJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjk1IFJvdHVuZGEgxZp3LiBQcm9rb3BhIHcgU3RyemVsbmllPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jODZiYzkzOGZiMTA0MjRmYmM1MTJlYTBiNWJhZjlhZi5zZXRDb250ZW50KGh0bWxfMjJiOWVmYTNmODZiNDdhODkwNTgxYzg0YTc3Y2RhMmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kOTFlZTliMjFkMDY0NDdkYTJhNjgzZTZmZDkyZjA1OC5iaW5kUG9wdXAocG9wdXBfYzg2YmM5MzhmYjEwNDI0ZmJjNTEyZWEwYjViYWY5YWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTYzOGFkYWVlODE0NDExOWIxYWRhZGQ1MDU2NmMxOGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi42Mjk4MzIsMTguMTc5ODM4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzI5NzU2YWYxYjhmODQyNGFiNTRlOTQxODQxOWNiNGQ3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNTYzOGFkYWVlODE0NDExOWIxYWRhZGQ1MDU2NmMxOGQuc2V0SWNvbihpY29uXzI5NzU2YWYxYjhmODQyNGFiNTRlOTQxODQxOWNiNGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NhNTUyMmM4NGNkYTQ2MjM5NTk1YzNiNDFhZDk0ZjA4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA5MDU1N2MxMDgzZTQzZWI5YzZkOWUwZDQ4MzI5NDhlID0gJCgnPGRpdiBpZD0iaHRtbF8wOTA1NTdjMTA4M2U0M2ViOWM2ZDllMGQ0ODMyOTQ4ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI5NiBCYXp5bGlrYSDFmncuIFRyw7NqY3kgdyBTdHJ6ZWxuaWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NhNTUyMmM4NGNkYTQ2MjM5NTk1YzNiNDFhZDk0ZjA4LnNldENvbnRlbnQoaHRtbF8wOTA1NTdjMTA4M2U0M2ViOWM2ZDllMGQ0ODMyOTQ4ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU2MzhhZGFlZTgxNDQxMTliMWFkYWRkNTA1NjZjMThkLmJpbmRQb3B1cChwb3B1cF9jYTU1MjJjODRjZGE0NjIzOTU5NWMzYjQxYWQ5NGYwOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MTViMDg2MGZhN2E0ZGU3YTBlZTQ0MDM0MWU5NGEzMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjc1NzY1NywxOC4wODM2NDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZTE5NTNkZTcxYjYyNGMzNmFkNjkyNjdkY2ZhYzZhMzMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80MTViMDg2MGZhN2E0ZGU3YTBlZTQ0MDM0MWU5NGEzMi5zZXRJY29uKGljb25fZTE5NTNkZTcxYjYyNGMzNmFkNjkyNjdkY2ZhYzZhMzMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWNiNWVhMWFiOGI0NDJlMmFlNGI5MjVkMzE4NjEyYTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzZkNmFmYWI5Yjg0NGQ0Nzg5OWEyOTMzNjA4NjRiZjggPSAkKCc8ZGl2IGlkPSJodG1sXzc2ZDZhZmFiOWI4NDRkNDc4OTlhMjkzMzYwODY0YmY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzM5IFJvZ2F0a2Egd3JvY8WCYXdza2EgdyBLYWxpc3p1IDE4Mjggci48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FjYjVlYTFhYjhiNDQyZTJhZTRiOTI1ZDMxODYxMmE0LnNldENvbnRlbnQoaHRtbF83NmQ2YWZhYjliODQ0ZDQ3ODk5YTI5MzM2MDg2NGJmOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQxNWIwODYwZmE3YTRkZTdhMGVlNDQwMzQxZTk0YTMyLmJpbmRQb3B1cChwb3B1cF9hY2I1ZWExYWI4YjQ0MmUyYWU0YjkyNWQzMTg2MTJhNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yOWIzZTcyYWJlNjU0NmI2OTUyYjgyYzNmNGIyNmU1OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjc2MDczOSwxOC4wODIyMDddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMmUxMGVjMGRhMGVjNDliYjkzMTVjM2UxZDEyOThhMzMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yOWIzZTcyYWJlNjU0NmI2OTUyYjgyYzNmNGIyNmU1OC5zZXRJY29uKGljb25fMmUxMGVjMGRhMGVjNDliYjkzMTVjM2UxZDEyOThhMzMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODBhM2MxYjgyMzQ5NGQ4ODhkMTdkY2FlYjIzZWZhYjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjgyMjQyMzRmOTFjNDBiZDhiNDcwNWZiYWYwYjZhNWMgPSAkKCc8ZGl2IGlkPSJodG1sXzY4MjI0MjM0ZjkxYzQwYmQ4YjQ3MDVmYmFmMGI2YTVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzQwIE11emV1bSBPa3LEmWdvd2UgWmllbWkgS2FsaXNraWVqIHcgS2FsaXN6dTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODBhM2MxYjgyMzQ5NGQ4ODhkMTdkY2FlYjIzZWZhYjIuc2V0Q29udGVudChodG1sXzY4MjI0MjM0ZjkxYzQwYmQ4YjQ3MDVmYmFmMGI2YTVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjliM2U3MmFiZTY1NDZiNjk1MmI4MmMzZjRiMjZlNTguYmluZFBvcHVwKHBvcHVwXzgwYTNjMWI4MjM0OTRkODg4ZDE3ZGNhZWIyM2VmYWIyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc1MzAyNmFiMjcyZTRiM2U5YzkzM2Y5ZDQzNmI4OTQwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNzQ2NTQzLDE4LjEwMjQyM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jZjEwNjQ3MTIwZDk0MTAyYTliOTA3ODU4Y2U4ZWFhMyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzc1MzAyNmFiMjcyZTRiM2U5YzkzM2Y5ZDQzNmI4OTQwLnNldEljb24oaWNvbl9jZjEwNjQ3MTIwZDk0MTAyYTliOTA3ODU4Y2U4ZWFhMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYTQ0MDU1YjhmYzQ0NGZhODU5OGQ0MjM4ZmMwYjk1MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MmVjYTMxZDZiMmI0NzQzYWJmMmI0YzA3MjA3MDM0YyA9ICQoJzxkaXYgaWQ9Imh0bWxfNjJlY2EzMWQ2YjJiNDc0M2FiZjJiNGMwNzIwNzAzNGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzNDEgUmV6ZXJ3YXQgQXJjaGVvbG9naWN6bnkgdyBLYWxpc3p1IC0gWmF3b2R6aXU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJhNDQwNTViOGZjNDQ0ZmE4NTk4ZDQyMzhmYzBiOTUzLnNldENvbnRlbnQoaHRtbF82MmVjYTMxZDZiMmI0NzQzYWJmMmI0YzA3MjA3MDM0Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc1MzAyNmFiMjcyZTRiM2U5YzkzM2Y5ZDQzNmI4OTQwLmJpbmRQb3B1cChwb3B1cF8yYTQ0MDU1YjhmYzQ0NGZhODU5OGQ0MjM4ZmMwYjk1Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iNjI3ZDk3ZWI5Y2Q0NzVlOWY2ZGU5NWU0YTg5MjEyYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjc2MjE4OSwxOC4wOTIyOThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNzg3MDU4ZDhiZTNhNGJhZDg3MjZmMWNiZTE1MGFmZDcgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iNjI3ZDk3ZWI5Y2Q0NzVlOWY2ZGU5NWU0YTg5MjEyYS5zZXRJY29uKGljb25fNzg3MDU4ZDhiZTNhNGJhZDg3MjZmMWNiZTE1MGFmZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmU0NzFjZDRjMjdjNGViMzlkNDhiYjcxMTA2MjA5YzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmFhNTlhZjFhOGZlNDBmNGEzN2YxMjg3MTMyM2U5MWMgPSAkKCc8ZGl2IGlkPSJodG1sXzJhYTU5YWYxYThmZTQwZjRhMzdmMTI4NzEzMjNlOTFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzQyIENlbnRydW0gUnlzdW5rdSBpIEdyYWZpa2kgaW0uIFQuIEt1bGlzaWV3aWN6YSB3IEthbGlzenU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJlNDcxY2Q0YzI3YzRlYjM5ZDQ4YmI3MTEwNjIwOWM4LnNldENvbnRlbnQoaHRtbF8yYWE1OWFmMWE4ZmU0MGY0YTM3ZjEyODcxMzIzZTkxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I2MjdkOTdlYjljZDQ3NWU5ZjZkZTk1ZTRhODkyMTJhLmJpbmRQb3B1cChwb3B1cF8yZTQ3MWNkNGMyN2M0ZWIzOWQ0OGJiNzExMDYyMDljOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jMjk1NmFjYzA2Mjk0NzhmYjlkMjEyOGUyZTkxYWQ1NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MjQ2MSwxOC4wODg0MDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZjdlZWU3NDZmZGY1NGZkZjljZmE2ZDUxYjRlNzdjNjEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jMjk1NmFjYzA2Mjk0NzhmYjlkMjEyOGUyZTkxYWQ1NC5zZXRJY29uKGljb25fZjdlZWU3NDZmZGY1NGZkZjljZmE2ZDUxYjRlNzdjNjEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTg4MDAyZmJlZmMwNGE1Y2E0OTI2MWJkYjdmM2U3ZDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGQ5NzQxNGM0MjFkNGM5MmI3Y2I2ZDc5NmJkMTllNDggPSAkKCc8ZGl2IGlkPSJodG1sXzhkOTc0MTRjNDIxZDRjOTJiN2NiNmQ3OTZiZDE5ZTQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzQzIER3b3JlayBNYXJpaSBExIVicm93c2tpZWogdyBSdXNzb3dpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTg4MDAyZmJlZmMwNGE1Y2E0OTI2MWJkYjdmM2U3ZDAuc2V0Q29udGVudChodG1sXzhkOTc0MTRjNDIxZDRjOTJiN2NiNmQ3OTZiZDE5ZTQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzI5NTZhY2MwNjI5NDc4ZmI5ZDIxMjhlMmU5MWFkNTQuYmluZFBvcHVwKHBvcHVwXzk4ODAwMmZiZWZjMDRhNWNhNDkyNjFiZGI3ZjNlN2QwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y5ZTkxZDA0YzRiYjQxNTlhZTg4YWM0ZjYwZDU0M2EwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNzE2NjA2LDE4LjAwMDM2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kZjRlYTU0ZDgyMWE0ZjZlYTEzYTRkMmMxNzY4ZmFjMyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2Y5ZTkxZDA0YzRiYjQxNTlhZTg4YWM0ZjYwZDU0M2EwLnNldEljb24oaWNvbl9kZjRlYTU0ZDgyMWE0ZjZlYTEzYTRkMmMxNzY4ZmFjMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYTU4Mjk4MWE5ZjY0MzVmOGNmN2FiMjhjMWNlOGU4YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mM2FkNTZjYTM3Njg0YTgxYTA0MjlkOGY4ZDQzYjgwNyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjNhZDU2Y2EzNzY4NGE4MWEwNDI5ZDhmOGQ0M2I4MDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzNDQgU2t3ZXIgSGlzdG9yeWN6bnkg4oCTIEdyYW5pY2EgdyBOb3d5Y2ggU2thbG1pZXJ6eWNhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JhNTgyOTgxYTlmNjQzNWY4Y2Y3YWIyOGMxY2U4ZThhLnNldENvbnRlbnQoaHRtbF9mM2FkNTZjYTM3Njg0YTgxYTA0MjlkOGY4ZDQzYjgwNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y5ZTkxZDA0YzRiYjQxNTlhZTg4YWM0ZjYwZDU0M2EwLmJpbmRQb3B1cChwb3B1cF9iYTU4Mjk4MWE5ZjY0MzVmOGNmN2FiMjhjMWNlOGU4YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lYWRkNTBhM2FkNDU0NjU3ODcyYzgzYzQwY2EzMzcyZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjc2Mjc4NSwxOC4wOTMxNzA5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOTdjZWI4NmQzNjA1NGYxNjk3YTc3MjQ5YmM3NzU4OWIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lYWRkNTBhM2FkNDU0NjU3ODcyYzgzYzQwY2EzMzcyZC5zZXRJY29uKGljb25fOTdjZWI4NmQzNjA1NGYxNjk3YTc3MjQ5YmM3NzU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjgxZmY4MTI4Y2U4NGYwMWFkNGQyNWVmYjM3YWUxNjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjVkOGQzNmEzNTAyNDRlZWFiY2ZkNjk0NmQzOWExZmYgPSAkKCc8ZGl2IGlkPSJodG1sX2I1ZDhkMzZhMzUwMjQ0ZWVhYmNmZDY5NDZkMzlhMWZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzQ1IFBhxYJhYyBHdWJlcm5hdG9yc2tpIHcgS2FsaXN6dTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjgxZmY4MTI4Y2U4NGYwMWFkNGQyNWVmYjM3YWUxNjkuc2V0Q29udGVudChodG1sX2I1ZDhkMzZhMzUwMjQ0ZWVhYmNmZDY5NDZkMzlhMWZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWFkZDUwYTNhZDQ1NDY1Nzg3MmM4M2M0MGNhMzM3MmQuYmluZFBvcHVwKHBvcHVwXzY4MWZmODEyOGNlODRmMDFhZDRkMjVlZmIzN2FlMTY5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I5ODgwMWViMTY2ZTQxYTM5MTcwYzdiNWJmNjA2ZmE1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNzYzODE3LDE4LjA5Mzc4M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jYTcxMmU2ZjA5NzU0NDgyYTBjM2Y0ODRiNzk2MmQzNSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2I5ODgwMWViMTY2ZTQxYTM5MTcwYzdiNWJmNjA2ZmE1LnNldEljb24oaWNvbl9jYTcxMmU2ZjA5NzU0NDgyYTBjM2Y0ODRiNzk2MmQzNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZDMzYjViM2M4M2I0NTcxYTY3ZDQ2NjllZDczZjIzOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NzM1NDE4NDJlNTA0YWJiODQwODVkNTA0ZWFkYjRkZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzczNTQxODQyZTUwNGFiYjg0MDg1ZDUwNGVhZGI0ZGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzNDYgQmFzenRhIERvcm90a2EgaSBNdXJ5IE1pZWpza2llIHcgS2FsaXN6dTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGQzM2I1YjNjODNiNDU3MWE2N2Q0NjY5ZWQ3M2YyMzkuc2V0Q29udGVudChodG1sXzc3MzU0MTg0MmU1MDRhYmI4NDA4NWQ1MDRlYWRiNGRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjk4ODAxZWIxNjZlNDFhMzkxNzBjN2I1YmY2MDZmYTUuYmluZFBvcHVwKHBvcHVwX2RkMzNiNWIzYzgzYjQ1NzFhNjdkNDY2OWVkNzNmMjM5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZlNDQ2NzQ0OTczMTQ5N2U4NjgxODc5N2JiMzk4Yzk5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNzYyNjMsMTguMDg5NzU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzkxYmEyNzIyOGM4MDRmYzA4Yjk4Nzk0NTg3YWJjNTk3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZmU0NDY3NDQ5NzMxNDk3ZTg2ODE4Nzk3YmIzOThjOTkuc2V0SWNvbihpY29uXzkxYmEyNzIyOGM4MDRmYzA4Yjk4Nzk0NTg3YWJjNTk3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM0MjBhOTI4OTViNzRhYWJiN2U3OTUwNmVlNGU0MTg0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EwNDEwMjU4OWU1YjQ2NWU5NjNiYzYxNGU5ZjNlMmNjID0gJCgnPGRpdiBpZD0iaHRtbF9hMDQxMDI1ODllNWI0NjVlOTYzYmM2MTRlOWYzZTJjYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDM0NyBXaWXFvGEgcmF0dXN6b3dhIHcgS2FsaXN6dTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzQyMGE5Mjg5NWI3NGFhYmI3ZTc5NTA2ZWU0ZTQxODQuc2V0Q29udGVudChodG1sX2EwNDEwMjU4OWU1YjQ2NWU5NjNiYzYxNGU5ZjNlMmNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmU0NDY3NDQ5NzMxNDk3ZTg2ODE4Nzk3YmIzOThjOTkuYmluZFBvcHVwKHBvcHVwXzM0MjBhOTI4OTViNzRhYWJiN2U3OTUwNmVlNGU0MTg0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I2Yzg5Y2FmMTJjNTRhMWFhOGM3OTJiMGFmOWFmYjk5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODUyNTEzLDE3LjkzMzU1M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iMGNjYzE5NGU0MDA0M2U3YjkzNTJlNjVjNWQ0NTIyMiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2I2Yzg5Y2FmMTJjNTRhMWFhOGM3OTJiMGFmOWFmYjk5LnNldEljb24oaWNvbl9iMGNjYzE5NGU0MDA0M2U3YjkzNTJlNjVjNWQ0NTIyMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yOTRjNDU3NGI3Yzc0MGM2OWRjMTVkNTE1ZTdlMGNkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xN2Q4YzQ0NWNlNjM0MWFhYTQ1ODBiNWVkOGUzMGI0ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMTdkOGM0NDVjZTYzNDFhYWE0NTgwYjVlZDhlMzBiNGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzNTMgWmFtZWsgdyBHb8WCdWNob3dpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjk0YzQ1NzRiN2M3NDBjNjlkYzE1ZDUxNWU3ZTBjZDUuc2V0Q29udGVudChodG1sXzE3ZDhjNDQ1Y2U2MzQxYWFhNDU4MGI1ZWQ4ZTMwYjRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjZjODljYWYxMmM1NGExYWE4Yzc5MmIwYWY5YWZiOTkuYmluZFBvcHVwKHBvcHVwXzI5NGM0NTc0YjdjNzQwYzY5ZGMxNWQ1MTVlN2UwY2Q1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzkxNTZjODUwMDJhMDQ4YzE4MzUxODY0MTNlMWZlMTQzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMTA2MjI3LDE3LjU3MTcwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8wN2Q5M2IyMzdiYWY0YTI1OThiMmMwODRlMmUzYWNjOSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzkxNTZjODUwMDJhMDQ4YzE4MzUxODY0MTNlMWZlMTQzLnNldEljb24oaWNvbl8wN2Q5M2IyMzdiYWY0YTI1OThiMmMwODRlMmUzYWNjOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMzgxOTdlYTY2M2M0NDA2YjBjOTBlOGI4MDI4MGJlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMDk0MDExZWM0MWE0ZmIzYTFlNDczNmNjZWNjYTZmOCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjA5NDAxMWVjNDFhNGZiM2ExZTQ3MzZjY2VjY2E2ZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzNTQgTXV6ZXVtIGltLiBBLiBNaWNraWV3aWN6YSB3IMWabWllxYJvd2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMzgxOTdlYTY2M2M0NDA2YjBjOTBlOGI4MDI4MGJlNy5zZXRDb250ZW50KGh0bWxfYjA5NDAxMWVjNDFhNGZiM2ExZTQ3MzZjY2VjY2E2ZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MTU2Yzg1MDAyYTA0OGMxODM1MTg2NDEzZTFmZTE0My5iaW5kUG9wdXAocG9wdXBfMDM4MTk3ZWE2NjNjNDQwNmIwYzkwZThiODAyODBiZTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjMwZDE0OTlkZTQ0NDYxMzk5Y2ZlZjA5M2U4ZGFhYTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi41MzM4NDcsMTcuNTgzMTQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzVkZmE5MzU4NTJlZjQ3YTk4MjMwYTlhZWQwOTMxZWQwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjMwZDE0OTlkZTQ0NDYxMzk5Y2ZlZjA5M2U4ZGFhYTkuc2V0SWNvbihpY29uXzVkZmE5MzU4NTJlZjQ3YTk4MjMwYTlhZWQwOTMxZWQwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkZmJlNDkxMzNiZjQwNTY5NjQwNTIzYjc3M2E0ZDg5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEyYTg3ODMyZDNjMjRlZmE5MzZiZWQxNjQ2NDBhOTA3ID0gJCgnPGRpdiBpZD0iaHRtbF8xMmE4NzgzMmQzYzI0ZWZhOTM2YmVkMTY0NjQwYTkwNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDM3MyBNdXpldW0gUG9jesSFdGvDs3cgUGHFhHN0d2EgUG9sc2tpZWdvIHcgR25pZcW6bmllPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZGZiZTQ5MTMzYmY0MDU2OTY0MDUyM2I3NzNhNGQ4OS5zZXRDb250ZW50KGh0bWxfMTJhODc4MzJkM2MyNGVmYTkzNmJlZDE2NDY0MGE5MDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMzBkMTQ5OWRlNDQ0NjEzOTljZmVmMDkzZThkYWFhOS5iaW5kUG9wdXAocG9wdXBfNGRmYmU0OTEzM2JmNDA1Njk2NDA1MjNiNzczYTRkODkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjkyOWVkNDhmOTZhNDk2Njg3YWQzOGNkNzM0NTUyNjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi41MTYwODEsMTcuNTk1NTk4MDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2I3NWEzNWVkYjM4ZjRkNTk4OWFlZDA0YzQxN2UyYzVjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMjkyOWVkNDhmOTZhNDk2Njg3YWQzOGNkNzM0NTUyNjguc2V0SWNvbihpY29uX2I3NWEzNWVkYjM4ZjRkNTk4OWFlZDA0YzQxN2UyYzVjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3Y2Q4Yjk5NTQxYzQ0NWM5ZGUzOTk4MzljZTdhNjIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzliYWIyMTliMTQ3YjQxYzZhOTllYWE2MTcwMzk0OTM5ID0gJCgnPGRpdiBpZD0iaHRtbF85YmFiMjE5YjE0N2I0MWM2YTk5ZWFhNjE3MDM5NDkzOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDM3NCBNdXpldW0gWmFieXRrw7N3IEt1bHR1cnkgVGVjaG5pY3puZWogdyBHbmllxbpuaWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3Y2Q4Yjk5NTQxYzQ0NWM5ZGUzOTk4MzljZTdhNjIxLnNldENvbnRlbnQoaHRtbF85YmFiMjE5YjE0N2I0MWM2YTk5ZWFhNjE3MDM5NDkzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI5MjllZDQ4Zjk2YTQ5NjY4N2FkMzhjZDczNDU1MjY4LmJpbmRQb3B1cChwb3B1cF80N2NkOGI5OTU0MWM0NDVjOWRlMzk5ODM5Y2U3YTYyMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MmNkM2FmYThiZTc0YjUzYTE1NTI3NTQ0ZjUzYjVmNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjM2MjIxMiwxNy42NDc3NzJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZmE4MmJkOTJlYmE4NDVlYjk1N2FjODA1ZGFmMjE0ZmQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81MmNkM2FmYThiZTc0YjUzYTE1NTI3NTQ0ZjUzYjVmNS5zZXRJY29uKGljb25fZmE4MmJkOTJlYmE4NDVlYjk1N2FjODA1ZGFmMjE0ZmQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWM2MTFlMGExMjBkNDEzZmI3OWRjZmJiYjBkODc5ZjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTNiNDUxM2ZjMzVhNGQxMjhlMWRmMWI3NjJlYmM3YzAgPSAkKCc8ZGl2IGlkPSJodG1sX2UzYjQ1MTNmYzM1YTRkMTI4ZTFkZjFiNzYyZWJjN2MwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzc4IEdyw7NkIHcgR3J6eWJvd2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYzYxMWUwYTEyMGQ0MTNmYjc5ZGNmYmJiMGQ4NzlmNy5zZXRDb250ZW50KGh0bWxfZTNiNDUxM2ZjMzVhNGQxMjhlMWRmMWI3NjJlYmM3YzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MmNkM2FmYThiZTc0YjUzYTE1NTI3NTQ0ZjUzYjVmNS5iaW5kUG9wdXAocG9wdXBfYWM2MTFlMGExMjBkNDEzZmI3OWRjZmJiYjBkODc5ZjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTVhYjk1NGE4ZGFjNGFkOGIwNGMzY2M0N2M3YWEzNTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS43MjczNDgsMTguMDI1Mjk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzE1NDk2NjFhZDlkODQyNWI4ZWY0YjBkZDI0ODgyZTY5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYTVhYjk1NGE4ZGFjNGFkOGIwNGMzY2M0N2M3YWEzNTkuc2V0SWNvbihpY29uXzE1NDk2NjFhZDlkODQyNWI4ZWY0YjBkZDI0ODgyZTY5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RjNDcxYmIxZWY4ZjQ0ZjZhOTBmNTAzMTFmZDE1YzJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkyZDdmZTNiOWJjMDQ3ZThiMGFjNzczMjFmYWI2MjVhID0gJCgnPGRpdiBpZD0iaHRtbF85MmQ3ZmUzYjliYzA0N2U4YjBhYzc3MzIxZmFiNjI1YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDM5MyBNdXpldW0gSGlzdG9yaWkgU3pjenlwaW9ybmEgdyBLYWxpc3p1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYzQ3MWJiMWVmOGY0NGY2YTkwZjUwMzExZmQxNWMyYy5zZXRDb250ZW50KGh0bWxfOTJkN2ZlM2I5YmMwNDdlOGIwYWM3NzMyMWZhYjYyNWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hNWFiOTU0YThkYWM0YWQ4YjA0YzNjYzQ3YzdhYTM1OS5iaW5kUG9wdXAocG9wdXBfZGM0NzFiYjFlZjhmNDRmNmE5MGY1MDMxMWZkMTVjMmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTAyZGYwOTllNjAxNGE2NDk1NGU4MTU0MTg3YzUzNGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS43MzU5NDYsMTguMjA4MzM1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzVmODIzOWFlZjMxZDRlZGRiZTQzNTAzYzc0ZWEzMGE4ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNTAyZGYwOTllNjAxNGE2NDk1NGU4MTU0MTg3YzUzNGEuc2V0SWNvbihpY29uXzVmODIzOWFlZjMxZDRlZGRiZTQzNTAzYzc0ZWEzMGE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwYTlkNzhkYWVjNTRhYmM5OWViNzc5ZGFmZTRkNGE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzMGM0MjAxNGMwMTQwNzdhMTRkYTNhMDg4YTdjZmIzID0gJCgnPGRpdiBpZD0iaHRtbF81MzBjNDIwMTRjMDE0MDc3YTE0ZGEzYTA4OGE3Y2ZiMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDM5NCBNb3N0ZWsgxbxlbGF6bnkgdyBPcGF0w7N3a3UgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MGE5ZDc4ZGFlYzU0YWJjOTllYjc3OWRhZmU0ZDRhOC5zZXRDb250ZW50KGh0bWxfNTMwYzQyMDE0YzAxNDA3N2ExNGRhM2EwODhhN2NmYjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MDJkZjA5OWU2MDE0YTY0OTU0ZTgxNTQxODdjNTM0YS5iaW5kUG9wdXAocG9wdXBfNTBhOWQ3OGRhZWM1NGFiYzk5ZWI3NzlkYWZlNGQ0YTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzhlOGFlNWY0ZjhkNGFjOThlZTQ3ZjBjODI1OWE4ZGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS42MDAyMTQsMTcuMzg3NjcwOTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2MzN2U5YTZmNjI3NTQzN2NhNTgzMGM5M2I4NzcxOTU3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzhlOGFlNWY0ZjhkNGFjOThlZTQ3ZjBjODI1OWE4ZGIuc2V0SWNvbihpY29uX2MzN2U5YTZmNjI3NTQzN2NhNTgzMGM5M2I4NzcxOTU3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc0Njg5M2YyMzFiZjQ1MDA5OTM2ODU0ZTlhM2U4YzM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MwMTA3M2YwYjVlZTQxNmY4YjRiYjljYmVlNGQ5ZGMzID0gJCgnPGRpdiBpZD0iaHRtbF9jMDEwNzNmMGI1ZWU0MTZmOGI0YmI5Y2JlZTRkOWRjMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQwMyBLb8WbY2nDs8WCIMWbdy4gTWFjaWVqYSB3IFRyemViaWNrdTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzQ2ODkzZjIzMWJmNDUwMDk5MzY4NTRlOWEzZThjMzUuc2V0Q29udGVudChodG1sX2MwMTA3M2YwYjVlZTQxNmY4YjRiYjljYmVlNGQ5ZGMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzhlOGFlNWY0ZjhkNGFjOThlZTQ3ZjBjODI1OWE4ZGIuYmluZFBvcHVwKHBvcHVwXzc0Njg5M2YyMzFiZjQ1MDA5OTM2ODU0ZTlhM2U4YzM1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFmY2ZkNmJlYzEwZjRjZGY5ZDEyMWI2ZWI0MjRjYzVlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMzk1NDY2LDE3LjQ4MTA0N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8yZGFiODI2MmE5ZDQ0ZmMyYjgzZjJhMmE3NTExNDQ0NSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzFmY2ZkNmJlYzEwZjRjZGY5ZDEyMWI2ZWI0MjRjYzVlLnNldEljb24oaWNvbl8yZGFiODI2MmE5ZDQ0ZmMyYjgzZjJhMmE3NTExNDQ0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMTE0ZWM2M2NmMzA0OWQ1ODg1ZDhlNWIwYWFiOGE3MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMzQwMGYxYjQyNzU0OTY4ODc5MDVjYzU3YWVmOGJmOSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDM0MDBmMWI0Mjc1NDk2ODg3OTA1Y2M1N2FlZjhiZjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0MDQgWmVzcMOzxYIgUGHFgmFjb3dvLVBhcmtvd3kgdyBHb3N6Y3p1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMTE0ZWM2M2NmMzA0OWQ1ODg1ZDhlNWIwYWFiOGE3MC5zZXRDb250ZW50KGh0bWxfZDM0MDBmMWI0Mjc1NDk2ODg3OTA1Y2M1N2FlZjhiZjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xZmNmZDZiZWMxMGY0Y2RmOWQxMjFiNmViNDI0Y2M1ZS5iaW5kUG9wdXAocG9wdXBfMDExNGVjNjNjZjMwNDlkNTg4NWQ4ZTViMGFhYjhhNzApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODNkY2Q0MGE2MTlkNDgxM2E2MjE0YmRjMzM1NGFjNjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41NDU4MDcsMTcuMzU4MzA3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzRiZDYxNzRmNjhmNzQxZTY4NmY2YjRkZTM1ZjI1M2IzID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODNkY2Q0MGE2MTlkNDgxM2E2MjE0YmRjMzM1NGFjNjkuc2V0SWNvbihpY29uXzRiZDYxNzRmNjhmNzQxZTY4NmY2YjRkZTM1ZjI1M2IzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmM2Y4MGUyY2E5ZTRjYjJhNjliNTBlNGY5OWMxNDE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkNTBiNDE3NzhmNDQ0ZTRiOGYwODZhYzFiMWJlMDMxID0gJCgnPGRpdiBpZD0iaHRtbF82ZDUwYjQxNzc4ZjQ0NGU0YjhmMDg2YWMxYjFiZTAzMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQwNyBLYXJwIOKAkyBrcsOzbCBTdGF3w7N3IE1pbGlja2ljaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGYzZjgwZTJjYTllNGNiMmE2OWI1MGU0Zjk5YzE0MTkuc2V0Q29udGVudChodG1sXzZkNTBiNDE3NzhmNDQ0ZTRiOGYwODZhYzFiMWJlMDMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODNkY2Q0MGE2MTlkNDgxM2E2MjE0YmRjMzM1NGFjNjkuYmluZFBvcHVwKHBvcHVwXzhmM2Y4MGUyY2E5ZTRjYjJhNjliNTBlNGY5OWMxNDE5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJjNDA1OWM3NTZlODRhNTI5YWU1MWQ2YTllZGI1ODAzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNDc4NjY3LDE3LjM0Mzc3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81NDU0MjgyY2Q5ZWQ0YmI4YjBiNTZmZDA0ZDUxYTA5NyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzJjNDA1OWM3NTZlODRhNTI5YWU1MWQ2YTllZGI1ODAzLnNldEljb24oaWNvbl81NDU0MjgyY2Q5ZWQ0YmI4YjBiNTZmZDA0ZDUxYTA5Nyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZGJlYzBhMzQ3OTk0MDVhOGYyYzk0YTIzZWQzZDUzOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OWEwZjhiMzQ5ODk0YzZkYmRhMjdmN2JmYmNmZWFhMiA9ICQoJzxkaXYgaWQ9Imh0bWxfOTlhMGY4YjM0OTg5NGM2ZGJkYTI3ZjdiZmJjZmVhYTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0NDkgS3JvxZtuaWNrYSBLb2xlaiBXxIVza290b3Jvd2E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJkYmVjMGEzNDc5OTQwNWE4ZjJjOTRhMjNlZDNkNTM4LnNldENvbnRlbnQoaHRtbF85OWEwZjhiMzQ5ODk0YzZkYmRhMjdmN2JmYmNmZWFhMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJjNDA1OWM3NTZlODRhNTI5YWU1MWQ2YTllZGI1ODAzLmJpbmRQb3B1cChwb3B1cF8yZGJlYzBhMzQ3OTk0MDVhOGYyYzk0YTIzZWQzZDUzOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MDViNzNkNTNkNWM0NjNjYTEwMThhZjhlNTU3ZDMyNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjczODU5NCwxOC4yMTQxNzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZGQ3Y2M4YjkyM2I1NDgzZGFiNDY1YmZlNjYxNDI0NDMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80MDViNzNkNTNkNWM0NjNjYTEwMThhZjhlNTU3ZDMyNS5zZXRJY29uKGljb25fZGQ3Y2M4YjkyM2I1NDgzZGFiNDY1YmZlNjYxNDI0NDMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2Q0NjJkZDQyN2FhNGM0Mzk3NjE5ZDM3ZTgwMjE2MTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZThmMTMwM2M0OTNiNDU3YTlmY2Y0NjQwMzg4NTdhMDQgPSAkKCc8ZGl2IGlkPSJodG1sX2U4ZjEzMDNjNDkzYjQ1N2E5ZmNmNDY0MDM4ODU3YTA0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTEyIE11emV1bSBIaXN0b3JpaSBQcnplbXlzxYJ1IHcgT3BhdMOzd2t1IDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2Q0NjJkZDQyN2FhNGM0Mzk3NjE5ZDM3ZTgwMjE2MTMuc2V0Q29udGVudChodG1sX2U4ZjEzMDNjNDkzYjQ1N2E5ZmNmNDY0MDM4ODU3YTA0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDA1YjczZDUzZDVjNDYzY2ExMDE4YWY4ZTU1N2QzMjUuYmluZFBvcHVwKHBvcHVwXzdkNDYyZGQ0MjdhYTRjNDM5NzYxOWQzN2U4MDIxNjEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzEwNzc4ZTNjZDhjZTRlYTBhYmMwYmVkMWYzMTMyMWMxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODY1NTYxLDE3LjYwNDk2OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hNTJiMzZkMmVkMzY0ODIzYTlhOWY3OGNiMzZkZmRlMCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzEwNzc4ZTNjZDhjZTRlYTBhYmMwYmVkMWYzMTMyMWMxLnNldEljb24oaWNvbl9hNTJiMzZkMmVkMzY0ODIzYTlhOWY3OGNiMzZkZmRlMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMDk1N2QwMWVkNWQ0YTUyYjVhMGYxZTFlNDJjZjFiMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYjA4ZTJjODM3N2I0YTM0OWRkN2Q1ZmU2NWY4NjQ5NiA9ICQoJzxkaXYgaWQ9Imh0bWxfYWIwOGUyYzgzNzdiNGEzNDlkZDdkNWZlNjVmODY0OTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA1MjIgTXV6ZXVtIFplc3DDs8WCIFBhxYJhY293by1QYXJrb3d5IHcgRG9icnp5Y3kgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMDk1N2QwMWVkNWQ0YTUyYjVhMGYxZTFlNDJjZjFiMi5zZXRDb250ZW50KGh0bWxfYWIwOGUyYzgzNzdiNGEzNDlkZDdkNWZlNjVmODY0OTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMDc3OGUzY2Q4Y2U0ZWEwYWJjMGJlZDFmMzEzMjFjMS5iaW5kUG9wdXAocG9wdXBfZTA5NTdkMDFlZDVkNGE1MmI1YTBmMWUxZTQyY2YxYjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2ViYWQ5ZWIwMTg1NDU4MTg3NzZmMDRhMTgwYzRkMjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41OTQ4NjUsMTguNzM4OTIwOTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2FhNWZhMjRjMGFiZDQyNzZiNjA1YzAzZjljMGZmOGMyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfY2ViYWQ5ZWIwMTg1NDU4MTg3NzZmMDRhMTgwYzRkMjYuc2V0SWNvbihpY29uX2FhNWZhMjRjMGFiZDQyNzZiNjA1YzAzZjljMGZmOGMyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg2MWM4Yjk2YWE2YTRlNjlhNWM2OWE4YjFkMGQxNTRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2NTc2N2MwMjI3ZjRhYjQ4NGQ0YmEzZDg0YzM5ZmU5ID0gJCgnPGRpdiBpZD0iaHRtbF9kNjU3NjdjMDIyN2Y0YWI0ODRkNGJhM2Q4NGMzOWZlOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDY1NyBNdXpldW0gT2tyxJlnb3dlIHcgU2llcmFkenU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg2MWM4Yjk2YWE2YTRlNjlhNWM2OWE4YjFkMGQxNTRhLnNldENvbnRlbnQoaHRtbF9kNjU3NjdjMDIyN2Y0YWI0ODRkNGJhM2Q4NGMzOWZlOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NlYmFkOWViMDE4NTQ1ODE4Nzc2ZjA0YTE4MGM0ZDI2LmJpbmRQb3B1cChwb3B1cF84NjFjOGI5NmFhNmE0ZTY5YTVjNjlhOGIxZDBkMTU0YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wY2ZlOWRmNDA3M2M0MGVkODM3MTZkZTI1NTk5MDc4NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjU5MjI3NCwxOC43NDc4MTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMWNlMjY2M2UxZTkzNDY3MTgwOTI3ODNlMjQ1YTYzZWMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wY2ZlOWRmNDA3M2M0MGVkODM3MTZkZTI1NTk5MDc4NS5zZXRJY29uKGljb25fMWNlMjY2M2UxZTkzNDY3MTgwOTI3ODNlMjQ1YTYzZWMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWVkMjhlNDgzYjkzNGRjN2I3MTVhMTZlYTY2NmFiYTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjBlYzA1MzdjYjg4NDI1ODhmYmMxYWQ1NmU0ZWQ1YTIgPSAkKCc8ZGl2IGlkPSJodG1sX2IwZWMwNTM3Y2I4ODQyNTg4ZmJjMWFkNTZlNGVkNWEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjU4IFNpZXJhZHpraSBQYXJrIEV0bm9ncmFmaWN6bnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFlZDI4ZTQ4M2I5MzRkYzdiNzE1YTE2ZWE2NjZhYmEwLnNldENvbnRlbnQoaHRtbF9iMGVjMDUzN2NiODg0MjU4OGZiYzFhZDU2ZTRlZDVhMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBjZmU5ZGY0MDczYzQwZWQ4MzcxNmRlMjU1OTkwNzg1LmJpbmRQb3B1cChwb3B1cF8xZWQyOGU0ODNiOTM0ZGM3YjcxNWExNmVhNjY2YWJhMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZDUyOGEwYzEyOWY0ZjFlYmY5YTZmOGNkYjRlYjEwMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjY1MjMyNSwxOC41NjE1NTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMjNhMmIxZmRkODJhNGUwYmJkYjI5ZjY0MzkzMWEwOTYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kZDUyOGEwYzEyOWY0ZjFlYmY5YTZmOGNkYjRlYjEwMi5zZXRJY29uKGljb25fMjNhMmIxZmRkODJhNGUwYmJkYjI5ZjY0MzkzMWEwOTYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTZjYzMwMGJiMWJmNDdkYjlmMDRjYzM4MTNhNmMwZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGE3ZDViY2U2ODRlNGUzYmIwZjFkYmUwOWFhYmIxN2MgPSAkKCc8ZGl2IGlkPSJodG1sXzhhN2Q1YmNlNjg0ZTRlM2JiMGYxZGJlMDlhYWJiMTdjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjU5IE11emV1bSBXYWxld3NraWNoIHcgVHVixIVkemluaWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E2Y2MzMDBiYjFiZjQ3ZGI5ZjA0Y2MzODEzYTZjMGQ0LnNldENvbnRlbnQoaHRtbF84YTdkNWJjZTY4NGU0ZTNiYjBmMWRiZTA5YWFiYjE3Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RkNTI4YTBjMTI5ZjRmMWViZjlhNmY4Y2RiNGViMTAyLmJpbmRQb3B1cChwb3B1cF9hNmNjMzAwYmIxYmY0N2RiOWYwNGNjMzgxM2E2YzBkNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xNTMxMTlmNDA3MjE0MDU4YjQ5ODY5OWRkOGE4Nzg1NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjg0ODY1NCwxNy43MzU1MTQwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNDkwN2RmMDJiNzU4NGZlYTlkOTk2ZGEwZjY1NjlhNWIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xNTMxMTlmNDA3MjE0MDU4YjQ5ODY5OWRkOGE4Nzg1Ny5zZXRJY29uKGljb25fNDkwN2RmMDJiNzU4NGZlYTlkOTk2ZGEwZjY1NjlhNWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTNmMGFhYjJmODY4NDljZThjMGRlNTVjM2FlNmVkNDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmQ5NzMyMDYyNjE4NGRhYWI4ZjU2OWQyZGNmYTRkYTIgPSAkKCc8ZGl2IGlkPSJodG1sXzJkOTczMjA2MjYxODRkYWFiOGY1NjlkMmRjZmE0ZGEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNzE3IMW7bmnFhHNrYSBLb2xlaiBQb3dpYXRvd2E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkzZjBhYWIyZjg2ODQ5Y2U4YzBkZTU1YzNhZTZlZDQyLnNldENvbnRlbnQoaHRtbF8yZDk3MzIwNjI2MTg0ZGFhYjhmNTY5ZDJkY2ZhNGRhMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE1MzExOWY0MDcyMTQwNThiNDk4Njk5ZGQ4YTg3ODU3LmJpbmRQb3B1cChwb3B1cF85M2YwYWFiMmY4Njg0OWNlOGMwZGU1NWMzYWU2ZWQ0Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80NTZjODNkMjA2NTY0ZWQ4OWQzNjYwODNkZGFkNTBlMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjg0NjM3MSwxNy43MjI5ODNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYjU4NzU3ODhjZDRkNDg1ODgzMjdiMmQzZmY4NGI2NjMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80NTZjODNkMjA2NTY0ZWQ4OWQzNjYwODNkZGFkNTBlMS5zZXRJY29uKGljb25fYjU4NzU3ODhjZDRkNDg1ODgzMjdiMmQzZmY4NGI2NjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjlhN2E2MjgwMjgyNDRmZDg4NjdiYjIwN2I4MDdkMmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWQyNWMxMmU5MTRjNGQxMzgwMmM5YmI5NThhNGE1ZWQgPSAkKCc8ZGl2IGlkPSJodG1sXzlkMjVjMTJlOTE0YzRkMTM4MDJjOWJiOTU4YTRhNWVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNzE4IE11emV1bSBaaWVtaSBQYcWCdWNraWVqIHcgxbtuaW5pZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjlhN2E2MjgwMjgyNDRmZDg4NjdiYjIwN2I4MDdkMmIuc2V0Q29udGVudChodG1sXzlkMjVjMTJlOTE0YzRkMTM4MDJjOWJiOTU4YTRhNWVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDU2YzgzZDIwNjU2NGVkODlkMzY2MDgzZGRhZDUwZTEuYmluZFBvcHVwKHBvcHVwXzI5YTdhNjI4MDI4MjQ0ZmQ4ODY3YmIyMDdiODA3ZDJiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2YwZmU3ODBiYzc0YzQ5NzRiNTc1ZDc3ZDhmNjQyYWQxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNzk4NTExLDE3Ljc1MjA4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kODE0Mjk5YTdiZmE0OWFlOWYyOGYxYmQzMmUzMWNlOSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2YwZmU3ODBiYzc0YzQ5NzRiNTc1ZDc3ZDhmNjQyYWQxLnNldEljb24oaWNvbl9kODE0Mjk5YTdiZmE0OWFlOWYyOGYxYmQzMmUzMWNlOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMDgxNWY0MWJlZWE0NTc4YmI3NDJhMWRmYTMyOGVhZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MjMwMTk3N2RkNzc0YWRlOWM0ZWRjNGYwZjBjZDZlNCA9ICQoJzxkaXYgaWQ9Imh0bWxfNjIzMDE5NzdkZDc3NGFkZTljNGVkYzRmMGYwY2Q2ZTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA3MTkgTXV6ZXVtIEtvbGVpIFfEhXNrb3Rvcm93ZWogdyBXZW5lY2ppPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMDgxNWY0MWJlZWE0NTc4YmI3NDJhMWRmYTMyOGVhZi5zZXRDb250ZW50KGh0bWxfNjIzMDE5NzdkZDc3NGFkZTljNGVkYzRmMGYwY2Q2ZTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mMGZlNzgwYmM3NGM0OTc0YjU3NWQ3N2Q4ZjY0MmFkMS5iaW5kUG9wdXAocG9wdXBfZjA4MTVmNDFiZWVhNDU3OGJiNzQyYTFkZmEzMjhlYWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDhkMzgyMjFjZTIyNGJkMGE5YWJjZWE1NDViZGNiNmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS45NzEyNjYsMTguNzkwMDQ5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2UyODUyNTdjZGVkODQyOWJhNTRmYzY3MGEzY2ZhZWNhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDhkMzgyMjFjZTIyNGJkMGE5YWJjZWE1NDViZGNiNmEuc2V0SWNvbihpY29uX2UyODUyNTdjZGVkODQyOWJhNTRmYzY3MGEzY2ZhZWNhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJiYzE4YTI1MDA5YzQ3NDFhMDMzMTMxMzZmMmJhMTAxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0MTRkMDU4YTlmNTQxNWY4YmUzOTVmYzYxZTk5ZmY5ID0gJCgnPGRpdiBpZD0iaHRtbF83NDE0ZDA1OGE5ZjU0MTVmOGJlMzk1ZmM2MWU5OWZmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDczMCBUZXJteSBVbmllasOzdyA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJiYzE4YTI1MDA5YzQ3NDFhMDMzMTMxMzZmMmJhMTAxLnNldENvbnRlbnQoaHRtbF83NDE0ZDA1OGE5ZjU0MTVmOGJlMzk1ZmM2MWU5OWZmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA4ZDM4MjIxY2UyMjRiZDBhOWFiY2VhNTQ1YmRjYjZhLmJpbmRQb3B1cChwb3B1cF8yYmMxOGEyNTAwOWM0NzQxYTAzMzEzMTM2ZjJiYTEwMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hMzNmZTVmNTFjMDQ0NjFjOGMzYzVjN2U1Zjk3ZjQzMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjk3MDk5MSwxOC43OTA4OTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNGM4OTMwMTRjYzRlNDBjYjlhM2YxN2E5Y2I2OTgwMWYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hMzNmZTVmNTFjMDQ0NjFjOGMzYzVjN2U1Zjk3ZjQzMS5zZXRJY29uKGljb25fNGM4OTMwMTRjYzRlNDBjYjlhM2YxN2E5Y2I2OTgwMWYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODE3ZTMzN2JjNzI2NDQyOGFiYTViMTQ3OTc4NTQxM2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2UxNzRkNzBkOGNlNDVmNmFmZTU5MzExMjRmZTI1MjQgPSAkKCc8ZGl2IGlkPSJodG1sX2NlMTc0ZDcwZDhjZTQ1ZjZhZmU1OTMxMTI0ZmUyNTI0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNzMxIFRlcm15IFVuaWVqw7N3IC0gR29yxIVjZSBTb2xhbmtpIExlY3puaWN6ZSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxN2UzMzdiYzcyNjQ0MjhhYmE1YjE0Nzk3ODU0MTNkLnNldENvbnRlbnQoaHRtbF9jZTE3NGQ3MGQ4Y2U0NWY2YWZlNTkzMTEyNGZlMjUyNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2EzM2ZlNWY1MWMwNDQ2MWM4YzNjNWM3ZTVmOTdmNDMxLmJpbmRQb3B1cChwb3B1cF84MTdlMzM3YmM3MjY0NDI4YWJhNWIxNDc5Nzg1NDEzZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZTg1OThiMjY3MTk0NmIwOTY3ZmU1YzA0ZmIxM2M4OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjE3OTYyOCwyMC4wODc5ODddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNmJkMDEzYTBlMWRmNGZmOWI5OTUyNjhkMmY2MDA4NjkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZGU4NTk4YjI2NzE5NDZiMDk2N2ZlNWMwNGZiMTNjODkuc2V0SWNvbihpY29uXzZiZDAxM2EwZTFkZjRmZjliOTk1MjY4ZDJmNjAwODY5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VlZGEzNDBkYjU5NzQ4MTRiNzZkZThiN2JkYWQ4MTk1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhhNmQyZTZkMDhmNTQxNmU5ODk5N2U0NzI0ZWI5ZWIxID0gJCgnPGRpdiBpZD0iaHRtbF84YTZkMmU2ZDA4ZjU0MTZlOTg5OTdlNDcyNGViOWViMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDAwMSBSeXN5IOKAkyBuYWp3ecW8c3p5IHN6Y3p5dCBwb2xza2ljaCBUYXRyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZWRhMzQwZGI1OTc0ODE0Yjc2ZGU4YjdiZGFkODE5NS5zZXRDb250ZW50KGh0bWxfOGE2ZDJlNmQwOGY1NDE2ZTk4OTk3ZTQ3MjRlYjllYjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZTg1OThiMjY3MTk0NmIwOTY3ZmU1YzA0ZmIxM2M4OS5iaW5kUG9wdXAocG9wdXBfZWVkYTM0MGRiNTk3NDgxNGI3NmRlOGI3YmRhZDgxOTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWEyNDFhZmEyZTA1NDA0NjhkZWJhZjY0ZmRkYjc5YWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS4yNDQxNjcsMjAuMDA3MjIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzgzMTY2ZGViZmRjNzRlNDc5ZTYyYjVjNGYxN2I1ZjlkID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzFhMjQxYWZhMmUwNTQwNDY4ZGViYWY2NGZkZGI3OWFiLnNldEljb24oaWNvbl84MzE2NmRlYmZkYzc0ZTQ3OWU2MmI1YzRmMTdiNWY5ZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZThmZTk4OTYyNDI0NmNlOTQ5YWMwYzIxMjc0MTIzNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNDg0OWViYjQ5OWI0MGZkYTkxYzI5MTRmY2RhMzE2NiA9ICQoJzxkaXYgaWQ9Imh0bWxfMzQ4NDllYmI0OTliNDBmZGE5MWMyOTE0ZmNkYTMxNjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwMDIgU2Nocm9uaXNrbyAiTXVyb3dhbmllYyIgbmEgSGFsaSBHxIVzaWVuaWNvd2VqIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmU4ZmU5ODk2MjQyNDZjZTk0OWFjMGMyMTI3NDEyMzcuc2V0Q29udGVudChodG1sXzM0ODQ5ZWJiNDk5YjQwZmRhOTFjMjkxNGZjZGEzMTY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWEyNDFhZmEyZTA1NDA0NjhkZWJhZjY0ZmRkYjc5YWIuYmluZFBvcHVwKHBvcHVwXzJlOGZlOTg5NjI0MjQ2Y2U5NDlhYzBjMjEyNzQxMjM3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZjNTY3ZTUwYWZlMDRmMjdhOTMxYWNjNmViMGU2Yjc4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuMjAxMzc4LDIwLjA3MTI3Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lNjAzMWU5MTMxMjA0OWQ2YjJjY2YwOWMxODIwZWE1NSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mYzU2N2U1MGFmZTA0ZjI3YTkzMWFjYzZlYjBlNmI3OC5zZXRJY29uKGljb25fZTYwMzFlOTEzMTIwNDlkNmIyY2NmMDljMTgyMGVhNTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTQ0OTdjOTc1MDJmNDg3NjhkOGViNmViY2RkYmEyNDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzViYzAxNGVhNDhjNGU4MjgwZWRhZTliNjRmNjBjODcgPSAkKCc8ZGl2IGlkPSJodG1sXzc1YmMwMTRlYTQ4YzRlODI4MGVkYWU5YjY0ZjYwYzg3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDA0IFNjaHJvbmlza28gTW9yc2tpZSBPa28gIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTQ0OTdjOTc1MDJmNDg3NjhkOGViNmViY2RkYmEyNDkuc2V0Q29udGVudChodG1sXzc1YmMwMTRlYTQ4YzRlODI4MGVkYWU5YjY0ZjYwYzg3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmM1NjdlNTBhZmUwNGYyN2E5MzFhY2M2ZWIwZTZiNzguYmluZFBvcHVwKHBvcHVwX2U0NDk3Yzk3NTAyZjQ4NzY4ZDhlYjZlYmNkZGJhMjQ5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVlZmJlMzg1ZTk5NjQ3Zjg4YjdlMWQzZTZmNThjMDE5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuMzAyMTI0LDIwLjExNjY2NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8wNjNmYTY4MjA4ODY0ZTFjODhjZTI4NzYyY2Y0ZGZkYSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81ZWZiZTM4NWU5OTY0N2Y4OGI3ZTFkM2U2ZjU4YzAxOS5zZXRJY29uKGljb25fMDYzZmE2ODIwODg2NGUxYzg4Y2UyODc2MmNmNGRmZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDU5OWU3OTUxYzdlNGJjZjliYWMxYjQxNmFiNjVhMDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTBmMzUzMGI0ZGFkNDc0MWJhMWRkMTRjYjc4ZDc0MjkgPSAkKCc8ZGl2IGlkPSJodG1sX2EwZjM1MzBiNGRhZDQ3NDFiYTFkZDE0Y2I3OGQ3NDI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDA1IFNjaHJvbmlza28gR8WCb2TDs3drYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDU5OWU3OTUxYzdlNGJjZjliYWMxYjQxNmFiNjVhMDAuc2V0Q29udGVudChodG1sX2EwZjM1MzBiNGRhZDQ3NDFiYTFkZDE0Y2I3OGQ3NDI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWVmYmUzODVlOTk2NDdmODhiN2UxZDNlNmY1OGMwMTkuYmluZFBvcHVwKHBvcHVwXzQ1OTllNzk1MWM3ZTRiY2Y5YmFjMWI0MTZhYjY1YTAwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk3ZTQxN2FmNmEyYzQ1YTZhZjdlMTVjN2E1ZmM1ODM1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuMjEzNTMyLDIwLjA0OTA2Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82MDI4NjZjMjNiZjY0YzE3ODcwMDhjN2NmYmU5ODczMiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85N2U0MTdhZjZhMmM0NWE2YWY3ZTE1YzdhNWZjNTgzNS5zZXRJY29uKGljb25fNjAyODY2YzIzYmY2NGMxNzg3MDA4YzdjZmJlOTg3MzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDYyZDg2ZTM5YTEwNDM1ZmFkMzIwZGRlMzI2ZWU3Y2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDRkODNiYzE1ZTk1NDg0N2JkZTdjNTMxMTkwMmUyYjcgPSAkKCc8ZGl2IGlkPSJodG1sXzA0ZDgzYmMxNWU5NTQ4NDdiZGU3YzUzMTE5MDJlMmI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDA2IFNjaHJvbmlza28gdyBEb2xpbmllIFBpxJljaXUgU3Rhd8OzdyA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q2MmQ4NmUzOWExMDQzNWZhZDMyMGRkZTMyNmVlN2NjLnNldENvbnRlbnQoaHRtbF8wNGQ4M2JjMTVlOTU0ODQ3YmRlN2M1MzExOTAyZTJiNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk3ZTQxN2FmNmEyYzQ1YTZhZjdlMTVjN2E1ZmM1ODM1LmJpbmRQb3B1cChwb3B1cF9kNjJkODZlMzlhMTA0MzVmYWQzMjBkZGUzMjZlZTdjYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZDNmYTgyNzJjMmU0MWQ5ODg2OWY5ZThhMjg4MmJkOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjIzMzcxMywyMC4wOTUzOTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNGNlNTUzNzYyYzlkNDNlYjgzZDZhMjI5ZGM4YzliZjQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZmQzZmE4MjcyYzJlNDFkOTg4NjlmOWU4YTI4ODJiZDguc2V0SWNvbihpY29uXzRjZTU1Mzc2MmM5ZDQzZWI4M2Q2YTIyOWRjOGM5YmY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IyNDUyMGNjNThmODQ5Yjg4NzhlOTE4MmFjNGIyMjIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkxMGYxY2NhZmRjNTRkM2NiYzkyMWVlNDFjNDgwODUzID0gJCgnPGRpdiBpZD0iaHRtbF85MTBmMWNjYWZkYzU0ZDNjYmM5MjFlZTQxYzQ4MDg1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDAwNyBTY2hyb25pc2tvIHcgRG9saW5pZSBSb3p0b2tpIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjI0NTIwY2M1OGY4NDliODg3OGU5MTgyYWM0YjIyMjMuc2V0Q29udGVudChodG1sXzkxMGYxY2NhZmRjNTRkM2NiYzkyMWVlNDFjNDgwODUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmQzZmE4MjcyYzJlNDFkOTg4NjlmOWU4YTI4ODJiZDguYmluZFBvcHVwKHBvcHVwX2IyNDUyMGNjNThmODQ5Yjg4NzhlOTE4MmFjNGIyMjIzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI1ZWMzZDZiNTUxMjRjZjE4MTI5ZjdhN2YxZDhhZWIzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuMzk4NzI4LDIwLjU4Mjg3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81MDFhMGU3YTIwNzQ0ZjMzYTYzZTRlOTA0OWQ5YjVkMyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yNWVjM2Q2YjU1MTI0Y2YxODEyOWY3YTdmMWQ4YWViMy5zZXRJY29uKGljb25fNTAxYTBlN2EyMDc0NGYzM2E2M2U0ZTkwNDlkOWI1ZDMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjIwNDNhMzlmNDEyNGY5YTgxYjI1MDJjMWQzYjVlOGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjc2NzgxOWZlOWYwNGRiZWExYzhmMjBhOTg5ODFmZjYgPSAkKCc8ZGl2IGlkPSJodG1sX2I3Njc4MTlmZTlmMDRkYmVhMWM4ZjIwYTk4OTgxZmY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDA4IFJlemVyd2F0IEJpYcWCYSBXb2RhIOKAkyBQaWVuaW55PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMjA0M2EzOWY0MTI0ZjlhODFiMjUwMmMxZDNiNWU4YS5zZXRDb250ZW50KGh0bWxfYjc2NzgxOWZlOWYwNGRiZWExYzhmMjBhOTg5ODFmZjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNWVjM2Q2YjU1MTI0Y2YxODEyOWY3YTdmMWQ4YWViMy5iaW5kUG9wdXAocG9wdXBfYjIwNDNhMzlmNDEyNGY5YTgxYjI1MDJjMWQzYjVlOGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODY0ZjZhOGM2YzU2NDMzYWFiM2FlNzdhNTQyNzQ3ZTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS4yNTM1NzYsMTkuOTMyMzU4OTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2JjOGJiOTk1ODJjZjQyOGU4M2JjMzM3ZTk0NTE5YTY3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzg2NGY2YThjNmM1NjQzM2FhYjNhZTc3YTU0Mjc0N2U1LnNldEljb24oaWNvbl9iYzhiYjk5NTgyY2Y0MjhlODNiYzMzN2U5NDUxOWE2Nyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MDI2YzUxZWY4OTI0NjJmYWQ0MTI5NWNkODE1ZDQ1MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNDViOGIzMjRlMDk0MDU1YWRkMjQ0M2UxNTljNzBiYiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTQ1YjhiMzI0ZTA5NDA1NWFkZDI0NDNlMTU5YzcwYmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwMDkgR2lld29udC1zemN6eXQgVGF0ciBaYWNob2RuaWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MDI2YzUxZWY4OTI0NjJmYWQ0MTI5NWNkODE1ZDQ1My5zZXRDb250ZW50KGh0bWxfMTQ1YjhiMzI0ZTA5NDA1NWFkZDI0NDNlMTU5YzcwYmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NjRmNmE4YzZjNTY0MzNhYWIzYWU3N2E1NDI3NDdlNS5iaW5kUG9wdXAocG9wdXBfNDAyNmM1MWVmODkyNDYyZmFkNDEyOTVjZDgxNWQ0NTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzk2ZWQyZDdjOGE3NGMwMmE2YTFmMGNkZDU5OWQ4MzMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS4yODE3NzYsMTkuOTY0MzY4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzJmMTk4MjIxODJlMzRlZGQ5MDg4ZGFiZDVhNWIyZGQxID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzc5NmVkMmQ3YzhhNzRjMDJhNmExZjBjZGQ1OTlkODMzLnNldEljb24oaWNvbl8yZjE5ODIyMTgyZTM0ZWRkOTA4OGRhYmQ1YTViMmRkMSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMDFiNjhmZmE2NmE0ODgyYmJjNzhjYTBiM2FlMWM3YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZTU0MTI0NDNmYzU0ODBhYWFlMTUwYmZmODgyMDJmOSA9ICQoJzxkaXYgaWQ9Imh0bWxfYmU1NDEyNDQzZmM1NDgwYWFhZTE1MGJmZjg4MjAyZjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwMTAgWmFrb3BhbmUgV2llbGthIMKgS3Jva2lldyA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwMWI2OGZmYTY2YTQ4ODJiYmM3OGNhMGIzYWUxYzdiLnNldENvbnRlbnQoaHRtbF9iZTU0MTI0NDNmYzU0ODBhYWFlMTUwYmZmODgyMDJmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc5NmVkMmQ3YzhhNzRjMDJhNmExZjBjZGQ1OTlkODMzLmJpbmRQb3B1cChwb3B1cF9jMDFiNjhmZmE2NmE0ODgyYmJjNzhjYTBiM2FlMWM3Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iODMyMTMzNzUwOWE0Y2M1YTU5M2JhOWFlMzg5ZjY4OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjM4MDM4NiwyMC41NTUzOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9mMzllOTY3NmJjYmQ0ZDlhYThmZTg0MmI2ZTQxMDNlZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iODMyMTMzNzUwOWE0Y2M1YTU5M2JhOWFlMzg5ZjY4OS5zZXRJY29uKGljb25fZjM5ZTk2NzZiY2JkNGQ5YWE4ZmU4NDJiNmU0MTAzZWUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjZlZTIxMWU2ZGYyNDY3N2IzODFmNDUzODdkZGM5OWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTVlZTY0YWIyYzZkNDkyZmEzYjU0OTQwNzU2N2FjNDUgPSAkKCc8ZGl2IGlkPSJodG1sXzk1ZWU2NGFiMmM2ZDQ5MmZhM2I1NDk0MDc1NjdhYzQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDExIFd5c29raWUgU2thxYJraS1uYWp3ecW8c3p5IHN6Y3p5dCBQaWVuaW48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2ZWUyMTFlNmRmMjQ2NzdiMzgxZjQ1Mzg3ZGRjOTljLnNldENvbnRlbnQoaHRtbF85NWVlNjRhYjJjNmQ0OTJmYTNiNTQ5NDA3NTY3YWM0NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I4MzIxMzM3NTA5YTRjYzVhNTkzYmE5YWUzODlmNjg5LmJpbmRQb3B1cChwb3B1cF9iNmVlMjExZTZkZjI0Njc3YjM4MWY0NTM4N2RkYzk5Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83YzJlOGU5NDliZGE0NzRiYmE5NTIxNzJjYWFlZDAxNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjQzOTEzMSwyMC40ODU2NDVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMmVhNDY3OGQ1NWRhNDdmZThjYWVjZWYyODdjNTFkOTcgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfN2MyZThlOTQ5YmRhNDc0YmJhOTUyMTcyY2FhZWQwMTQuc2V0SWNvbihpY29uXzJlYTQ2NzhkNTVkYTQ3ZmU4Y2FlY2VmMjg3YzUxZDk3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk0MWE1NzFlMDE4MjRiNTk4MjlmODM1ODkwMzA3NjhhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI1YWM5MzIzZGJmMjQ2Njc5ZDcyZGNlMzE2MzBlNjgzID0gJCgnPGRpdiBpZD0iaHRtbF8yNWFjOTMyM2RiZjI0NjY3OWQ3MmRjZTMxNjMwZTY4MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDAxMiBCYWPDs3drYSBwb2QgQmVyZcWbbmlraWVtIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTQxYTU3MWUwMTgyNGI1OTgyOWY4MzU4OTAzMDc2OGEuc2V0Q29udGVudChodG1sXzI1YWM5MzIzZGJmMjQ2Njc5ZDcyZGNlMzE2MzBlNjgzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2MyZThlOTQ5YmRhNDc0YmJhOTUyMTcyY2FhZWQwMTQuYmluZFBvcHVwKHBvcHVwXzk0MWE1NzFlMDE4MjRiNTk4MjlmODM1ODkwMzA3NjhhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzcwOTBkZjM5YTk4YzQ4YmI4ZDFhMDM1NjBlNmI4MmNjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNDE5MTgyLDIwLjQ1ODEwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81YTYzMTU0Nzc2ZjE0YjQzYmEyNjlkMDUwM2M1ZWEzNyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83MDkwZGYzOWE5OGM0OGJiOGQxYTAzNTYwZTZiODJjYy5zZXRJY29uKGljb25fNWE2MzE1NDc3NmYxNGI0M2JhMjY5ZDA1MDNjNWVhMzcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzNmNWNjNTkzY2U0NDJjOGE2NDY4MzcxNzViNTU1MzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjFiNmEwYWFmN2E1NDJkZTlhMDNhNWY4ZDBkMWViZWYgPSAkKCc8ZGl2IGlkPSJodG1sXzIxYjZhMGFhZjdhNTQyZGU5YTAzYTVmOGQwZDFlYmVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDEzIFNjaHJvbmlza28gT3JsaWNhIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzNmNWNjNTkzY2U0NDJjOGE2NDY4MzcxNzViNTU1MzEuc2V0Q29udGVudChodG1sXzIxYjZhMGFhZjdhNTQyZGU5YTAzYTVmOGQwZDFlYmVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzA5MGRmMzlhOThjNDhiYjhkMWEwMzU2MGU2YjgyY2MuYmluZFBvcHVwKHBvcHVwXzczZjVjYzU5M2NlNDQyYzhhNjQ2ODM3MTc1YjU1NTMxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJjYmIyMzVjM2U5YzRmZDE5OWEwM2ZiY2I0MWJhNDIyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNDIxMjYyLDIwLjYyMzc2M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85YWQ5NjhmODY3MTQ0NDEzOGQyNjM1YzQ2NDhiZGZiNSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yY2JiMjM1YzNlOWM0ZmQxOTlhMDNmYmNiNDFiYTQyMi5zZXRJY29uKGljb25fOWFkOTY4Zjg2NzE0NDQxMzhkMjYzNWM0NjQ4YmRmYjUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTdiMWM3YTJiMDMxNDUwNDhjNmU0MjAyMDViODUxNTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWUyOWFhNDcyOGYxNDVkNWEwZThmMjkyNTNmZTlhNjggPSAkKCc8ZGl2IGlkPSJodG1sXzFlMjlhYTQ3MjhmMTQ1ZDVhMGU4ZjI5MjUzZmU5YTY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDE0IEJhY8Ozd2thIG5hIE9iaWR6eSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3YjFjN2EyYjAzMTQ1MDQ4YzZlNDIwMjA1Yjg1MTU5LnNldENvbnRlbnQoaHRtbF8xZTI5YWE0NzI4ZjE0NWQ1YTBlOGYyOTI1M2ZlOWE2OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJjYmIyMzVjM2U5YzRmZDE5OWEwM2ZiY2I0MWJhNDIyLmJpbmRQb3B1cChwb3B1cF9hN2IxYzdhMmIwMzE0NTA0OGM2ZTQyMDIwNWI4NTE1OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xNDU4YTcwYjliODk0NzcyYWEwMGU3ZWFkMWRkMGMzNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjI3MDI3OCwxOS45MzI1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2YyNmI5MWNhYTU2YTQ2NzVhMjRjYTU5MzE3MTZhMGJlID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzE0NThhNzBiOWI4OTQ3NzJhYTAwZTdlYWQxZGQwYzM0LnNldEljb24oaWNvbl9mMjZiOTFjYWE1NmE0Njc1YTI0Y2E1OTMxNzE2YTBiZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wM2ZkZmI2MDM2NWU0Yzk2YmNhZDdlMjZiNGIzZTQ0ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YTcyMDE4ZjM5Zjg0OThhOGY0ZDhmMmU4M2ZlNjI3MiA9ICQoJzxkaXYgaWQ9Imh0bWxfOGE3MjAxOGYzOWY4NDk4YThmNGQ4ZjJlODNmZTYyNzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwMTUgRG9saW5hIFN0csSFxbx5c2thIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDNmZGZiNjAzNjVlNGM5NmJjYWQ3ZTI2YjRiM2U0NGYuc2V0Q29udGVudChodG1sXzhhNzIwMThmMzlmODQ5OGE4ZjRkOGYyZTgzZmU2MjcyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTQ1OGE3MGI5Yjg5NDc3MmFhMDBlN2VhZDFkZDBjMzQuYmluZFBvcHVwKHBvcHVwXzAzZmRmYjYwMzY1ZTRjOTZiY2FkN2UyNmI0YjNlNDRmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E0ZDk4NmJiNWI3ODRlMThhMTMxYzUyZjViOTlkYjU2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNTQzMDcsMjAuMTExMDc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2Q1ZjlhZjVlMzI2YjQ2YWViZmQ0NWEwNTRiYzRiYTBjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2E0ZDk4NmJiNWI3ODRlMThhMTMxYzUyZjViOTlkYjU2LnNldEljb24oaWNvbl9kNWY5YWY1ZTMyNmI0NmFlYmZkNDVhMDU0YmM0YmEwYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YzMxNDlkYjBkNWE0ZTllYmJkMzFkMDcwMTdiMDIxNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMzQwMGFiMTFiZmU0YzYxODIzNGFkOWQ0Y2Q4ZjMxNCA9ICQoJzxkaXYgaWQ9Imh0bWxfYTM0MDBhYjExYmZlNGM2MTgyMzRhZDlkNGNkOGYzMTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwMTYgVHVyYmFjeiDigJMgbmFqd3nFvHN6eSBzemN6eXQgR29yY8OzdzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGMzMTQ5ZGIwZDVhNGU5ZWJiZDMxZDA3MDE3YjAyMTcuc2V0Q29udGVudChodG1sX2EzNDAwYWIxMWJmZTRjNjE4MjM0YWQ5ZDRjZDhmMzE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTRkOTg2YmI1Yjc4NGUxOGExMzFjNTJmNWI5OWRiNTYuYmluZFBvcHVwKHBvcHVwXzRjMzE0OWRiMGQ1YTRlOWViYmQzMWQwNzAxN2IwMjE3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFmZmNjNjU4MjgyNTRkOGI4NjRjNGMyMGEzYTEyMWExID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNDc5MTA2LDIwLjEzMjE5Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8xMTgxZjliYzI3YmQ0ZDFmOWQyNWUwNGMxNDJiNDBjMCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xZmZjYzY1ODI4MjU0ZDhiODY0YzRjMjBhM2ExMjFhMS5zZXRJY29uKGljb25fMTE4MWY5YmMyN2JkNGQxZjlkMjVlMDRjMTQyYjQwYzApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTEyNmU5MzcxYWM3NGQzZjg1NTMwMTM1MjdlOThhZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjEwMGU4MDM2ZDU3NDYzNGJhNzY2OTlmNDgxM2EzZWUgPSAkKCc8ZGl2IGlkPSJodG1sXzIxMDBlODAzNmQ1NzQ2MzRiYTc2Njk5ZjQ4MTNhM2VlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDE4IEl6YmEgUGFtacSZY2kga3MuIHByb2YuIEouIFRpc2NobmVyYSB3IMWBb3B1c3puZWo8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UxMjZlOTM3MWFjNzRkM2Y4NTUzMDEzNTI3ZTk4YWRiLnNldENvbnRlbnQoaHRtbF8yMTAwZTgwMzZkNTc0NjM0YmE3NjY5OWY0ODEzYTNlZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFmZmNjNjU4MjgyNTRkOGI4NjRjNGMyMGEzYTEyMWExLmJpbmRQb3B1cChwb3B1cF9lMTI2ZTkzNzFhYzc0ZDNmODU1MzAxMzUyN2U5OGFkYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81YmFkYmUwNTM1MDY0NDQ1OWM5NWFjM2FlOTA5OTZjNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjU0NDU5MywyMC4xMTkwNTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOGM4ZGE0ODU1NTMyNDVhMWJkYmRhZWQyMWYwMDIxYTQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNWJhZGJlMDUzNTA2NDQ0NTljOTVhYzNhZTkwOTk2YzYuc2V0SWNvbihpY29uXzhjOGRhNDg1NTUzMjQ1YTFiZGJkYWVkMjFmMDAyMWE0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YxNmFkMjg0MmU4YzQ5ZWRiYWRjZWM4ZTY4Y2RlZGY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlOTY2N2JhYjMyNTRkMzI4YWI4ZDY5ODNjN2U4N2U2ID0gJCgnPGRpdiBpZD0iaHRtbF9lZTk2NjdiYWIzMjU0ZDMyOGFiOGQ2OTgzYzdlODdlNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDAxOSBTY2hyb25pc2tvIG5hIFR1cmJhY3p1IDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjE2YWQyODQyZThjNDllZGJhZGNlYzhlNjhjZGVkZjcuc2V0Q29udGVudChodG1sX2VlOTY2N2JhYjMyNTRkMzI4YWI4ZDY5ODNjN2U4N2U2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWJhZGJlMDUzNTA2NDQ0NTljOTVhYzNhZTkwOTk2YzYuYmluZFBvcHVwKHBvcHVwX2YxNmFkMjg0MmU4YzQ5ZWRiYWRjZWM4ZTY4Y2RlZGY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZjNTQxZjg2ZGM4ZTQ3OGRiODE3NGU4NzcxYjA2MTQ3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNzgyODE2LDIwLjAyMzYxM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80ZTY3MDgyNTRiNzA0YWJiODhjNGFmMWJiYzNlZjQyMyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82YzU0MWY4NmRjOGU0NzhkYjgxNzRlODc3MWIwNjE0Ny5zZXRJY29uKGljb25fNGU2NzA4MjU0YjcwNGFiYjg4YzRhZjFiYmMzZWY0MjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTNkYzIzNTMxZTM3NGM5ZGExYTg3OTBjOTRhMmM4NmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGI5N2NkYzVkMTVlNGJmZjk2ZjNmYzY5MzFkMjFhZTIgPSAkKCc8ZGl2IGlkPSJodG1sXzhiOTdjZGM1ZDE1ZTRiZmY5NmYzZmM2OTMxZDIxYWUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDIwIFNjaHJvbmlza28gbmEgS3VkxYJhY3phY2ggPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hM2RjMjM1MzFlMzc0YzlkYTFhODc5MGM5NGEyYzg2ZC5zZXRDb250ZW50KGh0bWxfOGI5N2NkYzVkMTVlNGJmZjk2ZjNmYzY5MzFkMjFhZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82YzU0MWY4NmRjOGU0NzhkYjgxNzRlODc3MWIwNjE0Ny5iaW5kUG9wdXAocG9wdXBfYTNkYzIzNTMxZTM3NGM5ZGExYTg3OTBjOTRhMmM4NmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGJjYjQ0NWY1ZTA3NGNhMDg4MjA1NDY5ZmRlMzFjMTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS42NTMzNjMsMTkuOTkxODg4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzU4MDlhMjYxNmU5NTQwMTBhN2YwYjBjZDUwMDlhNTUzID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzBiY2I0NDVmNWUwNzRjYTA4ODIwNTQ2OWZkZTMxYzExLnNldEljb24oaWNvbl81ODA5YTI2MTZlOTU0MDEwYTdmMGIwY2Q1MDA5YTU1Myk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYjUxNGU0MGU4ZDg0NWRlYjUwMGIwMDcwYWU0MmM0MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMGJlMTJkNjMxY2E0OTc2OTNiNTZhMjQ1Y2VhMzliNSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTBiZTEyZDYzMWNhNDk3NjkzYjU2YTI0NWNlYTM5YjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwMjEgU2Nocm9uaXNrbyBuYSBMdWJvbml1IFdpZWxraW0gPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYjUxNGU0MGU4ZDg0NWRlYjUwMGIwMDcwYWU0MmM0My5zZXRDb250ZW50KGh0bWxfYTBiZTEyZDYzMWNhNDk3NjkzYjU2YTI0NWNlYTM5YjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wYmNiNDQ1ZjVlMDc0Y2EwODgyMDU0NjlmZGUzMWMxMS5iaW5kUG9wdXAocG9wdXBfMWI1MTRlNDBlOGQ4NDVkZWI1MDBiMDA3MGFlNDJjNDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODJiYThjZWZlZmNjNDQ0YmFmMDg3MDNiZDI0NmVmNjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS40OTIwNzMsMjAuNzE2MjE3OTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzhlZGE4M2EzZmVhZjQ3NWY4MDZhMTlmOTUxNzIyZmExID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzgyYmE4Y2VmZWZjYzQ0NGJhZjA4NzAzYmQyNDZlZjYxLnNldEljb24oaWNvbl84ZWRhODNhM2ZlYWY0NzVmODA2YTE5Zjk1MTcyMmZhMSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81OGIyN2UzMGMwZTY0NGNjYTA2OTc1YTUyNDQ1OWM3YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMDJiMjM5YTcyNWI0MWE1YTRiNjBhMTViZWNiYzRlZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMDAyYjIzOWE3MjViNDFhNWE0YjYwYTE1YmVjYmM0ZWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwMjIgQ2hhdGEgZ8OzcnNrYSBDeXJsYSAgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81OGIyN2UzMGMwZTY0NGNjYTA2OTc1YTUyNDQ1OWM3Yy5zZXRDb250ZW50KGh0bWxfMDAyYjIzOWE3MjViNDFhNWE0YjYwYTE1YmVjYmM0ZWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84MmJhOGNlZmVmY2M0NDRiYWYwODcwM2JkMjQ2ZWY2MS5iaW5kUG9wdXAocG9wdXBfNThiMjdlMzBjMGU2NDRjY2EwNjk3NWE1MjQ0NTljN2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDI3MGI3MTZlYmZjNDczM2FjN2EzN2QyYWEwNzY3YTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS40NjYyNjksMjAuNTU1OTEzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2UzY2NiMzExY2NmMTRkNzJhOTY5MWU2NTFiYmJkNWQ3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2QyNzBiNzE2ZWJmYzQ3MzNhYzdhMzdkMmFhMDc2N2E0LnNldEljb24oaWNvbl9lM2NjYjMxMWNjZjE0ZDcyYTk2OTFlNjUxYmJiZDVkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80OTIyNzdkMTMwZTY0MGY3YmI3Y2VkMDc2MWE2NjRiYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZjlkNGYzZWYxYjc0MTA1YmJlMzA3NzI2YTM0MzU3MSA9ICQoJzxkaXYgaWQ9Imh0bWxfNWY5ZDRmM2VmMWI3NDEwNWJiZTMwNzcyNmEzNDM1NzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwMjMgU2Nocm9uaXNrbyBuYSBQcnplY2h5YmllIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDkyMjc3ZDEzMGU2NDBmN2JiN2NlZDA3NjFhNjY0YmIuc2V0Q29udGVudChodG1sXzVmOWQ0ZjNlZjFiNzQxMDViYmUzMDc3MjZhMzQzNTcxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDI3MGI3MTZlYmZjNDczM2FjN2EzN2QyYWEwNzY3YTQuYmluZFBvcHVwKHBvcHVwXzQ5MjI3N2QxMzBlNjQwZjdiYjdjZWQwNzYxYTY2NGJiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA5YzVhZDc1NzcwYTRkMjJiMTBkYzczY2UwMjBlNjA0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNDM1Nzk3LDIwLjg0ODMwNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zZWExNzhlYzk0NGQ0YzU0YjlmN2U5NTE3MGFkN2M3ZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wOWM1YWQ3NTc3MGE0ZDIyYjEwZGM3M2NlMDIwZTYwNC5zZXRJY29uKGljb25fM2VhMTc4ZWM5NDRkNGM1NGI5ZjdlOTUxNzBhZDdjN2QpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWNlNjM0ZTA0ZDdkNDNlMWI5NDA3ZjdhODI0OTFjNjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2U0ZjJhYTA5NjcxNGU2NjhjZGMxZmJhODAxMmJkMzUgPSAkKCc8ZGl2IGlkPSJodG1sXzdlNGYyYWEwOTY3MTRlNjY4Y2RjMWZiYTgwMTJiZDM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDI0IEJhY8Ozd2thIE5hZCBXaWVyY2hvbWzEhSAgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lY2U2MzRlMDRkN2Q0M2UxYjk0MDdmN2E4MjQ5MWM2My5zZXRDb250ZW50KGh0bWxfN2U0ZjJhYTA5NjcxNGU2NjhjZGMxZmJhODAxMmJkMzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wOWM1YWQ3NTc3MGE0ZDIyYjEwZGM3M2NlMDIwZTYwNC5iaW5kUG9wdXAocG9wdXBfZWNlNjM0ZTA0ZDdkNDNlMWI5NDA3ZjdhODI0OTFjNjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjJlYzkzZWViMDkyNDQ4ZGFjNzE5ZGE1NDgzOGMyZjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS44NDM0NzgsMjEuMDk3MDUxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2IxMjRiNTNiZDU2YzQ1NDM4OTRkZGRkNDljZjc4N2RhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2YyZWM5M2VlYjA5MjQ0OGRhYzcxOWRhNTQ4MzhjMmYzLnNldEljb24oaWNvbl9iMTI0YjUzYmQ1NmM0NTQzODk0ZGRkZDQ5Y2Y3ODdkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZmY2OTRlNWY1ZWI0ZjczOTQ0ZWJiNWQxYjg2NzAwOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Y2VkNDJkMmY3YmM0ODQwYTFhMmEyNmJhOGY1ZDhhNCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWNlZDQyZDJmN2JjNDg0MGExYTJhMjZiYThmNWQ4YTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwMzMgTmEgQnJ6YW5jZSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmZjY5NGU1ZjVlYjRmNzM5NDRlYmI1ZDFiODY3MDA4LnNldENvbnRlbnQoaHRtbF85Y2VkNDJkMmY3YmM0ODQwYTFhMmEyNmJhOGY1ZDhhNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YyZWM5M2VlYjA5MjQ0OGRhYzcxOWRhNTQ4MzhjMmYzLmJpbmRQb3B1cChwb3B1cF9kZmY2OTRlNWY1ZWI0ZjczOTQ0ZWJiNWQxYjg2NzAwOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yYzQzMDUwZTBmYTA0YWY5OTJkN2RjZDVhOTdkZjM1NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjQ3Mjc5NSwyMC44MTA0NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNDYzZmViZDZkZDczNDhhN2JlOGVjY2UzZjYxMzJiZWMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMmM0MzA1MGUwZmEwNGFmOTkyZDdkY2Q1YTk3ZGYzNTYuc2V0SWNvbihpY29uXzQ2M2ZlYmQ2ZGQ3MzQ4YTdiZThlY2NlM2Y2MTMyYmVjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjMmQ5YWIxODZjMjQ3NDNiNmFkNTViNDk4NzgxZmQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZkYzIxYWE1ZDM1NDQwMGY4M2RmZDFjNjJkZjEzNGQ3ID0gJCgnPGRpdiBpZD0iaHRtbF9mZGMyMWFhNWQzNTQ0MDBmODNkZmQxYzYyZGYxMzRkNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDAzOCBIYWxhIMWBYWJvd3NrYSAgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYzJkOWFiMTg2YzI0NzQzYjZhZDU1YjQ5ODc4MWZkOC5zZXRDb250ZW50KGh0bWxfZmRjMjFhYTVkMzU0NDAwZjgzZGZkMWM2MmRmMTM0ZDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yYzQzMDUwZTBmYTA0YWY5OTJkN2RjZDVhOTdkZjM1Ni5iaW5kUG9wdXAocG9wdXBfMmMyZDlhYjE4NmMyNDc0M2I2YWQ1NWI0OTg3ODFmZDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTg3ZmJjNjA0ZjY0NDdkNThhY2ZiZjAxN2Y2ZTNlZWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS41NjAwNTIsMjAuMDM5NzM4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2Y4ZGMxYzg5MzBmMTQ5YjdiMmI2MzQwMzQ3MDZiMzU3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2U4N2ZiYzYwNGY2NDQ3ZDU4YWNmYmYwMTdmNmUzZWVkLnNldEljb24oaWNvbl9mOGRjMWM4OTMwZjE0OWI3YjJiNjM0MDM0NzA2YjM1Nyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OWE0YmE3MjY0MTc0YmEwOWQwZmY0ODYxZDEyZjQ4NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYzY3MzJiYmU4MmI0M2Q0OWE0MGFhM2U3MDVhNDliMyA9ICQoJzxkaXYgaWQ9Imh0bWxfYWM2NzMyYmJlODJiNDNkNDlhNDBhYTNlNzA1YTQ5YjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwNjMgU2Nocm9uaXNrbyBQVFRLIG5hIFN0YXJ5Y2ggV2llcmNoYWNoICA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5YTRiYTcyNjQxNzRiYTA5ZDBmZjQ4NjFkMTJmNDg2LnNldENvbnRlbnQoaHRtbF9hYzY3MzJiYmU4MmI0M2Q0OWE0MGFhM2U3MDVhNDliMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U4N2ZiYzYwNGY2NDQ3ZDU4YWNmYmYwMTdmNmUzZWVkLmJpbmRQb3B1cChwb3B1cF84OWE0YmE3MjY0MTc0YmEwOWQwZmY0ODYxZDEyZjQ4Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZjc2ODgyZDNhYjQ0OWIyYTU1Y2M3MzllNWE4MWMzYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjU4Mjc5NiwyMC4wMDgwMTMwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZDNhYTM3MGVhYTMxNDIxM2JmZTMxMDA1OWQ3ZDA1ZGEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZGY3Njg4MmQzYWI0NDliMmE1NWNjNzM5ZTVhODFjM2Iuc2V0SWNvbihpY29uX2QzYWEzNzBlYWEzMTQyMTNiZmUzMTAwNTlkN2QwNWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE2NDE3MWIxY2MwYjRlNGY5NGE5YzMwNDM4MTg2NjYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JlYTZmOWMwZTBjYzRiMTY4NjRhMjcxMGU4NjY4N2YxID0gJCgnPGRpdiBpZD0iaHRtbF9iZWE2ZjljMGUwY2M0YjE2ODY0YTI3MTBlODY2ODdmMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA2NCBTY2hyb25pc2tvIG5hIE1hY2llam93ZWogIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTY0MTcxYjFjYzBiNGU0Zjk0YTljMzA0MzgxODY2NjMuc2V0Q29udGVudChodG1sX2JlYTZmOWMwZTBjYzRiMTY4NjRhMjcxMGU4NjY4N2YxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGY3Njg4MmQzYWI0NDliMmE1NWNjNzM5ZTVhODFjM2IuYmluZFBvcHVwKHBvcHVwXzE2NDE3MWIxY2MwYjRlNGY5NGE5YzMwNDM4MTg2NjYzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdjMWRiNjA2ZTk4NTQ5MThhZDE4Yzg5ZDJiMGExMWU3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNDU0NjU5LDIxLjUzNzU4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzIxYWQ0YmRlYjU5YjQ2OWZiMjA2ZThhN2QzZTgyODczID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzdjMWRiNjA2ZTk4NTQ5MThhZDE4Yzg5ZDJiMGExMWU3LnNldEljb24oaWNvbl8yMWFkNGJkZWI1OWI0NjlmYjIwNmU4YTdkM2U4Mjg3Myk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NzUyMWJiNDgyM2U0NTU0OTIzODcxNTUwYjg5NDY3NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNzc1ZjRjY2EyN2M0MTM2OTVhMmY0NjJkYTlhNWQ0MiA9ICQoJzxkaXYgaWQ9Imh0bWxfYTc3NWY0Y2NhMjdjNDEzNjk1YTJmNDYyZGE5YTVkNDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwNjcgU2Nocm9uaXNrbyBIYWpzdHJhIGtvxYJvIEtyZW1wbmVqIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDc1MjFiYjQ4MjNlNDU1NDkyMzg3MTU1MGI4OTQ2NzQuc2V0Q29udGVudChodG1sX2E3NzVmNGNjYTI3YzQxMzY5NWEyZjQ2MmRhOWE1ZDQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2MxZGI2MDZlOTg1NDkxOGFkMThjODlkMmIwYTExZTcuYmluZFBvcHVwKHBvcHVwXzQ3NTIxYmI0ODIzZTQ1NTQ5MjM4NzE1NTBiODk0Njc0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg2MzYwMmEwM2QwMzRiODI5ZDRkNGM3NjJmZjEzMWVhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuMzkwNjQ5LDIwLjUzNTc0M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iNGUxOGRmM2NkZTU0YWNjODA3ODMwOTQyYzIzYzA0NyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl84NjM2MDJhMDNkMDM0YjgyOWQ0ZDRjNzYyZmYxMzFlYS5zZXRJY29uKGljb25fYjRlMThkZjNjZGU1NGFjYzgwNzgzMDk0MmMyM2MwNDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDNjM2I4MjI5NjM5NDc2ZTg0YjhiMDJjMmNjYTRmM2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzMwMGZmOTZlNzQ1NGI1NjhmZThmYzU1NTVlZjJmYTIgPSAkKCc8ZGl2IGlkPSJodG1sX2MzMDBmZjk2ZTc0NTRiNTY4ZmU4ZmM1NTU1ZWYyZmEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDY4IEfDs3Jza2kgT8Wbcm9kZWsgcG9kIER1cmJhc3prxIUgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kM2MzYjgyMjk2Mzk0NzZlODRiOGIwMmMyY2NhNGYzZS5zZXRDb250ZW50KGh0bWxfYzMwMGZmOTZlNzQ1NGI1NjhmZThmYzU1NTVlZjJmYTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NjM2MDJhMDNkMDM0YjgyOWQ0ZDRjNzYyZmYxMzFlYS5iaW5kUG9wdXAocG9wdXBfZDNjM2I4MjI5NjM5NDc2ZTg0YjhiMDJjMmNjYTRmM2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmZiMWY1MGZkMGExNGY2OTg5MDNlN2M2NTVjNTdkMWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS4zOSwyMC4wOTc3Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81NzA2YWRmYjRiYjI0YzNhOTUxNmM2Mzc0NDM3MDc4MCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yZmIxZjUwZmQwYTE0ZjY5ODkwM2U3YzY1NWM1N2QxZi5zZXRJY29uKGljb25fNTcwNmFkZmI0YmIyNGMzYTk1MTZjNjM3NDQzNzA3ODApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTg4MGUwM2FmNzFmNGQzNTkzZTJkYWM4YjA0NTBiMDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTRmM2FlYmZlZjcyNGZiOWIwZjNkNTYwMjExM2U0YjYgPSAkKCc8ZGl2IGlkPSJodG1sXzk0ZjNhZWJmZWY3MjRmYjliMGYzZDU2MDIxMTNlNGI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTAxIEtvdGVsbmljYSBCaWHFgmN6YcWEc2thICA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U4ODBlMDNhZjcxZjRkMzU5M2UyZGFjOGIwNDUwYjAyLnNldENvbnRlbnQoaHRtbF85NGYzYWViZmVmNzI0ZmI5YjBmM2Q1NjAyMTEzZTRiNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJmYjFmNTBmZDBhMTRmNjk4OTAzZTdjNjU1YzU3ZDFmLmJpbmRQb3B1cChwb3B1cF9lODgwZTAzYWY3MWY0ZDM1OTNlMmRhYzhiMDQ1MGIwMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iN2I0ZDllOTUyNDE0YjY1ODE3ZTY4ZmZhNDlhNTI0NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjcxOTE1MiwyMC4xNTE3NTc5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMGNlYWVhMDMzZThjNGVhZmFhMDQ2YWE4NDE0YzczNTggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjdiNGQ5ZTk1MjQxNGI2NTgxN2U2OGZmYTQ5YTUyNDYuc2V0SWNvbihpY29uXzBjZWFlYTAzM2U4YzRlYWZhYTA0NmFhODQxNGM3MzU4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NhODA2Yzk0ODBiODQzNWI5ZmZlZjVkZTI2N2FlOTRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlkNmY5MThiYjdjZTRlNTU4ZjQyMGUwMmExNzc4MDhiID0gJCgnPGRpdiBpZD0iaHRtbF85ZDZmOTE4YmI3Y2U0ZTU1OGY0MjBlMDJhMTc3ODA4YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDEwMiDFmm5pZcW8bmljYSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NhODA2Yzk0ODBiODQzNWI5ZmZlZjVkZTI2N2FlOTRjLnNldENvbnRlbnQoaHRtbF85ZDZmOTE4YmI3Y2U0ZTU1OGY0MjBlMDJhMTc3ODA4Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I3YjRkOWU5NTI0MTRiNjU4MTdlNjhmZmE0OWE1MjQ2LmJpbmRQb3B1cChwb3B1cF9jYTgwNmM5NDgwYjg0MzViOWZmZWY1ZGUyNjdhZTk0Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iMTQ0ZWFmNjNmYWY0NzU2YmE3NjZhZDQ2NjY4NzI5MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjQwNzY4MiwyMC45MzM0MDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNzNiYjg4ZTU2ZmU2NDQ0MjgyZTEwZWI3YjkyZWQ5NTEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjE0NGVhZjYzZmFmNDc1NmJhNzY2YWQ0NjY2ODcyOTEuc2V0SWNvbihpY29uXzczYmI4OGU1NmZlNjQ0NDI4MmUxMGViN2I5MmVkOTUxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ1ZTFlYTc0ZmQ4NTQxNTNhMWUxOTZiZDgxYTIwNjhhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc1NDU3YjQzM2Y3ZTQ1N2RiNDk3MWI2ZGMyOTYxZmRhID0gJCgnPGRpdiBpZD0iaHRtbF83NTQ1N2I0MzNmN2U0NTdkYjQ5NzFiNmRjMjk2MWZkYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDEwMyBKYXdvcnp5bmEgS3J5bmlja2EgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NWUxZWE3NGZkODU0MTUzYTFlMTk2YmQ4MWEyMDY4YS5zZXRDb250ZW50KGh0bWxfNzU0NTdiNDMzZjdlNDU3ZGI0OTcxYjZkYzI5NjFmZGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMTQ0ZWFmNjNmYWY0NzU2YmE3NjZhZDQ2NjY4NzI5MS5iaW5kUG9wdXAocG9wdXBfNDVlMWVhNzRmZDg1NDE1M2ExZTE5NmJkODFhMjA2OGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTU1MDI3ZDU4OWUwNDVlYTk3NDgwZjAxNWFlYTdmZDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS4zMzAyMywyMC4wOTI2OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl84MWY5MzJhNWIwM2Y0NDAxYTFmYjRhMWU5NmFhZTg0MSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lNTUwMjdkNTg5ZTA0NWVhOTc0ODBmMDE1YWVhN2ZkNC5zZXRJY29uKGljb25fODFmOTMyYTViMDNmNDQwMWExZmI0YTFlOTZhYWU4NDEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjUyMGIxOTY1YzRhNDllODhlNzZkMmYwMzdmN2RiNWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTdlY2ZkZGNhMmJkNGE1MjhiOTgxMzhhOTU2YjRkODQgPSAkKCc8ZGl2IGlkPSJodG1sX2E3ZWNmZGRjYTJiZDRhNTI4Yjk4MTM4YTk1NmI0ZDg0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTExIEfDs3Jza2kgT8Wbcm9kZWsgSmXFumR6aWVja2kgdyBCdWtvd2luaWUgVGF0cnphxYRza2llaiA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1MjBiMTk2NWM0YTQ5ZTg4ZTc2ZDJmMDM3ZjdkYjVkLnNldENvbnRlbnQoaHRtbF9hN2VjZmRkY2EyYmQ0YTUyOGI5ODEzOGE5NTZiNGQ4NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U1NTAyN2Q1ODllMDQ1ZWE5NzQ4MGYwMTVhZWE3ZmQ0LmJpbmRQb3B1cChwb3B1cF9iNTIwYjE5NjVjNGE0OWU4OGU3NmQyZjAzN2Y3ZGI1ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84YzY2OWQyMTAzYjA0ZDIwYWQ1MTQyNmY1ZWIyYjZmNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjMzOTUxOSwyMC4xMDE5NzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNzM0NTkwODAzZmRmNDQ4YjliNWRjOGZlMDdlMDNlZTEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOGM2NjlkMjEwM2IwNGQyMGFkNTE0MjZmNWViMmI2ZjQuc2V0SWNvbihpY29uXzczNDU5MDgwM2ZkZjQ0OGI5YjVkYzhmZTA3ZTAzZWUxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M0NDlhMGU5MGRkMDRlMTBhOWMxODNlZTI3NGNmNmRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NkNmE0Yjg4ZGVhOTQ4ZDZiZWZmMGJjYzIzZTNmMTFlID0gJCgnPGRpdiBpZD0iaHRtbF9jZDZhNGI4OGRlYTk0OGQ2YmVmZjBiY2MyM2UzZjExZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE4OSBEb20gTHVkb3d5IHcgQnVrb3dpbmllIFRhdHJ6YcWEc2tpZWo8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M0NDlhMGU5MGRkMDRlMTBhOWMxODNlZTI3NGNmNmRhLnNldENvbnRlbnQoaHRtbF9jZDZhNGI4OGRlYTk0OGQ2YmVmZjBiY2MyM2UzZjExZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhjNjY5ZDIxMDNiMDRkMjBhZDUxNDI2ZjVlYjJiNmY0LmJpbmRQb3B1cChwb3B1cF9jNDQ5YTBlOTBkZDA0ZTEwYTljMTgzZWUyNzRjZjZkYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83ODY1MDFlY2RjY2I0MWEwOTVmMzM2MTE1MzZiNmVlYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5Ljc2Njg4OSwyMC4wNTk1OTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMGUwYzc5MmUxYTA4NDliN2ExNDI5M2FmYjk1YzM1MDkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzg2NTAxZWNkY2NiNDFhMDk1ZjMzNjExNTM2YjZlZWEuc2V0SWNvbihpY29uXzBlMGM3OTJlMWEwODQ5YjdhMTQyOTNhZmI5NWMzNTA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhNTdmNjI2YjZlYTRhNDZhZTc0M2RkM2I1ZTdkMjk1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y0NTkxNDAxMWM3MTQ4M2U5N2RlOTRmOTEwYmQ2MTdkID0gJCgnPGRpdiBpZD0iaHRtbF9mNDU5MTQwMTFjNzE0ODNlOTdkZTk0ZjkxMGJkNjE3ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE5MCBPYnNlcndhdG9yaXVtIEFzdHJvbm9taWN6bmUgdyBXxJlnbMOzd2NlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYTU3ZjYyNmI2ZWE0YTQ2YWU3NDNkZDNiNWU3ZDI5NS5zZXRDb250ZW50KGh0bWxfZjQ1OTE0MDExYzcxNDgzZTk3ZGU5NGY5MTBiZDYxN2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83ODY1MDFlY2RjY2I0MWEwOTVmMzM2MTE1MzZiNmVlYS5iaW5kUG9wdXAocG9wdXBfMmE1N2Y2MjZiNmVhNGE0NmFlNzQzZGQzYjVlN2QyOTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjMwYWM3NDYzOWQyNDExMDk2NzAyMzgyOTdhYWE1ZjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS44MzMxNzMsMjAuNjc3MjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjYyNTkyZWE0ZTkxNGUxM2EzNGQ2OWVhM2YyYTkxMmEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjMwYWM3NDYzOWQyNDExMDk2NzAyMzgyOTdhYWE1ZjEuc2V0SWNvbihpY29uXzY2MjU5MmVhNGU5MTRlMTNhMzRkNjllYTNmMmE5MTJhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEwZmFiNmJkNWVmMjQxN2ZhYTkwODIwZWU0MzhjMDJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyNTJjNWQ3NzVmMDRhMTM4YTNlYzY0ZDkyZGMxYzIzID0gJCgnPGRpdiBpZD0iaHRtbF82MjUyYzVkNzc1ZjA0YTEzOGEzZWM2NGQ5MmRjMWMyMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE5MSBaYW1layB3IEN6Y2hvd2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMGZhYjZiZDVlZjI0MTdmYWE5MDgyMGVlNDM4YzAyYy5zZXRDb250ZW50KGh0bWxfNjI1MmM1ZDc3NWYwNGExMzhhM2VjNjRkOTJkYzFjMjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMzBhYzc0NjM5ZDI0MTEwOTY3MDIzODI5N2FhYTVmMS5iaW5kUG9wdXAocG9wdXBfMTBmYWI2YmQ1ZWYyNDE3ZmFhOTA4MjBlZTQzOGMwMmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGQ4ZDE3N2YzZDVlNDBiYjlhYzVjMzlkMjllMjg5YzggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS43OTAwNDEsMjAuNDQ5NzQ1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzBkNWY1YjdjODA1MDQ1NGY5M2M5NzA1Mjc2Yzk5OTJjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzRkOGQxNzdmM2Q1ZTQwYmI5YWM1YzM5ZDI5ZTI4OWM4LnNldEljb24oaWNvbl8wZDVmNWI3YzgwNTA0NTRmOTNjOTcwNTI3NmM5OTkyYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMmQ0MTNiN2I1YzM0YmVlYjk0NWQzOGJhZTYwMWFmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZGQ3ZmI3NDk3MzM0YzhiYmNmNDkxMDliYWY5MjQ4ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMWRkN2ZiNzQ5NzMzNGM4YmJjZjQ5MTA5YmFmOTI0OGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxOTIgU3prb2xuZSBTY2hyb25pc2tvIE3Fgm9kemllxbxvd2UgdyBSb3pkemllbHU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAyZDQxM2I3YjVjMzRiZWViOTQ1ZDM4YmFlNjAxYWY4LnNldENvbnRlbnQoaHRtbF8xZGQ3ZmI3NDk3MzM0YzhiYmNmNDkxMDliYWY5MjQ4ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRkOGQxNzdmM2Q1ZTQwYmI5YWM1YzM5ZDI5ZTI4OWM4LmJpbmRQb3B1cChwb3B1cF8wMmQ0MTNiN2I1YzM0YmVlYjk0NWQzOGJhZTYwMWFmOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82ZGZlNDY4ZTFiNmQ0YTUzYjRjZmE2MDE2YjVmOTZhZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjUzNDA1MiwyMS4wMzI3MTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTkxNTAyMTY2YWQ5NDBhOWI5Y2JlOGE0YzI5NzIzZmIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNmRmZTQ2OGUxYjZkNGE1M2I0Y2ZhNjAxNmI1Zjk2YWYuc2V0SWNvbihpY29uX2E5MTUwMjE2NmFkOTQwYTliOWNiZThhNGMyOTcyM2ZiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UxZDQ5YjhkODk2NzQwNjA4NGI3MzdjYmU1MmFhZTJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY1ZGI2NTZlZDQ1MTQyNjY5N2FiMTBlMmY5YjgzZmNjID0gJCgnPGRpdiBpZD0iaHRtbF82NWRiNjU2ZWQ0NTE0MjY2OTdhYjEwZTJmOWI4M2ZjYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE5MyBDZXJraWV3IMWady4gTWljaGHFgmEgQXJjaGFuaW/FgmEgdyBCcnVuYXJhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UxZDQ5YjhkODk2NzQwNjA4NGI3MzdjYmU1MmFhZTJhLnNldENvbnRlbnQoaHRtbF82NWRiNjU2ZWQ0NTE0MjY2OTdhYjEwZTJmOWI4M2ZjYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZkZmU0NjhlMWI2ZDRhNTNiNGNmYTYwMTZiNWY5NmFmLmJpbmRQb3B1cChwb3B1cF9lMWQ0OWI4ZDg5Njc0MDYwODRiNzM3Y2JlNTJhYWUyYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lZDJkZmEzZGMwNWQ0OTdlOTIyNzU0NjI5MWFhNjliNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjU1OTY3MywyMC42NDg0MDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzI2MTAwYmRlZTBhNDQ0MTliYTZiYzBmNGVmMTYwNWQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZWQyZGZhM2RjMDVkNDk3ZTkyMjc1NDYyOTFhYTY5YjQuc2V0SWNvbihpY29uX2MyNjEwMGJkZWUwYTQ0NDE5YmE2YmMwZjRlZjE2MDVkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U4Y2Q1ZDJmZjg4MzQyYWFiZmE4YjYwYWNiZDdiODYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1NDUyMDdjOTNjNjQwOTdiYmY1Nzc2MzEyNWE2ZDNlID0gJCgnPGRpdiBpZD0iaHRtbF8wNTQ1MjA3YzkzYzY0MDk3YmJmNTc3NjMxMjVhNmQzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE5NCBNdXpldW0gSmFuYSBQYXfFgmEgSUkgdyBTdGFyeW0gU8SFY3p1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOGNkNWQyZmY4ODM0MmFhYmZhOGI2MGFjYmQ3Yjg2My5zZXRDb250ZW50KGh0bWxfMDU0NTIwN2M5M2M2NDA5N2JiZjU3NzYzMTI1YTZkM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lZDJkZmEzZGMwNWQ0OTdlOTIyNzU0NjI5MWFhNjliNC5iaW5kUG9wdXAocG9wdXBfZThjZDVkMmZmODgzNDJhYWJmYThiNjBhY2JkN2I4NjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjMxODcxZDA1ZGVmNDBiNDllM2Q1ZTk5NmFhMWUwNzAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS45NTYwMTgsMjAuODM2NzY3MDAwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzRlZmIwM2UyOWI1ZDQ5MDZhNDRhMGM0Njg1MmVjNDc4ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzIzMTg3MWQwNWRlZjQwYjQ5ZTNkNWU5OTZhYTFlMDcwLnNldEljb24oaWNvbl80ZWZiMDNlMjliNWQ0OTA2YTQ0YTBjNDY4NTJlYzQ3OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mODY4YWM0NTViNGY0ZGQ5ODZkMDFlMzgxMDFkODgxMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMzI5ZTc3ZTRlMzU0OWU4OWRiNWNlYWViZDMyNjk1NCA9ICQoJzxkaXYgaWQ9Imh0bWxfZTMyOWU3N2U0ZTM1NDllODlkYjVjZWFlYmQzMjY5NTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxOTUgS29sZWdpYXRhIMWady4gV2F3cnp5xYRjYSB3IFdvam5pY3p1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mODY4YWM0NTViNGY0ZGQ5ODZkMDFlMzgxMDFkODgxMS5zZXRDb250ZW50KGh0bWxfZTMyOWU3N2U0ZTM1NDllODlkYjVjZWFlYmQzMjY5NTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yMzE4NzFkMDVkZWY0MGI0OWUzZDVlOTk2YWExZTA3MC5iaW5kUG9wdXAocG9wdXBfZjg2OGFjNDU1YjRmNGRkOTg2ZDAxZTM4MTAxZDg4MTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDZhZmRlMWUyZGRhNDFmMWE1NjAxMzM1NzAwMTFlMTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS42MjU1NTYsMjAuOTQ1ODMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2M2OGQ3MTcwZDRhZTQxYmViOWUwNTA0NzA2MjRhYTE2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzQ2YWZkZTFlMmRkYTQxZjFhNTYwMTMzNTcwMDExZTE5LnNldEljb24oaWNvbl9jNjhkNzE3MGQ0YWU0MWJlYjllMDUwNDcwNjI0YWExNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MGU5MWJiMzk0MGY0NzFhYmUzMzdjNmU3ZTdhYWM4NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNzUzZTVjZDBhY2U0OGFkODI4YjczYWFiZWE3MTMyZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZTc1M2U1Y2QwYWNlNDhhZDgyOGI3M2FhYmVhNzEzMmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxOTYgQmF6eWxpa2EgTW5pZWpzemEgxZp3LiBLYXRhcnp5bnkgQWwuIHcgR3J5Ym93aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQwZTkxYmIzOTQwZjQ3MWFiZTMzN2M2ZTdlN2FhYzg3LnNldENvbnRlbnQoaHRtbF9lNzUzZTVjZDBhY2U0OGFkODI4YjczYWFiZWE3MTMyZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ2YWZkZTFlMmRkYTQxZjFhNTYwMTMzNTcwMDExZTE5LmJpbmRQb3B1cChwb3B1cF80MGU5MWJiMzk0MGY0NzFhYmUzMzdjNmU3ZTdhYWM4Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83OTZkZDhmZTg1OWY0M2U3YTA4OTAwZWNhOTQ1ZjllZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjQzODYyOSwyMS4xNzY4NjZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMjNjMTc5YmRhNzkyNGM4YmI0NmY1OTllY2MwNzE0YTYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzk2ZGQ4ZmU4NTlmNDNlN2EwODkwMGVjYTk0NWY5ZWQuc2V0SWNvbihpY29uXzIzYzE3OWJkYTc5MjRjOGJiNDZmNTk5ZWNjMDcxNGE2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFjZjlhNjc1ZTgxMjRkNWViMWM5NTJhYjY3MWFkOTAxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZjMzQ2ZThhODlhZTQyZDhiNjkzNGI2ZmZlMzkxOGZiID0gJCgnPGRpdiBpZD0iaHRtbF82YzM0NmU4YTg5YWU0MmQ4YjY5MzRiNmZmZTM5MThmYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE5NyBQaWphbG5pYSB3w7NkIG1pbmVyYWxueWNoIHcgV3lzb3dlaiDigJMgWmRyb2p1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xY2Y5YTY3NWU4MTI0ZDVlYjFjOTUyYWI2NzFhZDkwMS5zZXRDb250ZW50KGh0bWxfNmMzNDZlOGE4OWFlNDJkOGI2OTM0YjZmZmUzOTE4ZmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83OTZkZDhmZTg1OWY0M2U3YTA4OTAwZWNhOTQ1ZjllZC5iaW5kUG9wdXAocG9wdXBfMWNmOWE2NzVlODEyNGQ1ZWIxYzk1MmFiNjcxYWQ5MDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDBjNzI4NGRhN2JlNGM5MGFkMmJkZjhmNzFiZGE1MmUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS45NjgyODksMjAuNjA3OTg1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzRkYzU3NDkyMzc5NTRmNjQ4N2E0YTI5MTM0NWI0ODM0ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzQwYzcyODRkYTdiZTRjOTBhZDJiZGY4ZjcxYmRhNTJlLnNldEljb24oaWNvbl80ZGM1NzQ5MjM3OTU0ZjY0ODdhNGEyOTEzNDViNDgzNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNDIzMzk3NjA2ZTU0YWZiYmFhNWE3NTE4NzQ4OTNlZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZmNjOWYzMjJlOWE0ZDJmYjQ4ZjJkZmYzM2Y1NTFmNyA9ICQoJzxkaXYgaWQ9Imh0bWxfY2ZjYzlmMzIyZTlhNGQyZmI0OGYyZGZmMzNmNTUxZjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxOTggS2/Fm2Npw7PFgiDFmncuIEpha3ViYSBBcG9zdG/FgmEgdyBCcnplc2t1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNDIzMzk3NjA2ZTU0YWZiYmFhNWE3NTE4NzQ4OTNlZi5zZXRDb250ZW50KGh0bWxfY2ZjYzlmMzIyZTlhNGQyZmI0OGYyZGZmMzNmNTUxZjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MGM3Mjg0ZGE3YmU0YzkwYWQyYmRmOGY3MWJkYTUyZS5iaW5kUG9wdXAocG9wdXBfYTQyMzM5NzYwNmU1NGFmYmJhYTVhNzUxODc0ODkzZWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODQ5NDU5ZTVmNGEyNDk2MDk5MTM4OGZhMTNmMjkwZmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS4zNTkyNjksMjAuOTAxNjI4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2UwMzkzMzAwZTJlMTQ5N2Y5NzBmODEzNTk4NDg2NWIxID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzg0OTQ1OWU1ZjRhMjQ5NjA5OTEzODhmYTEzZjI5MGZmLnNldEljb24oaWNvbl9lMDM5MzMwMGUyZTE0OTdmOTcwZjgxMzU5ODQ4NjViMSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NGFhNzE0OGUxNDg0MzM3OTdiNTA0MTBkNmRlM2JhZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NzExZWE5ZmQ5MTY0OGU0YmJkN2E0ZjM4ZDRmNGFiOSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzcxMWVhOWZkOTE2NDhlNGJiZDdhNGYzOGQ0ZjRhYjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxOTkgT2dyb2R5IGJpYmxpam5lIHcgTXVzenluaWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ0YWE3MTQ4ZTE0ODQzMzc5N2I1MDQxMGQ2ZGUzYmFkLnNldENvbnRlbnQoaHRtbF83NzExZWE5ZmQ5MTY0OGU0YmJkN2E0ZjM4ZDRmNGFiOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg0OTQ1OWU1ZjRhMjQ5NjA5OTEzODhmYTEzZjI5MGZmLmJpbmRQb3B1cChwb3B1cF80NGFhNzE0OGUxNDg0MzM3OTdiNTA0MTBkNmRlM2JhZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hYTk2MzdlNjk5M2I0MDNjOGI1NGI1YjQ3NWFkYjAyOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjkwMDUxOSwyMS4wNjAyODFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzZiMTJiZmRjYmYxNDRlZDllYzE1MGE1ZDE4YjdmYjQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYWE5NjM3ZTY5OTNiNDAzYzhiNTRiNWI0NzVhZGIwMjkuc2V0SWNvbihpY29uX2M2YjEyYmZkY2JmMTQ0ZWQ5ZWMxNTBhNWQxOGI3ZmI0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxMGVlZGJlMDkzODQ5NDJhMzhlNmNjYWRkNWZlMTUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIwODM4ODRlOWI2MDRkNmE5MDU0N2M1MTdmOWVkN2Q1ID0gJCgnPGRpdiBpZD0iaHRtbF8yMDgzODg0ZTliNjA0ZDZhOTA1NDdjNTE3ZjllZDdkNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDIwMCBTYW5rdHVhcml1bSBNYXRraSBCb8W8ZWogdyBUdWNob3dpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTEwZWVkYmUwOTM4NDk0MmEzOGU2Y2NhZGQ1ZmUxNTMuc2V0Q29udGVudChodG1sXzIwODM4ODRlOWI2MDRkNmE5MDU0N2M1MTdmOWVkN2Q1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWE5NjM3ZTY5OTNiNDAzYzhiNTRiNWI0NzVhZGIwMjkuYmluZFBvcHVwKHBvcHVwXzUxMGVlZGJlMDkzODQ5NDJhMzhlNmNjYWRkNWZlMTUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZlMGFmZjhmYTgyMDQyMWRhNmZlNTQ3ZDUxMjQwMzNmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuODc3MjExLDIwLjA4ODI4Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82NTU5ZDFhMDY1YjU0NjQ0YmMzZDA3ZjU2MWQ1MWMyMCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mZTBhZmY4ZmE4MjA0MjFkYTZmZTU0N2Q1MTI0MDMzZi5zZXRJY29uKGljb25fNjU1OWQxYTA2NWI1NDY0NGJjM2QwN2Y1NjFkNTFjMjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTA5MzYxMjg5Y2NiNDBkZGE4M2Q5NDVhYmZmZWQxN2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTE2NjM5ZjU5YWI5NDFmY2JiNDJmZTBkZTU4YjdkMTMgPSAkKCc8ZGl2IGlkPSJodG1sXzExNjYzOWY1OWFiOTQxZmNiYjQyZmUwZGU1OGI3ZDEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjAxIFphbWVrIEtyw7NsZXdza2kgaSBTa2Fuc2VuIHcgRG9iY3p5Y2FjaCA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEwOTM2MTI4OWNjYjQwZGRhODNkOTQ1YWJmZmVkMTdlLnNldENvbnRlbnQoaHRtbF8xMTY2MzlmNTlhYjk0MWZjYmI0MmZlMGRlNThiN2QxMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZlMGFmZjhmYTgyMDQyMWRhNmZlNTQ3ZDUxMjQwMzNmLmJpbmRQb3B1cChwb3B1cF8xMDkzNjEyODljY2I0MGRkYTgzZDk0NWFiZmZlZDE3ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZTlmYWI2NTdmNmM0OTJhYmRiODhmZWNlZjhjMGIyNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjAzOTUyNCwxOS45NDMxMjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fY2JmYTA5N2M2Mjk5NDk0N2ExZGMzMzBjZmIwNjFjZDMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZmU5ZmFiNjU3ZjZjNDkyYWJkYjg4ZmVjZWY4YzBiMjcuc2V0SWNvbihpY29uX2NiZmEwOTdjNjI5OTQ5NDdhMWRjMzMwY2ZiMDYxY2QzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk2OWRiYzJkYzY2ZDQzODA4N2U3MTE4MmI2ZTFkMTJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M5OWEzZWE1ZDg0ZTQ0ZmM5NTAxMzQ5YTVhODVkYmUwID0gJCgnPGRpdiBpZD0iaHRtbF9jOTlhM2VhNWQ4NGU0NGZjOTUwMTM0OWE1YTg1ZGJlMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDIwNyBTYW5rdHVhcml1bSBNYXRraSBCb8W8ZWogTmlldXN0YWrEhWNlaiBQb21vY3kgdyBLcmFrb3dpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTY5ZGJjMmRjNjZkNDM4MDg3ZTcxMTgyYjZlMWQxMmIuc2V0Q29udGVudChodG1sX2M5OWEzZWE1ZDg0ZTQ0ZmM5NTAxMzQ5YTVhODVkYmUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmU5ZmFiNjU3ZjZjNDkyYWJkYjg4ZmVjZWY4YzBiMjcuYmluZFBvcHVwKHBvcHVwXzk2OWRiYzJkYzY2ZDQzODA4N2U3MTE4MmI2ZTFkMTJiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZiYTZiYjU1MTE1NDQ1ZTY4MmY4ZTY3ZDQ4ZTE3YTg4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMTYyMzMzLDE5Ljg4MjQ0NTk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jYWNhZjk3NGZlMzk0MTE3OGRkYjdjNTIzYTNiY2U5OSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mYmE2YmI1NTExNTQ0NWU2ODJmOGU2N2Q0OGUxN2E4OC5zZXRJY29uKGljb25fY2FjYWY5NzRmZTM5NDExNzhkZGI3YzUyM2EzYmNlOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWI2OTAyNWM5OWY4NDg1Zjg3OWI1MTEyMjZjZTlmZmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTU0MGEzNWQ3NTUwNDYwM2ExNmFlOTE4MzMyZDgzZjEgPSAkKCc8ZGl2IGlkPSJodG1sX2E1NDBhMzVkNzU1MDQ2MDNhMTZhZTkxODMzMmQ4M2YxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjEzIFphbWVrIEtvcnpraWV3LCBXYXJvd25pYSBSeWNlcnNrYSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViNjkwMjVjOTlmODQ4NWY4NzliNTExMjI2Y2U5ZmZkLnNldENvbnRlbnQoaHRtbF9hNTQwYTM1ZDc1NTA0NjAzYTE2YWU5MTgzMzJkODNmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZiYTZiYjU1MTE1NDQ1ZTY4MmY4ZTY3ZDQ4ZTE3YTg4LmJpbmRQb3B1cChwb3B1cF81YjY5MDI1Yzk5Zjg0ODVmODc5YjUxMTIyNmNlOWZmZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hMjQ3Y2E0NjdlYjQ0M2E0YmMyYjAzMDBkZjRjYzQ5OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjA1NDkxLDE5Ljg5MzM1M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kMDkxNjhhMGI0NmI0MWE2ODNjMGJiYjdmOGQ5ODM2YiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hMjQ3Y2E0NjdlYjQ0M2E0YmMyYjAzMDBkZjRjYzQ5OC5zZXRJY29uKGljb25fZDA5MTY4YTBiNDZiNDFhNjgzYzBiYmI3ZjhkOTgzNmIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzU2OTE3MDZmMTIxNDJlYTlmM2QwNWFlYzI0MThiZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTY5ZGE1M2YyNDczNDZmMDkzNmZhNjljYzc2MWQwYzggPSAkKCc8ZGl2IGlkPSJodG1sX2E2OWRhNTNmMjQ3MzQ2ZjA5MzZmYTY5Y2M3NjFkMGM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzAxIEtvcGllYyBLb8WbY2l1c3praSB3IEtyYWtvd2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTY5MTcwNmYxMjE0MmVhOWYzZDA1YWVjMjQxOGJkNC5zZXRDb250ZW50KGh0bWxfYTY5ZGE1M2YyNDczNDZmMDkzNmZhNjljYzc2MWQwYzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hMjQ3Y2E0NjdlYjQ0M2E0YmMyYjAzMDBkZjRjYzQ5OC5iaW5kUG9wdXAocG9wdXBfMzU2OTE3MDZmMTIxNDJlYTlmM2QwNWFlYzI0MThiZDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGIzNmE5MmVmMDBhNDMzNDgwYzZkNDNkMWUzNjBiZmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS42NzE2MjcsMjEuMTU3NjA4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzg4ZGVmNmE5MDQ4NTRiN2NiYjM0ZTg1NzkzOTc3YzkwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzhiMzZhOTJlZjAwYTQzMzQ4MGM2ZDQzZDFlMzYwYmZjLnNldEljb24oaWNvbl84OGRlZjZhOTA0ODU0YjdjYmIzNGU4NTc5Mzk3N2M5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YmQyZjZiNTUwNjA0MmQ4OTYyN2I5Mjc5ODBlOTIxMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZWYyZTFkYTNjYTY0ZmRhODQ3NzllMGYyNjRiMjlhZCA9ICQoJzxkaXYgaWQ9Imh0bWxfY2VmMmUxZGEzY2E2NGZkYTg0Nzc5ZTBmMjY0YjI5YWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzMDUgTWlhc3RvIEdvcmxpY2UgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YmQyZjZiNTUwNjA0MmQ4OTYyN2I5Mjc5ODBlOTIxMi5zZXRDb250ZW50KGh0bWxfY2VmMmUxZGEzY2E2NGZkYTg0Nzc5ZTBmMjY0YjI5YWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YjM2YTkyZWYwMGE0MzM0ODBjNmQ0M2QxZTM2MGJmYy5iaW5kUG9wdXAocG9wdXBfOWJkMmY2YjU1MDYwNDJkODk2MjdiOTI3OTgwZTkyMTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjU1MTllZGUyYzgyNGE5NmJmOTI2MTNjZmVmZTA1NjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4wMTIxNDEsMjAuOTg4NzQ3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzY0OGQxZDA1NWNhMjRlY2I5YjcyOGFkZTkwYTI0ZTdlID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2I1NTE5ZWRlMmM4MjRhOTZiZjkyNjEzY2ZlZmUwNTY5LnNldEljb24oaWNvbl82NDhkMWQwNTVjYTI0ZWNiOWI3MjhhZGU5MGEyNGU3ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNTIxNjQ0YjdkMTg0M2U1OGRiNjkzOGRmZTdmMjZkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMWMwZDhiNGE3NWM0NGU2YTdlYjRkNjIxNmIwYjllYSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDFjMGQ4YjRhNzVjNDRlNmE3ZWI0ZDYyMTZiMGI5ZWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzMTIgVGFybsOzdyA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1MjE2NDRiN2QxODQzZTU4ZGI2OTM4ZGZlN2YyNmQxLnNldENvbnRlbnQoaHRtbF9kMWMwZDhiNGE3NWM0NGU2YTdlYjRkNjIxNmIwYjllYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I1NTE5ZWRlMmM4MjRhOTZiZjkyNjEzY2ZlZmUwNTY5LmJpbmRQb3B1cChwb3B1cF9iNTIxNjQ0YjdkMTg0M2U1OGRiNjkzOGRmZTdmMjZkMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xY2U0N2QxZmVhNWM0MDEzOTIyN2ViMTU4MDdkMzllNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjI1NTYzLDIwLjEwM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82N2QyYTY4NTVhOGY0ZTg0OWZkZTVlOGE2NjBiYzNkNiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xY2U0N2QxZmVhNWM0MDEzOTIyN2ViMTU4MDdkMzllNi5zZXRJY29uKGljb25fNjdkMmE2ODU1YThmNGU4NDlmZGU1ZThhNjYwYmMzZDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTg2ODhhMWFlZDEzNDMxOWFmYjU1M2RkYWU0ZTQyOGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWVkOGE2NDBhZDZjNGVmZGEyMjFiMTg4MmFhZDA4YmMgPSAkKCc8ZGl2IGlkPSJodG1sX2VlZDhhNjQwYWQ2YzRlZmRhMjIxYjE4ODJhYWQwOGJjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTA3IFRQTiAtIFBhbGVuaWNhICA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4Njg4YTFhZWQxMzQzMTlhZmI1NTNkZGFlNGU0MjhmLnNldENvbnRlbnQoaHRtbF9lZWQ4YTY0MGFkNmM0ZWZkYTIyMWIxODgyYWFkMDhiYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFjZTQ3ZDFmZWE1YzQwMTM5MjI3ZWIxNTgwN2QzOWU2LmJpbmRQb3B1cChwb3B1cF8xODY4OGExYWVkMTM0MzE5YWZiNTUzZGRhZTRlNDI4Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jNzNjODY5MmQ1OTI0OTE3OTkxYWViNmI1ZTA5NDc5NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjM0ODYxMywyMC42NzQ3NjcwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMjVhNTJlNTU2YjUwNDkxYTgwNzIxZGM5ZTEzYzZmN2QgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYzczYzg2OTJkNTkyNDkxNzk5MWFlYjZiNWUwOTQ3OTcuc2V0SWNvbihpY29uXzI1YTUyZTU1NmI1MDQ5MWE4MDcyMWRjOWUxM2M2ZjdkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZlMTQ5NTY2YWFjMzQ5ZDI4ZTdlM2E2NWM4NGNkYmYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3ZTRmMzY0NjZjMzRlOGE4NjE2ZWU3ZDRmYTYyZWYyID0gJCgnPGRpdiBpZD0iaHRtbF9jN2U0ZjM2NDY2YzM0ZThhODYxNmVlN2Q0ZmE2MmVmMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDUyNSBNdXpldW0gUmVnaW9uYWxuZSB3IFdpxZtsaWN5IDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmUxNDk1NjZhYWMzNDlkMjhlN2UzYTY1Yzg0Y2RiZjIuc2V0Q29udGVudChodG1sX2M3ZTRmMzY0NjZjMzRlOGE4NjE2ZWU3ZDRmYTYyZWYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzczYzg2OTJkNTkyNDkxNzk5MWFlYjZiNWUwOTQ3OTcuYmluZFBvcHVwKHBvcHVwXzZlMTQ5NTY2YWFjMzQ5ZDI4ZTdlM2E2NWM4NGNkYmYyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NiYjNiMTliNjVkMTQwMDViNTVkMjA0ZTY4ODk1ZDM3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNzkwMjIxLDIwLjk3MjgwMTk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zZTQyMjhmYjU1NTQ0YzY2OGFhMGQ3M2RkMzcyOTVkYSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jYmIzYjE5YjY1ZDE0MDA1YjU1ZDIwNGU2ODg5NWQzNy5zZXRJY29uKGljb25fM2U0MjI4ZmI1NTU0NGM2NjhhYTBkNzNkZDM3Mjk1ZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzgyZWIyYmRlYjQ4NDYzN2I0MTlhMzY3Y2MwZTM5YzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDc4ZjIyNjE2NDgwNDBkYzhhNjBiMTQzMTU5MmFiMzUgPSAkKCc8ZGl2IGlkPSJodG1sXzA3OGYyMjYxNjQ4MDQwZGM4YTYwYjE0MzE1OTJhYjM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTMwIE11emV1bSBQcnp5cm9kbmljemUgaW0uIEtyeXN0eW55IGkgV8WCb2R6aW1pZXJ6YSBUb21rw7N3IDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzgyZWIyYmRlYjQ4NDYzN2I0MTlhMzY3Y2MwZTM5YzYuc2V0Q29udGVudChodG1sXzA3OGYyMjYxNjQ4MDQwZGM4YTYwYjE0MzE1OTJhYjM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2JiM2IxOWI2NWQxNDAwNWI1NWQyMDRlNjg4OTVkMzcuYmluZFBvcHVwKHBvcHVwX2M4MmViMmJkZWI0ODQ2MzdiNDE5YTM2N2NjMGUzOWM2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2IxNTQ1NGY4NzIzODQ5OWE5NjA2ZThhY2M5YjI0YjU0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuODAxNjk2LDIwLjg1NTAzOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9mYjRjNjdlMzliZmU0ZWRmOTY4NzUyNzM1ZTFmZGQ3ZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iMTU0NTRmODcyMzg0OTlhOTYwNmU4YWNjOWIyNGI1NC5zZXRJY29uKGljb25fZmI0YzY3ZTM5YmZlNGVkZjk2ODc1MjczNWUxZmRkN2QpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjliODc2MDY3ZGQzNDQxYTg2M2RjOTY4OGI3MDA5YjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTg4NzRjNDNkMzJjNDFlN2FmNTY5Y2ZhZDY4Y2ZlZWQgPSAkKCc8ZGl2IGlkPSJodG1sXzU4ODc0YzQzZDMyYzQxZTdhZjU2OWNmYWQ2OGNmZWVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTMxIE11emV1bSBFdG5vZ3JhZmljem5lICJHUk9DSUFSTklBIiA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5Yjg3NjA2N2RkMzQ0MWE4NjNkYzk2ODhiNzAwOWI2LnNldENvbnRlbnQoaHRtbF81ODg3NGM0M2QzMmM0MWU3YWY1NjljZmFkNjhjZmVlZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IxNTQ1NGY4NzIzODQ5OWE5NjA2ZThhY2M5YjI0YjU0LmJpbmRQb3B1cChwb3B1cF9iOWI4NzYwNjdkZDM0NDFhODYzZGM5Njg4YjcwMDliNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83YTA3Yjk2MTQ2MDA0OTUyOWYyZDMzZDY5NGEwMzQ2OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjA0OTc0NywxOS45NDY4MTYwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZjU2MjEyN2FkYjkwNGJmNmFjOThjMzk2YTc1MWJlMWYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfN2EwN2I5NjE0NjAwNDk1MjlmMmQzM2Q2OTRhMDM0Njkuc2V0SWNvbihpY29uX2Y1NjIxMjdhZGI5MDRiZjZhYzk4YzM5NmE3NTFiZTFmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwN2E5MmFiMDFiYjRhNmM5Y2FlYmI2M2I5Y2IzNjQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhOGUzY2Q2ODk2NTQ1MTBiYTQzNTEyZTZlYTA4MzIyID0gJCgnPGRpdiBpZD0iaHRtbF9kYThlM2NkNjg5NjU0NTEwYmE0MzUxMmU2ZWEwODMyMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDUzOCBNdXpldW0gSW7FvHluaWVyaWkgTWllanNraWVqIHcgS3Jha293aWUgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MDdhOTJhYjAxYmI0YTZjOWNhZWJiNjNiOWNiMzY0MC5zZXRDb250ZW50KGh0bWxfZGE4ZTNjZDY4OTY1NDUxMGJhNDM1MTJlNmVhMDgzMjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83YTA3Yjk2MTQ2MDA0OTUyOWYyZDMzZDY5NGEwMzQ2OS5iaW5kUG9wdXAocG9wdXBfNDA3YTkyYWIwMWJiNGE2YzljYWViYjYzYjljYjM2NDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTkzZjkyYzlmZWI2NDgwYWExNzAzZjlmZDg5NTRlYjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS44NDExODYsMTkuODAxMTcyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2IzY2VmZWEwMmYxMDRjMTk5YTFhNDVhMGJmMjM4MjlhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2U5M2Y5MmM5ZmViNjQ4MGFhMTcwM2Y5ZmQ4OTU0ZWIyLnNldEljb24oaWNvbl9iM2NlZmVhMDJmMTA0YzE5OWExYTQ1YTBiZjIzODI5YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZGZhZTE1NjA4OWI0ODhlYWMxZDYxNWNjZWY0NGFkOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zOGZjZDA5NTQyYjg0NzkxYjg5ZGQyNjM2OWYwZjdhZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzhmY2QwOTU0MmI4NDc5MWI4OWRkMjYzNjlmMGY3YWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA1NDYgSXpiYSBUcmFkeWNqaSB3IFN1xYJrb3dpY2FjaCA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFkZmFlMTU2MDg5YjQ4OGVhYzFkNjE1Y2NlZjQ0YWQ5LnNldENvbnRlbnQoaHRtbF8zOGZjZDA5NTQyYjg0NzkxYjg5ZGQyNjM2OWYwZjdhZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U5M2Y5MmM5ZmViNjQ4MGFhMTcwM2Y5ZmQ4OTU0ZWIyLmJpbmRQb3B1cChwb3B1cF8xZGZhZTE1NjA4OWI0ODhlYWMxZDYxNWNjZWY0NGFkOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hNDE4MmRiZDRhMmU0YWJhYjFiMTc5MDY4NTE1Nzg0OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjU5MDQ2MSwxOS43MTAzMzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOGJjZjBmYjkzMTJlNDQzZDlkYzE5ZDQwMWJiOWMxZjQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYTQxODJkYmQ0YTJlNGFiYWIxYjE3OTA2ODUxNTc4NDkuc2V0SWNvbihpY29uXzhiY2YwZmI5MzEyZTQ0M2Q5ZGMxOWQ0MDFiYjljMWY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk1ZDUzOGUxNmFmYzRjOGI5ZTQ1N2JlMGUwNmQwNDkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0ZWYzOTdhMDczYTQyOGY4MzU4YTJjYzZkNjQ3NmRjID0gJCgnPGRpdiBpZD0iaHRtbF9iNGVmMzk3YTA3M2E0MjhmODM1OGEyY2M2ZDY0NzZkYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDU0OCBTa2Fuc2VuIHcgU2lkemluaWUgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NWQ1MzhlMTZhZmM0YzhiOWU0NTdiZTBlMDZkMDQ5MS5zZXRDb250ZW50KGh0bWxfYjRlZjM5N2EwNzNhNDI4ZjgzNThhMmNjNmQ2NDc2ZGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hNDE4MmRiZDRhMmU0YWJhYjFiMTc5MDY4NTE1Nzg0OS5iaW5kUG9wdXAocG9wdXBfOTVkNTM4ZTE2YWZjNGM4YjllNDU3YmUwZTA2ZDA0OTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2YzZjQyMjU0OGVmNDJiOGExMGY5OThkMDhlOTk5MmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS4yODMzMywxOS45NzE4OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85YzY1ZjA0ZjkyYzI0YzRlYmJiMmY4NzI4ODM2M2MyNiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jZjNmNDIyNTQ4ZWY0MmI4YTEwZjk5OGQwOGU5OTkyZi5zZXRJY29uKGljb25fOWM2NWYwNGY5MmMyNGM0ZWJiYjJmODcyODgzNjNjMjYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2I3NzYwM2IwYzBiNGM5ZGFlNmNjZmFjOWExODIxNGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzhiNGEwMTQ2NGI2NGY3NmI3ZDE3NjI4YTA1ZWM0NTUgPSAkKCc8ZGl2IGlkPSJodG1sXzM4YjRhMDE0NjRiNjRmNzZiN2QxNzYyOGEwNWVjNDU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTUyIENlbnRydW0gRWR1a2FjeWpuby1Qcnp5cm9kbmljemUgVFBOICA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdiNzc2MDNiMGMwYjRjOWRhZTZjY2ZhYzlhMTgyMTRjLnNldENvbnRlbnQoaHRtbF8zOGI0YTAxNDY0YjY0Zjc2YjdkMTc2MjhhMDVlYzQ1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NmM2Y0MjI1NDhlZjQyYjhhMTBmOTk4ZDA4ZTk5OTJmLmJpbmRQb3B1cChwb3B1cF83Yjc3NjAzYjBjMGI0YzlkYWU2Y2NmYWM5YTE4MjE0Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82ODE3MmE1OWRhNjc0ZGY0YjdkMWUyNTdhZWUxNDQ4MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjgzNDk5MywxOS45MzYzODhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYjk0ZmE1NTM0YjA2NGIwNWI3MmJlODhhM2QwZmZlOWIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjgxNzJhNTlkYTY3NGRmNGI3ZDFlMjU3YWVlMTQ0ODEuc2V0SWNvbihpY29uX2I5NGZhNTUzNGIwNjRiMDViNzJiZTg4YTNkMGZmZTliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EzMmFjNWJjZTE1ZDQ5MmZhYjZmZTk1ZTY1NDAwNWM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjYjkwZTZiNWE1MDQ3Y2ViMGMzMGNkZTM3NDk2ODFkID0gJCgnPGRpdiBpZD0iaHRtbF9kY2I5MGU2YjVhNTA0N2NlYjBjMzBjZGUzNzQ5NjgxZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDU1NSBNdXpldW0gTmllcG9kbGVnxYJvxZtjaSB3IE15xZtsZW5pY2FjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTMyYWM1YmNlMTVkNDkyZmFiNmZlOTVlNjU0MDA1YzQuc2V0Q29udGVudChodG1sX2RjYjkwZTZiNWE1MDQ3Y2ViMGMzMGNkZTM3NDk2ODFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjgxNzJhNTlkYTY3NGRmNGI3ZDFlMjU3YWVlMTQ0ODEuYmluZFBvcHVwKHBvcHVwX2EzMmFjNWJjZTE1ZDQ5MmZhYjZmZTk1ZTY1NDAwNWM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzlmMjUwOWFjNWZjZDQ2YTA4MzM3MWUyMDk3ODA4YzIyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNzc2ODE0LDIwLjk2Mzk2Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8yYmIzYTAzMTM1YWI0MjQ4OWQwYmZjNWIwMzJiOTdkNCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85ZjI1MDlhYzVmY2Q0NmEwODMzNzFlMjA5NzgwOGMyMi5zZXRJY29uKGljb25fMmJiM2EwMzEzNWFiNDI0ODlkMGJmYzViMDMyYjk3ZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmY2ZGJkN2JkZTk4NGQxMmJmZGVlNWE3NWZjZDVjYzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTNhYjE2NTdhYjM4NDI0NWEyMWRhYjBmM2RmZmVmZDkgPSAkKCc8ZGl2IGlkPSJodG1sXzEzYWIxNjU3YWIzODQyNDVhMjFkYWIwZjNkZmZlZmQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTgzIFJlemVyd2F0IFByenlyb2R5IOKAnlNrYW1pZW5pYcWCZSBNaWFzdG/igJ0gdyBDacSZxbxrb3dpY2FjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmY2ZGJkN2JkZTk4NGQxMmJmZGVlNWE3NWZjZDVjYzAuc2V0Q29udGVudChodG1sXzEzYWIxNjU3YWIzODQyNDVhMjFkYWIwZjNkZmZlZmQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWYyNTA5YWM1ZmNkNDZhMDgzMzcxZTIwOTc4MDhjMjIuYmluZFBvcHVwKHBvcHVwXzJmNmRiZDdiZGU5ODRkMTJiZmRlZTVhNzVmY2Q1Y2MwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY0YWQ1ZDBjYjE4ZTQ3MzRhZDhkOTA4ZDgwOTk2ZTEzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuODkzOTE5LDIwLjI0NTU3Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jZmIzMDEyZGJhNmY0MmQwOGRjY2U0YjNmNzgyNjNkOSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82NGFkNWQwY2IxOGU0NzM0YWQ4ZDkwOGQ4MDk5NmUxMy5zZXRJY29uKGljb25fY2ZiMzAxMmRiYTZmNDJkMDhkY2NlNGIzZjc4MjYzZDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTZiNzE0ZDFhMzk5NDcyNGFmNDI0M2IzMGIxNjE3NzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTExNzcxOGI2MDJmNGUxYjhiNzM2YTBlN2Q2YmE1ODcgPSAkKCc8ZGl2IGlkPSJodG1sXzkxMTc3MThiNjAyZjRlMWI4YjczNmEwZTdkNmJhNTg3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTg0IE11emV1bSBEd8OzciBGZWlsbMOzdyDigJMgV29sYSBacsSZY3p5Y2thPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNmI3MTRkMWEzOTk0NzI0YWY0MjQzYjMwYjE2MTc3OC5zZXRDb250ZW50KGh0bWxfOTExNzcxOGI2MDJmNGUxYjhiNzM2YTBlN2Q2YmE1ODcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NGFkNWQwY2IxOGU0NzM0YWQ4ZDkwOGQ4MDk5NmUxMy5iaW5kUG9wdXAocG9wdXBfZTZiNzE0ZDFhMzk5NDcyNGFmNDI0M2IzMGIxNjE3NzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGJmNjk1ZGYzMjdlNDRkMTljOGNkZDU0ZWUwMTE0ODIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS42MjY1ODQsMjEuMjg1MzU5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzE2MmUxNGQxMDJkNzQzNWU5MDcyMjkzOGE0MjYwZGEyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzhiZjY5NWRmMzI3ZTQ0ZDE5YzhjZGQ1NGVlMDExNDgyLnNldEljb24oaWNvbl8xNjJlMTRkMTAyZDc0MzVlOTA3MjI5MzhhNDI2MGRhMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODc4YzNkY2ZmYWM0NWQ2OTU2MDhlNjMzNDUxZTIwYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMDhkZjJhOTM2YjQ0NTA3Yjk3ZWVkNzljODQ2ZGZkNiA9ICQoJzxkaXYgaWQ9Imh0bWxfZDA4ZGYyYTkzNmI0NDUwN2I5N2VlZDc5Yzg0NmRmZDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2NTEgVXpkcm93aXNrbyBXYXBpZW5uZSDigJMgT8Wbcm9kZWsgV2N6YXNvd28g4oCTIExlY3puaWN6eTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzg3OGMzZGNmZmFjNDVkNjk1NjA4ZTYzMzQ1MWUyMGMuc2V0Q29udGVudChodG1sX2QwOGRmMmE5MzZiNDQ1MDdiOTdlZWQ3OWM4NDZkZmQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGJmNjk1ZGYzMjdlNDRkMTljOGNkZDU0ZWUwMTE0ODIuYmluZFBvcHVwKHBvcHVwX2M4NzhjM2RjZmZhYzQ1ZDY5NTYwOGU2MzM0NTFlMjBjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I0OWVjNzc3ZDJjZTQ0ZmNiMzZjNTc3OTU4M2MzZTlhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMDQ5ODMsMTkuOTQ3MzU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2IwMTQ0Yzg3MzBmZDQ5NjRhZThmNDUxY2JmMjlmN2RiID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2I0OWVjNzc3ZDJjZTQ0ZmNiMzZjNTc3OTU4M2MzZTlhLnNldEljb24oaWNvbl9iMDE0NGM4NzMwZmQ0OTY0YWU4ZjQ1MWNiZjI5ZjdkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NDQ5MWM0MWFmYzY0NjYyOGM1MzFkYWIxNzNlN2M1NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YjliNDM5NzM5Y2I0NTgyODk3MDExZGRmZjgxMzA2MCA9ICQoJzxkaXYgaWQ9Imh0bWxfOGI5YjQzOTczOWNiNDU4Mjg5NzAxMWRkZmY4MTMwNjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2NjAgVHJhbXdhamUgbmEgV2F3cnp5xYRjYSAtIEtyYWvDs3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg0NDkxYzQxYWZjNjQ2NjI4YzUzMWRhYjE3M2U3YzU2LnNldENvbnRlbnQoaHRtbF84YjliNDM5NzM5Y2I0NTgyODk3MDExZGRmZjgxMzA2MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I0OWVjNzc3ZDJjZTQ0ZmNiMzZjNTc3OTU4M2MzZTlhLmJpbmRQb3B1cChwb3B1cF84NDQ5MWM0MWFmYzY0NjYyOGM1MzFkYWIxNzNlN2M1Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lN2NkNWIwMmNiNjc0OWRjOWU2ODdkYzEwY2NkZjZlNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjQzNDc5OCwyMC4zMTMyODU5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzFkYTJlYjBhMWVlNDkxNzliMGZhNDU5NzE5NDM2NGUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTdjZDViMDJjYjY3NDlkYzllNjg3ZGMxMGNjZGY2ZTcuc2V0SWNvbihpY29uX2MxZGEyZWIwYTFlZTQ5MTc5YjBmYTQ1OTcxOTQzNjRlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkZjcwYTY3YTE2NzQ5NDY4Y2I4ODIzODE3YmUyNGNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI4MDA2YTFkNzdjZDQ5ZjNhN2NmMTg0YmZmZDE5OGE0ID0gJCgnPGRpdiBpZD0iaHRtbF8yODAwNmExZDc3Y2Q0OWYzYTdjZjE4NGJmZmQxOThhNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDcyNCBaYW1layBDem9yc3p0eW48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhkZjcwYTY3YTE2NzQ5NDY4Y2I4ODIzODE3YmUyNGNkLnNldENvbnRlbnQoaHRtbF8yODAwNmExZDc3Y2Q0OWYzYTdjZjE4NGJmZmQxOThhNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U3Y2Q1YjAyY2I2NzQ5ZGM5ZTY4N2RjMTBjY2RmNmU3LmJpbmRQb3B1cChwb3B1cF84ZGY3MGE2N2ExNjc0OTQ2OGNiODgyMzgxN2JlMjRjZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNmFiZjYzNDkxYjM0Y2RlOTg5YzU4NzE4MTU1OWM0ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjQzNTc3MiwyMC4zMDkzN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jMGExNTYyZmVhYzY0OTQzYWJkZGRkZjNmNDU4NmY1NiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kNmFiZjYzNDkxYjM0Y2RlOTg5YzU4NzE4MTU1OWM0Zi5zZXRJY29uKGljb25fYzBhMTU2MmZlYWM2NDk0M2FiZGRkZGYzZjQ1ODZmNTYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWQxZDE4YzhmMzkzNDdjNzk0MDU0YWRkZTczOWEzNGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzFhZGQyMjA5OTg2NDM1N2JlODIxYzU3OWE3Mzg1MTggPSAkKCc8ZGl2IGlkPSJodG1sXzMxYWRkMjIwOTk4NjQzNTdiZTgyMWM1NzlhNzM4NTE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNzI1IFphbGV3IEN6b3JzenR5xYRza2kg4oCTIHJlanN5IGdvbmRvbGFtaTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWQxZDE4YzhmMzkzNDdjNzk0MDU0YWRkZTczOWEzNGMuc2V0Q29udGVudChodG1sXzMxYWRkMjIwOTk4NjQzNTdiZTgyMWM1NzlhNzM4NTE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDZhYmY2MzQ5MWIzNGNkZTk4OWM1ODcxODE1NTljNGYuYmluZFBvcHVwKHBvcHVwXzFkMWQxOGM4ZjM5MzQ3Yzc5NDA1NGFkZGU3MzlhMzRjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZmNzYzOGZjYWRiOTRkZGI4MjI3M2I3ZTU3ZjlmMzljID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNDA1MTc3LDIwLjQxMTMxOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hMjQ0YTM4MzQxYzE0OGU1YTI4NTM3OWY0NTlmNGY0ZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82Zjc2MzhmY2FkYjk0ZGRiODIyNzNiN2U1N2Y5ZjM5Yy5zZXRJY29uKGljb25fYTI0NGEzODM0MWMxNDhlNWEyODUzNzlmNDU5ZjRmNGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjhmMGI0OWFkNmEyNGMxYWIxZmVlZTE1Njk0NmNlMGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDgwNmU0NTVmMmFjNDRmNGI2M2I1YTJhNGVjNjhiNzggPSAkKCc8ZGl2IGlkPSJodG1sXzQ4MDZlNDU1ZjJhYzQ0ZjRiNjNiNWEyYTRlYzY4Yjc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNzI2IFNjaHJvbmlza28gUFRUSyBUcnp5IEtvcm9ueSDigJMgU3JvbW93Y2UgTmnFvG5lPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOGYwYjQ5YWQ2YTI0YzFhYjFmZWVlMTU2OTQ2Y2UwYy5zZXRDb250ZW50KGh0bWxfNDgwNmU0NTVmMmFjNDRmNGI2M2I1YTJhNGVjNjhiNzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82Zjc2MzhmY2FkYjk0ZGRiODIyNzNiN2U1N2Y5ZjM5Yy5iaW5kUG9wdXAocG9wdXBfZjhmMGI0OWFkNmEyNGMxYWIxZmVlZTE1Njk0NmNlMGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTIzNDdhOWRiMDIzNDE5OGFkYzE0NDRlOGJjMmEzNzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS40MTc3ODQsMjAuNDc2MTQ1MDAwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzY4MDNjNThhY2U1NTQwZmM5NWY4NTc2NGRkMmQ3NDUyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzUyMzQ3YTlkYjAyMzQxOThhZGMxNDQ0ZThiYzJhMzc0LnNldEljb24oaWNvbl82ODAzYzU4YWNlNTU0MGZjOTVmODU3NjRkZDJkNzQ1Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MjIzMWUzOTM1MjQ0MDJhOTg2YjEyNzA3YWEyZTQ3MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZjA2YTU4MDIyNDE0OGU1YjA3ZWNhNGYyYjA3MDFkNCA9ICQoJzxkaXYgaWQ9Imh0bWxfM2YwNmE1ODAyMjQxNDhlNWIwN2VjYTRmMmIwNzAxZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA3MjcgU3phxYJhcyBHcm/FhCDigJMgUGFsZW5pY2Eg4oCTIFN6Y3phd25pY2E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyMjMxZTM5MzUyNDQwMmE5ODZiMTI3MDdhYTJlNDcxLnNldENvbnRlbnQoaHRtbF8zZjA2YTU4MDIyNDE0OGU1YjA3ZWNhNGYyYjA3MDFkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUyMzQ3YTlkYjAyMzQxOThhZGMxNDQ0ZThiYzJhMzc0LmJpbmRQb3B1cChwb3B1cF81MjIzMWUzOTM1MjQ0MDJhOTg2YjEyNzA3YWEyZTQ3MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kMWE2ZjlhYWNiNDA0YmI3YmVkODgzMjA2NmM4MDI1MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjgxNDU0NSwxNS40OTY1MzgwMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZDM0MGZiZjA4OGQyNGEyMjg4YTE3ZTY3YzJiZTg2ZmIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2QxYTZmOWFhY2I0MDRiYjdiZWQ4ODMyMDY2YzgwMjUyLnNldEljb24oaWNvbl9kMzQwZmJmMDg4ZDI0YTIyODhhMTdlNjdjMmJlODZmYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zODVkOGRjNzU3YjA0MTJiOTk5MmI5ZTU4Zjk1ZWUxZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MWEwY2RkOGEyMWQ0ZTc3Yjk1OTRjMDc3YmY0MGE0OCA9ICQoJzxkaXYgaWQ9Imh0bWxfNjFhMGNkZDhhMjFkNGU3N2I5NTk0YzA3N2JmNDBhNDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwMjkgU2Nocm9uaXNrbyBLYW1pZcWEY3p5ayA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM4NWQ4ZGM3NTdiMDQxMmI5OTkyYjllNThmOTVlZTFkLnNldENvbnRlbnQoaHRtbF82MWEwY2RkOGEyMWQ0ZTc3Yjk1OTRjMDc3YmY0MGE0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QxYTZmOWFhY2I0MDRiYjdiZWQ4ODMyMDY2YzgwMjUyLmJpbmRQb3B1cChwb3B1cF8zODVkOGRjNzU3YjA0MTJiOTk5MmI5ZTU4Zjk1ZWUxZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zM2IyZDUzNmM2ODE0NTMxOTU1NjRiZWFjODJmOWNkNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjg2MzI1MiwxNS44NzI3MTcwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZDg1ZDVjMmY2MjZlNDFiNWIzNjc3MzQ3N2Q3ZjE2ZmQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzMzYjJkNTM2YzY4MTQ1MzE5NTU2NGJlYWM4MmY5Y2Q3LnNldEljb24oaWNvbl9kODVkNWMyZjYyNmU0MWI1YjM2NzczNDc3ZDdmMTZmZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMDUzYzdlOTc5MGY0NWI4OGM1ZWJhMTQzYWQyNzgwMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNjM1ZTAwZDFhM2M0ODExYmU4NTE5Y2NmZjFiOGUwNiA9ICQoJzxkaXYgaWQ9Imh0bWxfZjYzNWUwMGQxYTNjNDgxMWJlODUxOWNjZmYxYjhlMDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwMzQgU2Nocm9uaXNrbyBTendhamNhcmthIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTA1M2M3ZTk3OTBmNDViODhjNWViYTE0M2FkMjc4MDMuc2V0Q29udGVudChodG1sX2Y2MzVlMDBkMWEzYzQ4MTFiZTg1MTljY2ZmMWI4ZTA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzNiMmQ1MzZjNjgxNDUzMTk1NTY0YmVhYzgyZjljZDcuYmluZFBvcHVwKHBvcHVwXzEwNTNjN2U5NzkwZjQ1Yjg4YzVlYmExNDNhZDI3ODAzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzkwNmQ5MDg2MjNlOTQ5NzRiNGQ5MTE1NWNhMzE0MjY5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNzUxNDA1LDE1LjcwODUzOTAwMDAwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82MGE0Nzg2NjVlNjY0ZTlmYTk4YTM1ZWViZmFjOTc4MyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOTA2ZDkwODYyM2U5NDk3NGI0ZDkxMTU1Y2EzMTQyNjkuc2V0SWNvbihpY29uXzYwYTQ3ODY2NWU2NjRlOWZhOThhMzVlZWJmYWM5NzgzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U3NzU4M2NjZTFkMzQ5MThiZGI3NjRhOWY4YjZiMjczID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RkN2E4ODY0MDQ1NTRmZDNhMmJjOTdiODc0YzhjY2Q3ID0gJCgnPGRpdiBpZD0iaHRtbF9kZDdhODg2NDA0NTU0ZmQzYTJiYzk3Yjg3NGM4Y2NkNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDAzOSBTdHJ6ZWNoYSBBa2FkZW1pY2thIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTc3NTgzY2NlMWQzNDkxOGJkYjc2NGE5ZjhiNmIyNzMuc2V0Q29udGVudChodG1sX2RkN2E4ODY0MDQ1NTRmZDNhMmJjOTdiODc0YzhjY2Q3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTA2ZDkwODYyM2U5NDk3NGI0ZDkxMTU1Y2EzMTQyNjkuYmluZFBvcHVwKHBvcHVwX2U3NzU4M2NjZTFkMzQ5MThiZGI3NjRhOWY4YjZiMjczKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFmMjI0YmJiMTE0YTQyYTk4NzEzZWZhNDY4YmU3ZjE2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNzM2MSwxNS43Mzk3Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl83MDI0NThjNjM2OTE0NjUxOGIwMGVjMDIzN2FjMzgxYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMWYyMjRiYmIxMTRhNDJhOTg3MTNlZmE0NjhiZTdmMTYuc2V0SWNvbihpY29uXzcwMjQ1OGM2MzY5MTQ2NTE4YjAwZWMwMjM3YWMzODFiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI0ZGE3OGViMTI4YjQ4YzRiYjU5NDIzODgwZjFiYWJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRkNWVkYWU4ZTdkNTQ3MmQ5ZTg1YTM3ZTM3MmNhZmExID0gJCgnPGRpdiBpZD0iaHRtbF80ZDVlZGFlOGU3ZDU0NzJkOWU4NWEzN2UzNzJjYWZhMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA0MCDFmm5pZcW8a2EgLSBLcsOzbG93YSBLYXJrb25vc3p5ICA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI0ZGE3OGViMTI4YjQ4YzRiYjU5NDIzODgwZjFiYWJhLnNldENvbnRlbnQoaHRtbF80ZDVlZGFlOGU3ZDU0NzJkOWU4NWEzN2UzNzJjYWZhMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFmMjI0YmJiMTE0YTQyYTk4NzEzZWZhNDY4YmU3ZjE2LmJpbmRQb3B1cChwb3B1cF8yNGRhNzhlYjEyOGI0OGM0YmI1OTQyMzg4MGYxYmFiYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83YzYyMDlkOWE1NTM0M2RiYjE4ZGZhZWQ5NWY2MGZiYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjc0NzA5NywxNS44MjQxMzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZjc1Njc0OWJmZDVlNDJkMWJhOTUwMGM3Y2E5NGU0OWYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzdjNjIwOWQ5YTU1MzQzZGJiMThkZmFlZDk1ZjYwZmJjLnNldEljb24oaWNvbl9mNzU2NzQ5YmZkNWU0MmQxYmE5NTAwYzdjYTk0ZTQ5Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MGM3MWIyNWFiNjk0NmE1ODA0MWRiM2JlYWY0MTU0OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZjk3OWMwZGVjMTQ0ZDFkYmM1ODEzOGZiNjJhMDRmYSA9ICQoJzxkaXYgaWQ9Imh0bWxfYmY5NzljMGRlYzE0NGQxZGJjNTgxMzhmYjYyYTA0ZmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwNDcgU2Nocm9uaXNrbyBQVFRLIE5hIFByemXFgsSZY3p5IE9rcmFqPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MGM3MWIyNWFiNjk0NmE1ODA0MWRiM2JlYWY0MTU0OC5zZXRDb250ZW50KGh0bWxfYmY5NzljMGRlYzE0NGQxZGJjNTgxMzhmYjYyYTA0ZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83YzYyMDlkOWE1NTM0M2RiYjE4ZGZhZWQ5NWY2MGZiYy5iaW5kUG9wdXAocG9wdXBfOTBjNzFiMjVhYjY5NDZhNTgwNDFkYjNiZWFmNDE1NDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTYxY2EzYmJmYjQyNGRjNWI5ZmQ0YmM1YmU5MTlhODQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC43NDk1NDUsMTUuNzAyNzg5MDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzk3M2QxOWZjYjkyZTQ4NDA4MWM0YTNkNjhiYmRlODNkID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85NjFjYTNiYmZiNDI0ZGM1YjlmZDRiYzViZTkxOWE4NC5zZXRJY29uKGljb25fOTczZDE5ZmNiOTJlNDg0MDgxYzRhM2Q2OGJiZGU4M2QpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTdlZDY1OTFhYTI2NDQ0OGE4ODUzOThkMDQ2YjExZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmVlYTQyZGFmOGU5NDM3MDljODQ2ZDkyMDc5ODdhMGEgPSAkKCc8ZGl2IGlkPSJodG1sX2ZlZWE0MmRhZjhlOTQzNzA5Yzg0NmQ5MjA3OTg3YTBhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDUyIFNjaHJvbmlza28gU2Ftb3RuaWEgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81N2VkNjU5MWFhMjY0NDQ4YTg4NTM5OGQwNDZiMTFkNC5zZXRDb250ZW50KGh0bWxfZmVlYTQyZGFmOGU5NDM3MDljODQ2ZDkyMDc5ODdhMGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NjFjYTNiYmZiNDI0ZGM1YjlmZDRiYzViZTkxOWE4NC5iaW5kUG9wdXAocG9wdXBfNTdlZDY1OTFhYTI2NDQ0OGE4ODUzOThkMDQ2YjExZDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzU4MDQyOWNjMTFlNGQ2YzgyNmJkMDJhMzIxYjMwMTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS43ODczODksMTQuOTY5OTY1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzEyNjEzYWQxYWFhODRhZTg5YWQ1NzM5NjRiYjM0N2YxID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83NTgwNDI5Y2MxMWU0ZDZjODI2YmQwMmEzMjFiMzAxMC5zZXRJY29uKGljb25fMTI2MTNhZDFhYWE4NGFlODlhZDU3Mzk2NGJiMzQ3ZjEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjQzMjVhN2MxMzQ1NGVmZWE2ZjY3MDljODU5YmRmZGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjU3OWVkYzcwMTMyNGNiOGIzMmY2MTdlODhkZmU0OGUgPSAkKCc8ZGl2IGlkPSJodG1sXzI1NzllZGM3MDEzMjRjYjhiMzJmNjE3ZTg4ZGZlNDhlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDcyIFdpZcW8YSBQYWNob8WCa8OzdyBNaWVqc2tpY2ggdyBMdWJza3U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I0MzI1YTdjMTM0NTRlZmVhNmY2NzA5Yzg1OWJkZmRjLnNldENvbnRlbnQoaHRtbF8yNTc5ZWRjNzAxMzI0Y2I4YjMyZjYxN2U4OGRmZTQ4ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc1ODA0MjljYzExZTRkNmM4MjZiZDAyYTMyMWIzMDEwLmJpbmRQb3B1cChwb3B1cF9iNDMyNWE3YzEzNDU0ZWZlYTZmNjcwOWM4NTliZGZkYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mN2U4YTM3ZDIyY2I0ZDA1OThjZjJlMTNmMzAyNDYxYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjYzODYsMTUuMTQ2M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hMTJmMDc5ZTg5Nzk0OGNlYTVlZDBkNDYyZGJmOWYzNiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZjdlOGEzN2QyMmNiNGQwNTk4Y2YyZTEzZjMwMjQ2MWMuc2V0SWNvbihpY29uX2ExMmYwNzllODk3OTQ4Y2VhNWVkMGQ0NjJkYmY5ZjM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg2ODhiNDliNDFkYjQ1N2I4NjNkMzk1MjhlZTRhZDAwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdmMmUxN2M5NTg2MTQwNzlhYjNkNTBmMWI2NDRlMDU1ID0gJCgnPGRpdiBpZD0iaHRtbF83ZjJlMTdjOTU4NjE0MDc5YWIzZDUwZjFiNjQ0ZTA1NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA3MyBLb8WbY2nDs8WCIEZhcm55IHcgxbthcmFjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODY4OGI0OWI0MWRiNDU3Yjg2M2QzOTUyOGVlNGFkMDAuc2V0Q29udGVudChodG1sXzdmMmUxN2M5NTg2MTQwNzlhYjNkNTBmMWI2NDRlMDU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjdlOGEzN2QyMmNiNGQwNTk4Y2YyZTEzZjMwMjQ2MWMuYmluZFBvcHVwKHBvcHVwXzg2ODhiNDliNDFkYjQ1N2I4NjNkMzk1MjhlZTRhZDAwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZhNTMxNmRmZDFkMTQ3NjBiODdhYzhmNGZiZTU4NDI2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNzg1NTI1LDE0Ljc2MTA4NTAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82NDA2NTcwYzVmNmE0YzBkOGJkODdmYzViZWFjMGFhMyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZmE1MzE2ZGZkMWQxNDc2MGI4N2FjOGY0ZmJlNTg0MjYuc2V0SWNvbihpY29uXzY0MDY1NzBjNWY2YTRjMGQ4YmQ4N2ZjNWJlYWMwYWEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk0MzQ4ZTBmZTMzNzQ2ZjA5ZWI3YTVkOTdkYTBlN2RhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhZDgxZTQxZWU3ODQzN2I5NjlhZmUxNzI1ZTFiMzA5ID0gJCgnPGRpdiBpZD0iaHRtbF9kYWQ4MWU0MWVlNzg0MzdiOTY5YWZlMTcyNWUxYjMwOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA3NCBPxZtyb2RlayBFZHVrYWNqaSBQcnp5cm9kbmljem8tTGXFm25laiB3IEplemlvcmFjaCBXeXNva2ljaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTQzNDhlMGZlMzM3NDZmMDllYjdhNWQ5N2RhMGU3ZGEuc2V0Q29udGVudChodG1sX2RhZDgxZTQxZWU3ODQzN2I5NjlhZmUxNzI1ZTFiMzA5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmE1MzE2ZGZkMWQxNDc2MGI4N2FjOGY0ZmJlNTg0MjYuYmluZFBvcHVwKHBvcHVwXzk0MzQ4ZTBmZTMzNzQ2ZjA5ZWI3YTVkOTdkYTBlN2RhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U1NGNmNzdjMzM4MTRhZWFiYzJmOTEyOGVhYzM4Yjk1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNzg0NTgzLDE0Ljc2MDAxMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8xNzk0ZjZlY2I4YTQ0MmVkODJkZGMwYzk3MGJhZDk3NiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTU0Y2Y3N2MzMzgxNGFlYWJjMmY5MTI4ZWFjMzhiOTUuc2V0SWNvbihpY29uXzE3OTRmNmVjYjhhNDQyZWQ4MmRkYzBjOTcwYmFkOTc2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhYmEwMWIyNDM0MDRjZGE5MDc3ZTBlZjA0NTFkOGRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRkNGRhZGZlOGE5NTQzYzZiZjJlNjllYTkwZDJlYTg4ID0gJCgnPGRpdiBpZD0iaHRtbF80ZDRkYWRmZThhOTU0M2M2YmYyZTY5ZWE5MGQyZWE4OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA3NSBMZcWbbnkgS29tcGxla3MgUHJvbW9jeWpueSDigJ5Cb3J5IEx1YnVza2ll4oCdPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYWJhMDFiMjQzNDA0Y2RhOTA3N2UwZWYwNDUxZDhkZC5zZXRDb250ZW50KGh0bWxfNGQ0ZGFkZmU4YTk1NDNjNmJmMmU2OWVhOTBkMmVhODgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lNTRjZjc3YzMzODE0YWVhYmMyZjkxMjhlYWMzOGI5NS5iaW5kUG9wdXAocG9wdXBfMmFiYTAxYjI0MzQwNGNkYTkwNzdlMGVmMDQ1MWQ4ZGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzljNWMyYTJkYzRiNDRmOTlhMDVlMjkxZWM4NDkyZTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS42MDQzNywxNC43ODE0NjZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYmU1NWYzMDg4NjUwNGJmMTllOWEyNGIwYjJlZjZhMDggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzc5YzVjMmEyZGM0YjQ0Zjk5YTA1ZTI5MWVjODQ5MmU2LnNldEljb24oaWNvbl9iZTU1ZjMwODg2NTA0YmYxOWU5YTI0YjBiMmVmNmEwOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jY2Q3M2U3ZWExYjc0NzMyOGMxZTkwMjQ3MDI0Mzc2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOWEyMDgxNTFjZWI0ZWI5YjExMjc2NmJlZTUzZmYzMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTlhMjA4MTUxY2ViNGViOWIxMTI3NjZiZWU1M2ZmMzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwNzYgT8Wbcm9kZWsgS3VsdHVyeSDFgXXFvHlja2llaiB3IEJ1Y3p5bmFjaCA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NjZDczZTdlYTFiNzQ3MzI4YzFlOTAyNDcwMjQzNzYzLnNldENvbnRlbnQoaHRtbF8xOWEyMDgxNTFjZWI0ZWI5YjExMjc2NmJlZTUzZmYzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc5YzVjMmEyZGM0YjQ0Zjk5YTA1ZTI5MWVjODQ5MmU2LmJpbmRQb3B1cChwb3B1cF9jY2Q3M2U3ZWExYjc0NzMyOGMxZTkwMjQ3MDI0Mzc2Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yMWU2MGNkZjE2ZTA0MjJjOGMzYTJmYTkzMDc0Y2ZjNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjU0MDA2MywxNC43Njg5NjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOWQ3Nzg2NGNkYTk4NDc5N2IxNTM5NDJlYWMwMmM4ZjEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzIxZTYwY2RmMTZlMDQyMmM4YzNhMmZhOTMwNzRjZmM0LnNldEljb24oaWNvbl85ZDc3ODY0Y2RhOTg0Nzk3YjE1Mzk0MmVhYzAyYzhmMSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYWQ1YWFmNGQ1YzQ0YjU0ODk2MmYzMWNjNjVkYTFkNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YTBiOTJkNzViM2E0YmIzODY1M2NkNDJkZTViMmRmYSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2EwYjkyZDc1YjNhNGJiMzg2NTNjZDQyZGU1YjJkZmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwNzcgxZpjaWXFvGthIEdlb3R1cnlzdHljem5hIERhd25hIEtvcGFsbmlhIEJhYmluYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2FkNWFhZjRkNWM0NGI1NDg5NjJmMzFjYzY1ZGExZDYuc2V0Q29udGVudChodG1sXzdhMGI5MmQ3NWIzYTRiYjM4NjUzY2Q0MmRlNWIyZGZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjFlNjBjZGYxNmUwNDIyYzhjM2EyZmE5MzA3NGNmYzQuYmluZFBvcHVwKHBvcHVwX2NhZDVhYWY0ZDVjNDRiNTQ4OTYyZjMxY2M2NWRhMWQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUzYTc2YzY0ZmUxMTQ5NWNhMzFjOTFjZjRhNDI4Zjc1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMzI0NTc0LDE0LjQ0MjI5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzcxMjQwOTRlYzc0ODQ4MmFhNjkxZTkxZjRiNjMxODNmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81M2E3NmM2NGZlMTE0OTVjYTMxYzkxY2Y0YTQyOGY3NS5zZXRJY29uKGljb25fNzEyNDA5NGVjNzQ4NDgyYWE2OTFlOTFmNGI2MzE4M2YpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzRjNmFhYzJiZGMzNDQ5Zjg2NmE0NzJhN2Y3YTAyNDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGJiZjJiNTRlMTNlNGMyZmE1OTU2YmFiMzhlZDFhZjUgPSAkKCc8ZGl2IGlkPSJodG1sXzBiYmYyYjU0ZTEzZTRjMmZhNTk1NmJhYjM4ZWQxYWY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDc4IFBhcmsgTXXFvGFrb3dza2k8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc0YzZhYWMyYmRjMzQ0OWY4NjZhNDcyYTdmN2EwMjQ0LnNldENvbnRlbnQoaHRtbF8wYmJmMmI1NGUxM2U0YzJmYTU5NTZiYWIzOGVkMWFmNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUzYTc2YzY0ZmUxMTQ5NWNhMzFjOTFjZjRhNDI4Zjc1LmJpbmRQb3B1cChwb3B1cF83NGM2YWFjMmJkYzM0NDlmODY2YTQ3MmE3ZjdhMDI0NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MDUwYWQwZWI5MTc0Y2UwOTNkMDE0YjE4NzdmN2JjMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjMyNDYwMiwxNC40NDIyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lNDdiMGQ4ZDgwOTY0MzYxOWI4OWFlNzYxZjEzYjMyOCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNTA1MGFkMGViOTE3NGNlMDkzZDAxNGIxODc3ZjdiYzIuc2V0SWNvbihpY29uX2U0N2IwZDhkODA5NjQzNjE5Yjg5YWU3NjFmMTNiMzI4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1MjA5NzA0ZWQ3MzRiNzZiYjk5Y2EzZTAwZjFkZWM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk1ZTUyMWFmOWNkNzQxYjBhM2Q4MGU5ZTYyM2FkYzJiID0gJCgnPGRpdiBpZD0iaHRtbF85NWU1MjFhZjljZDc0MWIwYTNkODBlOWU2MjNhZGMyYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA3OSBHZW9wYXJrIMWBdWsgTXXFvGFrb3dhPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNTIwOTcwNGVkNzM0Yjc2YmI5OWNhM2UwMGYxZGVjNS5zZXRDb250ZW50KGh0bWxfOTVlNTIxYWY5Y2Q3NDFiMGEzZDgwZTllNjIzYWRjMmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MDUwYWQwZWI5MTc0Y2UwOTNkMDE0YjE4NzdmN2JjMi5iaW5kUG9wdXAocG9wdXBfZTUyMDk3MDRlZDczNGI3NmJiOTljYTNlMDBmMWRlYzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzZlNzVlNTg5ZTFkNDI0ZDk1YzQ1NjYzMmQ4ZDUyZjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS42Mzc4NTQsMTUuMTQ2MDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMjlkMjE4ODgxZjFmNDUxMzllZjBjN2NiM2I0YzY3ZDcgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2M2ZTc1ZTU4OWUxZDQyNGQ5NWM0NTY2MzJkOGQ1MmY0LnNldEljb24oaWNvbl8yOWQyMTg4ODFmMWY0NTEzOWVmMGM3Y2IzYjRjNjdkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZDgxMzljODFlN2I0YjY0YjBlYTRlYWU2ZjNlNzBmYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMWJkZDJjNjBmNjA0NzU4YWM5NmEzZmJiYmRiMzhjNyA9ICQoJzxkaXYgaWQ9Imh0bWxfYjFiZGQyYzYwZjYwNDc1OGFjOTZhM2ZiYmJkYjM4YzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwODAgTXV6ZXVtIFBvZ3JhbmljemEgxZpsxIVza28txYF1xbx5Y2tpZWdvIHcgxbthcmFjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGQ4MTM5YzgxZTdiNGI2NGIwZWE0ZWFlNmYzZTcwZmEuc2V0Q29udGVudChodG1sX2IxYmRkMmM2MGY2MDQ3NThhYzk2YTNmYmJiZGIzOGM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzZlNzVlNTg5ZTFkNDI0ZDk1YzQ1NjYzMmQ4ZDUyZjQuYmluZFBvcHVwKHBvcHVwX2RkODEzOWM4MWU3YjRiNjRiMGVhNGVhZTZmM2U3MGZhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RlYmZmMzdmZjkxNzQ4ZTJhYjExM2NiNmMwZTI4NmUyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNzg1OTk0LDE0Ljc3MzM4MTI5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9mNjc4YTUzMTE1NDE0ZTQyYTdmNTg4ZTA1OTk3MmI3MyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZGViZmYzN2ZmOTE3NDhlMmFiMTEzY2I2YzBlMjg2ZTIuc2V0SWNvbihpY29uX2Y2NzhhNTMxMTU0MTRlNDJhN2Y1ODhlMDU5OTcyYjczKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwZmYxMTlkOTVhMjQ2MWQ4YzhkODZmOTM2MzY1ZTJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1NTUwYmQ1M2JmZTQzOTJhYjc0YzBkZGJhYjYwNGViID0gJCgnPGRpdiBpZD0iaHRtbF8wNTU1MGJkNTNiZmU0MzkyYWI3NGMwZGRiYWI2MDRlYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA4MSBQYcWCYWMgdyBCcm9kYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MGZmMTE5ZDk1YTI0NjFkOGM4ZDg2ZjkzNjM2NWUyYS5zZXRDb250ZW50KGh0bWxfMDU1NTBiZDUzYmZlNDM5MmFiNzRjMGRkYmFiNjA0ZWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZWJmZjM3ZmY5MTc0OGUyYWIxMTNjYjZjMGUyODZlMi5iaW5kUG9wdXAocG9wdXBfNTBmZjExOWQ5NWEyNDYxZDhjOGQ4NmY5MzYzNjVlMmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmY2MjFiNmMyOWEyNDY2MDhiMjg3MDQ3YTk0NGM0OWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4wMzA1OTksMTUuMzAzODE5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzhiNjBhMzg4OWRmMzRmYTdhYmYzNWRhODdkNzBiMTU0ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mZjYyMWI2YzI5YTI0NjYwOGIyODcwNDdhOTQ0YzQ5Zi5zZXRJY29uKGljb25fOGI2MGEzODg5ZGYzNGZhN2FiZjM1ZGE4N2Q3MGIxNTQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDg0NGE4OTRjZWY0NGFhMWI3YmVmNjlmNmI0Y2YxZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDA5MjE5ZmJjYWE1NGE4ZGI1NjRlNGEzN2RmZGI1MTkgPSAkKCc8ZGl2IGlkPSJodG1sX2QwOTIxOWZiY2FhNTRhOGRiNTY0ZTRhMzdkZmRiNTE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDgyIFphbWVrIEN6b2NoYSB3IFN1Y2hlajwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDg0NGE4OTRjZWY0NGFhMWI3YmVmNjlmNmI0Y2YxZDkuc2V0Q29udGVudChodG1sX2QwOTIxOWZiY2FhNTRhOGRiNTY0ZTRhMzdkZmRiNTE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmY2MjFiNmMyOWEyNDY2MDhiMjg3MDQ3YTk0NGM0OWYuYmluZFBvcHVwKHBvcHVwXzQ4NDRhODk0Y2VmNDRhYTFiN2JlZjY5ZjZiNGNmMWQ5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc3NTY5NDVhMzY4MzRiNDViZTNlMDU4MGJmNmRjNzBkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuODM5MzU4LDE1LjUyOTkwOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lNDEwOTNiZmFjNjE0ZmRkYjRlNzIxMzUzZDMxZWI5MCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzc1Njk0NWEzNjgzNGI0NWJlM2UwNTgwYmY2ZGM3MGQuc2V0SWNvbihpY29uX2U0MTA5M2JmYWM2MTRmZGRiNGU3MjEzNTNkMzFlYjkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRlMzQzZTgwYjFlZDQ1OTM4MTY4MTM2ZmNjM2QyMDk5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NmMmIwMWEzMTFjZjQ4MTA5ZjZmZmY3NTg1YzdkOGEwID0gJCgnPGRpdiBpZD0iaHRtbF9jZjJiMDFhMzExY2Y0ODEwOWY2ZmZmNzU4NWM3ZDhhMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA4MyBEb20gQ2FybGEgaSBHZXJoYXJ0YSBIYXVwdG1hbm7Ds3cgdyBTemtsYXJza2llaiBQb3LEmWJpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGUzNDNlODBiMWVkNDU5MzgxNjgxMzZmY2MzZDIwOTkuc2V0Q29udGVudChodG1sX2NmMmIwMWEzMTFjZjQ4MTA5ZjZmZmY3NTg1YzdkOGEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzc1Njk0NWEzNjgzNGI0NWJlM2UwNTgwYmY2ZGM3MGQuYmluZFBvcHVwKHBvcHVwXzRlMzQzZTgwYjFlZDQ1OTM4MTY4MTM2ZmNjM2QyMDk5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY0NDkwZmJiMDYxMTQ1ZTg5MTdjZjI5MTkyMmZkNzExID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuOTA2MTg2LDE1LjMzNDUyMDk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iN2QyMTk4MDY0OGQ0NTZiYmJlNjg1OTlhZjRmZTBkNiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjQ0OTBmYmIwNjExNDVlODkxN2NmMjkxOTIyZmQ3MTEuc2V0SWNvbihpY29uX2I3ZDIxOTgwNjQ4ZDQ1NmJiYmU2ODU5OWFmNGZlMGQ2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JmZmM1NTc0MDQ5NzQ4N2M4MWFmM2ViNWQyMmEzNTNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE2ODliM2Y3NmFiMTRmOTlhMGMyYWNhMTY4NjM5MDI5ID0gJCgnPGRpdiBpZD0iaHRtbF8xNjg5YjNmNzZhYjE0Zjk5YTBjMmFjYTE2ODYzOTAyOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA4NCBEb20gWmRyb2pvd3kgdyDFmndpZXJhZG93aWUgWmRyb2p1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZmZjNTU3NDA0OTc0ODdjODFhZjNlYjVkMjJhMzUzZi5zZXRDb250ZW50KGh0bWxfMTY4OWIzZjc2YWIxNGY5OWEwYzJhY2ExNjg2MzkwMjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NDQ5MGZiYjA2MTE0NWU4OTE3Y2YyOTE5MjJmZDcxMS5iaW5kUG9wdXAocG9wdXBfYmZmYzU1NzQwNDk3NDg3YzgxYWYzZWI1ZDIyYTM1M2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDkwYWNhZjNjZmQwNDZjMjgyMWQxN2Q5Zjc4ZGJhYjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC44MTUwNSwxNS4zODMyNDZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjkzNDlhNWIxNTg3NDE3OGEwNDA1YjJiNmMzZWE2ZmYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2Q5MGFjYWYzY2ZkMDQ2YzI4MjFkMTdkOWY3OGRiYWI2LnNldEljb24oaWNvbl82OTM0OWE1YjE1ODc0MTc4YTA0MDViMmI2YzNlYTZmZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NGVmMDhkNDFkM2E0Y2RkOTFjNzE3ZmI5MDI3NDQ2NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NDNmZjAwNTc1MDY0NzU5OTE5ODk2N2U5NDU5NTYxYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNjQzZmYwMDU3NTA2NDc1OTkxOTg5NjdlOTQ1OTU2MWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwODUgU3RhY2phIFR1cnlzdHljem5hIE9ybGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU0ZWYwOGQ0MWQzYTRjZGQ5MWM3MTdmYjkwMjc0NDY2LnNldENvbnRlbnQoaHRtbF82NDNmZjAwNTc1MDY0NzU5OTE5ODk2N2U5NDU5NTYxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q5MGFjYWYzY2ZkMDQ2YzI4MjFkMTdkOWY3OGRiYWI2LmJpbmRQb3B1cChwb3B1cF81NGVmMDhkNDFkM2E0Y2RkOTFjNzE3ZmI5MDI3NDQ2Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81YzhhMDE0YzA5N2E0MzA5YjU4YmE4ZmMzOTY0NWIwOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjg1NDU5NywxNS4zNjA4MDVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjQzOTQ4MTZjYTMyNDBmNmJjZDNiZTEzNDYxZmRlZTggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzVjOGEwMTRjMDk3YTQzMDliNThiYThmYzM5NjQ1YjA5LnNldEljb24oaWNvbl82NDM5NDgxNmNhMzI0MGY2YmNkM2JlMTM0NjFmZGVlOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNDA2MzU3MGM1ZjQ0YzI3ODEyZTBiZTBkNzAyMjkxOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMTJiMzJmZmRmM2E0NzllOWU1MjAyODRkOTlkMzMyOCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjEyYjMyZmZkZjNhNDc5ZTllNTIwMjg0ZDk5ZDMzMjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwODYgQ2hhdGthIEfDs3J6eXN0w7N3PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNDA2MzU3MGM1ZjQ0YzI3ODEyZTBiZTBkNzAyMjkxOS5zZXRDb250ZW50KGh0bWxfZjEyYjMyZmZkZjNhNDc5ZTllNTIwMjg0ZDk5ZDMzMjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81YzhhMDE0YzA5N2E0MzA5YjU4YmE4ZmMzOTY0NWIwOS5iaW5kUG9wdXAocG9wdXBfMjQwNjM1NzBjNWY0NGMyNzgxMmUwYmUwZDcwMjI5MTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjg0MmZjMjllMWZiNDExMTlkOTBjMjZmZTAwNmZmOTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC44OTIyOCwxNS4zMDg3MjkwMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMmY5OGQ1NTdjMzYxNDEwNmE1OTUxMmZkMDNiMmVlNTkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2I4NDJmYzI5ZTFmYjQxMTE5ZDkwYzI2ZmUwMDZmZjk0LnNldEljb24oaWNvbl8yZjk4ZDU1N2MzNjE0MTA2YTU5NTEyZmQwM2IyZWU1OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMzhjZWUzOTQyMTQ0NjE0YTI0Y2Q2OGM3ZDBhODYxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NWIxYjBlMWNjOGY0NjVkYjBkMWVjZDFjMTA2ZTAwOSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzViMWIwZTFjYzhmNDY1ZGIwZDFlY2QxYzEwNmUwMDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwODcgU2Nocm9uaXNrbyBQVFRLIE5hIFN0b2d1IEl6ZXJza2ltPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMzhjZWUzOTQyMTQ0NjE0YTI0Y2Q2OGM3ZDBhODYxNi5zZXRDb250ZW50KGh0bWxfNzViMWIwZTFjYzhmNDY1ZGIwZDFlY2QxYzEwNmUwMDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iODQyZmMyOWUxZmI0MTExOWQ5MGMyNmZlMDA2ZmY5NC5iaW5kUG9wdXAocG9wdXBfZTM4Y2VlMzk0MjE0NDYxNGEyNGNkNjhjN2QwYTg2MTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDJmNmVmOGI2NDg1NDFiZDlkMmRjZWE5ZDNlNGZkOTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC43OTIxNjIsMTUuNTEzODYzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2Q5ZWUyZTU2YWVjNzQxNmFhNWU5MzQ0ZTE2ZTA5MjZlID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kMmY2ZWY4YjY0ODU0MWJkOWQyZGNlYTlkM2U0ZmQ5Mi5zZXRJY29uKGljb25fZDllZTJlNTZhZWM3NDE2YWE1ZTkzNDRlMTZlMDkyNmUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTFjMDczMjk2ZTkwNDg4NWI3NTExN2ZmNTNmYjUxMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzcyMDkyOTMxMGYzNDhiNGIwMTMxZGRlNDJkZmRiMjggPSAkKCc8ZGl2IGlkPSJodG1sXzM3MjA5MjkzMTBmMzQ4YjRiMDEzMWRkZTQyZGZkYjI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDg4IEfDs3Jza2llIFNjaHJvbmlza28gU3pyZW5pY2EgMTM2MiBtIG4ucC5tLjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTFjMDczMjk2ZTkwNDg4NWI3NTExN2ZmNTNmYjUxMTYuc2V0Q29udGVudChodG1sXzM3MjA5MjkzMTBmMzQ4YjRiMDEzMWRkZTQyZGZkYjI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDJmNmVmOGI2NDg1NDFiZDlkMmRjZWE5ZDNlNGZkOTIuYmluZFBvcHVwKHBvcHVwXzkxYzA3MzI5NmU5MDQ4ODViNzUxMTdmZjUzZmI1MTE2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RjYzgzZWJjNDc4ZjRiMWU5ZjNiYzhlMTI3NDExNTU3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuOTIyNzAxLDE1LjY5NjA1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzA1YThjMmYyNDM1NDRjOGY5MDIyYThjODlkODJjOThlID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kY2M4M2ViYzQ3OGY0YjFlOWYzYmM4ZTEyNzQxMTU1Ny5zZXRJY29uKGljb25fMDVhOGMyZjI0MzU0NGM4ZjkwMjJhOGM4OWQ4MmM5OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzIwYjMxYzMyMzFiNDg0YzhiMTYzNDlmZDgwMThjNDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzNjYTVhNDgxZDUyNDUwOTg0NzAwODY3MDBjMzQyMjcgPSAkKCc8ZGl2IGlkPSJodG1sX2MzY2E1YTQ4MWQ1MjQ1MDk4NDcwMDg2NzAwYzM0MjI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDg5IFNjaHJvbmlza28gUGVyxYJhIFphY2hvZHUg4oCTIFNpZWRsxJljaW48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcyMGIzMWMzMjMxYjQ4NGM4YjE2MzQ5ZmQ4MDE4YzQzLnNldENvbnRlbnQoaHRtbF9jM2NhNWE0ODFkNTI0NTA5ODQ3MDA4NjcwMGMzNDIyNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RjYzgzZWJjNDc4ZjRiMWU5ZjNiYzhlMTI3NDExNTU3LmJpbmRQb3B1cChwb3B1cF83MjBiMzFjMzIzMWI0ODRjOGIxNjM0OWZkODAxOGM0Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hZTFkNWRiMDQzYWI0ZGE0OGQzOTIwOWI1MGUxMmNlMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjgzMDIwMSwxNS41NTUzOTI5OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZDY2NGI0MDVjZDQzNGI5ZThjNWU4OTdkNDAzNDhlYmYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2FlMWQ1ZGIwNDNhYjRkYTQ4ZDM5MjA5YjUwZTEyY2UzLnNldEljb24oaWNvbl9kNjY0YjQwNWNkNDM0YjllOGM1ZTg5N2Q0MDM0OGViZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYmYwZWMzZDY4ODc0ZmM4YTIzOTEwMDE1Zjc5MmE1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MTU3YjQ0YTA0NjA0NmQ0OTU5ZmQ5MTU0MGIxZGY2OSA9ICQoJzxkaXYgaWQ9Imh0bWxfODE1N2I0NGEwNDYwNDZkNDk1OWZkOTE1NDBiMWRmNjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwOTAgV29kb3NwYWQgU3prbGFya2kgLSBLYXJrb25vc3plPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYmYwZWMzZDY4ODc0ZmM4YTIzOTEwMDE1Zjc5MmE1NS5zZXRDb250ZW50KGh0bWxfODE1N2I0NGEwNDYwNDZkNDk1OWZkOTE1NDBiMWRmNjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZTFkNWRiMDQzYWI0ZGE0OGQzOTIwOWI1MGUxMmNlMy5iaW5kUG9wdXAocG9wdXBfY2JmMGVjM2Q2ODg3NGZjOGEyMzkxMDAxNWY3OTJhNTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDRlZTIwZjFhZTg4NDAyMGFjMjc1ZjQwOTJiZGJjNzkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC44OTc0NDMsMTUuNzM4MzU0OTk5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzNmMjk4NmRiNDc2MTQ2ODViM2QzNzkxNmUxYThmNDhjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kNGVlMjBmMWFlODg0MDIwYWMyNzVmNDA5MmJkYmM3OS5zZXRJY29uKGljb25fM2YyOTg2ZGI0NzYxNDY4NWIzZDM3OTE2ZTFhOGY0OGMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDgyYTNjNjAyMDI2NGE4NThiNzgzNTEyZDIxOGYxMDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTYzYzczMzQzODljNDVkM2JlMzk1NjAwYzRiYWM5YzAgPSAkKCc8ZGl2IGlkPSJodG1sXzk2M2M3MzM0Mzg5YzQ1ZDNiZTM5NTYwMGM0YmFjOWMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDkxIE11emV1bSBLYXJrb25vc2tpZSB3IEplbGVuaWVqIEfDs3J6ZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDgyYTNjNjAyMDI2NGE4NThiNzgzNTEyZDIxOGYxMDMuc2V0Q29udGVudChodG1sXzk2M2M3MzM0Mzg5YzQ1ZDNiZTM5NTYwMGM0YmFjOWMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDRlZTIwZjFhZTg4NDAyMGFjMjc1ZjQwOTJiZGJjNzkuYmluZFBvcHVwKHBvcHVwXzQ4MmEzYzYwMjAyNjRhODU4Yjc4MzUxMmQyMThmMTAzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZmMzRlNTZiYjBmNTRiOGU4ZjgxNTlhZTk3NmM5NzkzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuODMzOTA4LDE1LjY0NDM5NTk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80ZDBiZjE2ODFhYzA0OWJlOGI5YjY4OTUxOTZhZDM3YSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZmYzNGU1NmJiMGY1NGI4ZThmODE1OWFlOTc2Yzk3OTMuc2V0SWNvbihpY29uXzRkMGJmMTY4MWFjMDQ5YmU4YjliNjg5NTE5NmFkMzdhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBiMWQwNTdkMzEzYzQ2NjNhMjZiZWExNzNhNDNmZjdjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM0MmI1NjFjMWQ1MzQwZGNhN2U3MzM1MWI0N2YyMDIxID0gJCgnPGRpdiBpZD0iaHRtbF8zNDJiNTYxYzFkNTM0MGRjYTdlNzMzNTFiNDdmMjAyMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA5MiBaYW1layBDaG9qbmlrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYjFkMDU3ZDMxM2M0NjYzYTI2YmVhMTczYTQzZmY3Yy5zZXRDb250ZW50KGh0bWxfMzQyYjU2MWMxZDUzNDBkY2E3ZTczMzUxYjQ3ZjIwMjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mZjM0ZTU2YmIwZjU0YjhlOGY4MTU5YWU5NzZjOTc5My5iaW5kUG9wdXAocG9wdXBfMGIxZDA1N2QzMTNjNDY2M2EyNmJlYTE3M2E0M2ZmN2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGFmZGQ5Yzk2MTA1NDBiN2IyZjM2OTk1YjY2NGM2NDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC44OTAzLDE1Ljc1MTEzNTk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jZGM0M2M3M2RmNzU0ZDEyYjk2OTI2NzliYzFjNDc1ZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNGFmZGQ5Yzk2MTA1NDBiN2IyZjM2OTk1YjY2NGM2NDQuc2V0SWNvbihpY29uX2NkYzQzYzczZGY3NTRkMTJiOTY5MjY3OWJjMWM0NzVlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkYjRjMmNmMzBlMTQyMTlhMjA0N2E3MDc4MTliMDVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkYzg1OTBiMWM1YjQ2ZjU4MDYyNTMxMDI3NmI2ZWYzID0gJCgnPGRpdiBpZD0iaHRtbF8yZGM4NTkwYjFjNWI0NmY1ODA2MjUzMTAyNzZiNmVmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA5MyBNdXpldW0gSGlzdG9yaWkgaSBNaWxpdGFyacOzdyB3IEplbGVuaWVqIEfDs3J6ZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2RiNGMyY2YzMGUxNDIxOWEyMDQ3YTcwNzgxOWIwNWYuc2V0Q29udGVudChodG1sXzJkYzg1OTBiMWM1YjQ2ZjU4MDYyNTMxMDI3NmI2ZWYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGFmZGQ5Yzk2MTA1NDBiN2IyZjM2OTk1YjY2NGM2NDQuYmluZFBvcHVwKHBvcHVwXzNkYjRjMmNmMzBlMTQyMTlhMjA0N2E3MDc4MTliMDVmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJlMmU5YTQ5NjQ2NDRmYThhNDIxNmIzNWY2NmI3ZmNmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNzM5NTU3LDE1LjcyODk2M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81YzQwYmNkZTY2Y2M0YTBhOWNiZDVmZDQ0NzAwYWFlMCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMmUyZTlhNDk2NDY0NGZhOGE0MjE2YjM1ZjY2YjdmY2Yuc2V0SWNvbihpY29uXzVjNDBiY2RlNjZjYzRhMGE5Y2JkNWZkNDQ3MDBhYWUwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRmN2E0YjRlNWNlNzRmNzA4MjMxOTc2NjliMzU3NTUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE4N2M5YTE1ZjQzZDQ2YzNiMzRkMmRmOWJlZTg2ZWM0ID0gJCgnPGRpdiBpZD0iaHRtbF8xODdjOWExNWY0M2Q0NmMzYjM0ZDJkZjliZWU4NmVjNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA5NCBTY2hyb25pc2tvIEfDs3Jza2llIERvbSDFmmzEhXNraTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGY3YTRiNGU1Y2U3NGY3MDgyMzE5NzY2OWIzNTc1NTEuc2V0Q29udGVudChodG1sXzE4N2M5YTE1ZjQzZDQ2YzNiMzRkMmRmOWJlZTg2ZWM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmUyZTlhNDk2NDY0NGZhOGE0MjE2YjM1ZjY2YjdmY2YuYmluZFBvcHVwKHBvcHVwXzRmN2E0YjRlNWNlNzRmNzA4MjMxOTc2NjliMzU3NTUxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc0YTA4OTE2YWYyZDRiY2ZiOWY5MDI5YWE4NzMyZmU2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNzc3MjYsMTUuNzI0Mjg2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzBiZmY5OTgwNDVkOTRmZmM5ZjY1MDY1NjkyMDRlZDYxID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83NGEwODkxNmFmMmQ0YmNmYjlmOTAyOWFhODczMmZlNi5zZXRJY29uKGljb25fMGJmZjk5ODA0NWQ5NGZmYzlmNjUwNjU2OTIwNGVkNjEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGFkYzk5OThkMzdkNGZlMzk0YWI1N2Y4YTlmZGFjY2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTIxMGEyZTFhNmMzNDdmNmI2YzUwYzI4MzhlNjc1ZDEgPSAkKCc8ZGl2IGlkPSJodG1sX2EyMTBhMmUxYTZjMzQ3ZjZiNmM1MGMyODM4ZTY3NWQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDk1IMWad2nEhXR5bmlhIFdhbmcg4oCTIEthcnBhY3o8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhZGM5OTk4ZDM3ZDRmZTM5NGFiNTdmOGE5ZmRhY2NhLnNldENvbnRlbnQoaHRtbF9hMjEwYTJlMWE2YzM0N2Y2YjZjNTBjMjgzOGU2NzVkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc0YTA4OTE2YWYyZDRiY2ZiOWY5MDI5YWE4NzMyZmU2LmJpbmRQb3B1cChwb3B1cF8wYWRjOTk5OGQzN2Q0ZmUzOTRhYjU3ZjhhOWZkYWNjYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lYjliMjM1NGM4MDY0MzExODVjNTVlNjczODRiNTM2NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjc5MjcyOCwxNS44MzU3NzY5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNWZiZmUyMDk0NDE5NGYzNDkwNjBmNzczZTQzNDMyNjIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2ViOWIyMzU0YzgwNjQzMTE4NWM1NWU2NzM4NGI1MzY0LnNldEljb24oaWNvbl81ZmJmZTIwOTQ0MTk0ZjM0OTA2MGY3NzNlNDM0MzI2Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMjdkNzQwYWJmNmU0YTZlYWExOTA5ZmNlMmUxNTQzYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOTVlMDM1YmZhZmY0MjM0OWI2MjYwMWQ0MTZlOTcyMyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjk1ZTAzNWJmYWZmNDIzNDliNjI2MDFkNDE2ZTk3MjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwOTYgRG9tIFRyYWR5Y2ppIE1pYXN0YSBLb3dhcnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIyN2Q3NDBhYmY2ZTRhNmVhYTE5MDlmY2UyZTE1NDNjLnNldENvbnRlbnQoaHRtbF9mOTVlMDM1YmZhZmY0MjM0OWI2MjYwMWQ0MTZlOTcyMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ViOWIyMzU0YzgwNjQzMTE4NWM1NWU2NzM4NGI1MzY0LmJpbmRQb3B1cChwb3B1cF8yMjdkNzQwYWJmNmU0YTZlYWExOTA5ZmNlMmUxNTQzYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xNGRlYTIwMzRjY2I0MTcwYWYyYmUxNTU4NzQwOTQ5MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjc2MzQ0NSwxNS42Mzk2MTQwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMTBiNjA1M2JhZDlkNGYwNmFkMjk0MGM5NDZlM2RiZWMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzE0ZGVhMjAzNGNjYjQxNzBhZjJiZTE1NTg3NDA5NDkyLnNldEljb24oaWNvbl8xMGI2MDUzYmFkOWQ0ZjA2YWQyOTQwYzk0NmUzZGJlYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZDRlY2JhNWRlODE0NTAwYTg0ZDAyZmMzOTExNjI2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NmVlMzQ5OTYxZTY0MWUyOWE4YTk3OWQ3MTIxMzMxYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDZlZTM0OTk2MWU2NDFlMjlhOGE5NzlkNzEyMTMzMWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwOTggU2Nocm9uaXNrbyBQVFRLIE9kcm9kemVuaWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NkNGVjYmE1ZGU4MTQ1MDBhODRkMDJmYzM5MTE2MjZhLnNldENvbnRlbnQoaHRtbF80NmVlMzQ5OTYxZTY0MWUyOWE4YTk3OWQ3MTIxMzMxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE0ZGVhMjAzNGNjYjQxNzBhZjJiZTE1NTg3NDA5NDkyLmJpbmRQb3B1cChwb3B1cF9jZDRlY2JhNWRlODE0NTAwYTg0ZDAyZmMzOTExNjI2YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wZjYwYTQ5MWRhOGQ0NjFhYjM0MjM3NDVjMWZmNzBhNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjc5NDA2MywxNS41MDE1MjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZmFiNWVkNzc4NjIxNDE1OGI2MmRjYjhhYmQyY2EyYTIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzBmNjBhNDkxZGE4ZDQ2MWFiMzQyMzc0NWMxZmY3MGE1LnNldEljb24oaWNvbl9mYWI1ZWQ3Nzg2MjE0MTU4YjYyZGNiOGFiZDJjYTJhMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOWYzYWNlM2NkY2E0ZDY4YmMzYjRiYzhkMGY1YzViMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMjAxMzlkMzFmY2U0NDdjYmVkMWUwNDM4NjkxMmM4MiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjIwMTM5ZDMxZmNlNDQ3Y2JlZDFlMDQzODY5MTJjODIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwOTkgU2Nocm9uaXNrbyBuYSBIYWxpIFN6cmVuaWNraWVqPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOWYzYWNlM2NkY2E0ZDY4YmMzYjRiYzhkMGY1YzViMS5zZXRDb250ZW50KGh0bWxfYjIwMTM5ZDMxZmNlNDQ3Y2JlZDFlMDQzODY5MTJjODIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wZjYwYTQ5MWRhOGQ0NjFhYjM0MjM3NDVjMWZmNzBhNS5iaW5kUG9wdXAocG9wdXBfZjlmM2FjZTNjZGNhNGQ2OGJjM2I0YmM4ZDBmNWM1YjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmUwOGMxNmYyNTNmNGNkZmIyZWYyNzYyZTU4NjQxZTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4xNzY2LDE1Ljc1ODk3MDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85OWVlYmRmNWU5MDk0MmVkYmE2ZTVlNDllMGUzNmM0ZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYmUwOGMxNmYyNTNmNGNkZmIyZWYyNzYyZTU4NjQxZTQuc2V0SWNvbihpY29uXzk5ZWViZGY1ZTkwOTQyZWRiYTZlNWU0OWUwZTM2YzRkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZiNDRiMjI3ZTBmYjQxZjk5MTA0OTliODA0M2VjOTYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQxN2VkZGY0OTA3MTQ5YjNiNmI5OGFiZjAzODIzZDYzID0gJCgnPGRpdiBpZD0iaHRtbF80MTdlZGRmNDkwNzE0OWIzYjZiOThhYmYwMzgyM2Q2MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDIwNCBaYW1layBHcm9kemllYyA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZiNDRiMjI3ZTBmYjQxZjk5MTA0OTliODA0M2VjOTYwLnNldENvbnRlbnQoaHRtbF80MTdlZGRmNDkwNzE0OWIzYjZiOThhYmYwMzgyM2Q2Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JlMDhjMTZmMjUzZjRjZGZiMmVmMjc2MmU1ODY0MWU0LmJpbmRQb3B1cChwb3B1cF9mYjQ0YjIyN2UwZmI0MWY5OTEwNDk5YjgwNDNlYzk2MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NTdjM2U3MGM1NTg0NzlkOTI5NmExYjcyOWY1ZGI5NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjA0Nzc1NiwxNS4xMDE5ODIwMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMjc0MWY3NmUwYmZkNGQ2OGJiN2E3MjE5ZWVjZWRhM2MgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzk1N2MzZTcwYzU1ODQ3OWQ5Mjk2YTFiNzI5ZjVkYjk1LnNldEljb24oaWNvbl8yNzQxZjc2ZTBiZmQ0ZDY4YmI3YTcyMTllZWNlZGEzYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZTk4OTNiZWNjNmY0MDFiOGNmNGEzZTQxMDFjOTc5YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OTA1ZGY3NDlhMGI0OGUyOTAzNjA4MGJmZTk5MzlmZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDkwNWRmNzQ5YTBiNDhlMjkwMzYwODBiZmU5OTM5ZmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyMTkgWmFtZWsgUGlhc3Rvd3NraSB3IEtyb8WbbmllIE9kcnphxYRza2ltIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2U5ODkzYmVjYzZmNDAxYjhjZjRhM2U0MTAxYzk3OWIuc2V0Q29udGVudChodG1sXzQ5MDVkZjc0OWEwYjQ4ZTI5MDM2MDgwYmZlOTkzOWZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTU3YzNlNzBjNTU4NDc5ZDkyOTZhMWI3MjlmNWRiOTUuYmluZFBvcHVwKHBvcHVwX2NlOTg5M2JlY2M2ZjQwMWI4Y2Y0YTNlNDEwMWM5NzliKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NjNmIxNDhjMTk1NjQ2NDFiMDljNmYyMWI3ODRhYmIzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuOTUyMjM5LDE0LjcyNTI5MjAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lZjc5N2JkOGJkZjk0ZGM5YjRhMzU0NjQyNDU0MjUxNSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfY2M2YjE0OGMxOTU2NDY0MWIwOWM2ZjIxYjc4NGFiYjMuc2V0SWNvbihpY29uX2VmNzk3YmQ4YmRmOTRkYzliNGEzNTQ2NDI0NTQyNTE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhM2Y0MTIwM2Y4ZTQ4ZTRhNmJjYTFhODcxN2YyOGU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y3YjU1Yzc5MmI4NjQ4YzQ5MmQwYjM0YzJmZDEwNzQ1ID0gJCgnPGRpdiBpZD0iaHRtbF9mN2I1NWM3OTJiODY0OGM0OTJkMGIzNGMyZmQxMDc0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI0OCBLb8WbY2nDs8WCIEZhcm55IHcgR3ViaW5pZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmEzZjQxMjAzZjhlNDhlNGE2YmNhMWE4NzE3ZjI4ZTcuc2V0Q29udGVudChodG1sX2Y3YjU1Yzc5MmI4NjQ4YzQ5MmQwYjM0YzJmZDEwNzQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2M2YjE0OGMxOTU2NDY0MWIwOWM2ZjIxYjc4NGFiYjMuYmluZFBvcHVwKHBvcHVwXzJhM2Y0MTIwM2Y4ZTQ4ZTRhNmJjYTFhODcxN2YyOGU3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FiZThiMDllNjYzNjQyOTg5ZTdiZjdjNDQyNTBjNWI3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMTMzMTQ4LDE1Ljc1OTAyMzAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kZDBiN2IxYzk3ZDI0ZjkxOTdhOWZlMzMzYWJhZDUxMSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYWJlOGIwOWU2NjM2NDI5ODllN2JmN2M0NDI1MGM1Yjcuc2V0SWNvbihpY29uX2RkMGI3YjFjOTdkMjRmOTE5N2E5ZmUzMzNhYmFkNTExKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBjMTAyNDNmODQ2YjQ3MzQ5M2QzMDEwOGU5MWIwNzE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQwMzZhYzY5NTVlODRmZjk5YjY4OTJlOTUyOWU1NGM5ID0gJCgnPGRpdiBpZD0iaHRtbF80MDM2YWM2OTU1ZTg0ZmY5OWI2ODkyZTk1MjllNTRjOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI2NSBEd8OzciBLb2xlc2luPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYzEwMjQzZjg0NmI0NzM0OTNkMzAxMDhlOTFiMDcxNy5zZXRDb250ZW50KGh0bWxfNDAzNmFjNjk1NWU4NGZmOTliNjg5MmU5NTI5ZTU0YzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYmU4YjA5ZTY2MzY0Mjk4OWU3YmY3YzQ0MjUwYzViNy5iaW5kUG9wdXAocG9wdXBfMGMxMDI0M2Y4NDZiNDczNDkzZDMwMTA4ZTkxYjA3MTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTVhYWM4OWY0ZTBlNDIzYzk5MGU1NmQ1ZDMyMzFjNzUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4wNDcyNjUsMTUuMTAwNDcyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzc5MGQ0NDEwMGU1NjRmNjJiMDQ5NGU1YWEyZDE0ZTdkID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85NWFhYzg5ZjRlMGU0MjNjOTkwZTU2ZDVkMzIzMWM3NS5zZXRJY29uKGljb25fNzkwZDQ0MTAwZTU2NGY2MmIwNDk0ZTVhYTJkMTRlN2QpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmZjN2JkZWIwYjZkNGVlNzljNmQzMTA4NzkwZTFhODYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTQ5OTExYmVhMmJmNGRlYWEwYWFiODQ0Y2ViZTE4YzAgPSAkKCc8ZGl2IGlkPSJodG1sX2U0OTkxMWJlYTJiZjRkZWFhMGFhYjg0NGNlYmUxOGMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzA3IFphbWVrIFBpYXN0b3dza2kgdyBLcm/Fm25pZSBPZHJ6YcWEc2tpbSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmYzdiZGViMGI2ZDRlZTc5YzZkMzEwODc5MGUxYTg2LnNldENvbnRlbnQoaHRtbF9lNDk5MTFiZWEyYmY0ZGVhYTBhYWI4NDRjZWJlMThjMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk1YWFjODlmNGUwZTQyM2M5OTBlNTZkNWQzMjMxYzc1LmJpbmRQb3B1cChwb3B1cF9iZmM3YmRlYjBiNmQ0ZWU3OWM2ZDMxMDg3OTBlMWE4Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yZGMzM2VjNmQxZTc0YjM1OThkMTZlYjZhMDc3YzVkNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjU0MTQ5NCwxNC43NzUxOTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNWZmN2E4ZDUzZmRjNGNlYmFmMmEyNzMyNDc1Y2UwYjAgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzJkYzMzZWM2ZDFlNzRiMzU5OGQxNmViNmEwNzdjNWQ0LnNldEljb24oaWNvbl81ZmY3YThkNTNmZGM0Y2ViYWYyYTI3MzI0NzVjZTBiMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZjkyZDNmOTFhOGI0NTczYWFlMzI0YmU5NmU3N2FjNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83N2EyN2FmYjY4OWY0NDgyYWM3YzU4NjJkNjgxMjRkMyA9ICQoJzxkaXYgaWQ9Imh0bWxfNzdhMjdhZmI2ODlmNDQ4MmFjN2M1ODYyZDY4MTI0ZDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzMTcgR2VvcGFyayDFgXVrIE11xbxha293YSAtIFdpZcW8YSBXaWRva293YTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWY5MmQzZjkxYThiNDU3M2FhZTMyNGJlOTZlNzdhYzQuc2V0Q29udGVudChodG1sXzc3YTI3YWZiNjg5ZjQ0ODJhYzdjNTg2MmQ2ODEyNGQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmRjMzNlYzZkMWU3NGIzNTk4ZDE2ZWI2YTA3N2M1ZDQuYmluZFBvcHVwKHBvcHVwXzlmOTJkM2Y5MWE4YjQ1NzNhYWUzMjRiZTk2ZTc3YWM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU3OWJmNmUyZGM4ZDRlNWU4ZTlmZTkyMjM0ZjE0OTNlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuOTM4MzI1LDE1LjUwNTEzMjk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iMjFhN2M5OWVlODk0Yzk2YmQxMWEzY2MzNGMwZmFiMiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNTc5YmY2ZTJkYzhkNGU1ZThlOWZlOTIyMzRmMTQ5M2Uuc2V0SWNvbihpY29uX2IyMWE3Yzk5ZWU4OTRjOTZiZDExYTNjYzM0YzBmYWIyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5MzI2NTc4M2VhNTRhMzJiOWIzYjY2ZDk2OTdlYjFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVkZWNmYzhhMzExZTRmZTFiMjFlMzdhNDZhMjM0ZDg3ID0gJCgnPGRpdiBpZD0iaHRtbF81ZGVjZmM4YTMxMWU0ZmUxYjIxZTM3YTQ2YTIzNGQ4NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDMxOCBSYXR1c3ogdyBaaWVsb25laiBHw7NyemU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5MzI2NTc4M2VhNTRhMzJiOWIzYjY2ZDk2OTdlYjFkLnNldENvbnRlbnQoaHRtbF81ZGVjZmM4YTMxMWU0ZmUxYjIxZTM3YTQ2YTIzNGQ4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU3OWJmNmUyZGM4ZDRlNWU4ZTlmZTkyMjM0ZjE0OTNlLmJpbmRQb3B1cChwb3B1cF8xOTMyNjU3ODNlYTU0YTMyYjliM2I2NmQ5Njk3ZWIxZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hYTQ5ZjdjMWVkMzU0MzJjODZmNTExMjI0ODliNTBmMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjkzODA3OSwxNS41MTM2ODddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMmJlNmI3ODEzZGQ2NDZiZGIzN2YwMjEzMmY5YzliM2QgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2FhNDlmN2MxZWQzNTQzMmM4NmY1MTEyMjQ4OWI1MGYxLnNldEljb24oaWNvbl8yYmU2Yjc4MTNkZDY0NmJkYjM3ZjAyMTMyZjljOWIzZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZWIzM2Q3NTlhNDE0N2M5OWY3ODExZTJmM2E3MTdhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ODRhMjgzOWRhYWY0MmZkOGU3MjMwZjc1NjFhOGUxZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDg0YTI4MzlkYWFmNDJmZDhlNzIzMGY3NTYxYThlMWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzMTkgUGFsbWlhcm5pYSB3IFppZWxvbmVqIEfDs3J6ZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmViMzNkNzU5YTQxNDdjOTlmNzgxMWUyZjNhNzE3YTcuc2V0Q29udGVudChodG1sXzQ4NGEyODM5ZGFhZjQyZmQ4ZTcyMzBmNzU2MWE4ZTFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWE0OWY3YzFlZDM1NDMyYzg2ZjUxMTIyNDg5YjUwZjEuYmluZFBvcHVwKHBvcHVwX2ZlYjMzZDc1OWE0MTQ3Yzk5Zjc4MTFlMmYzYTcxN2E3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk4N2FkZGViYzc5NzQwODNhNTdmMjJhZjE5Y2U2Y2ZhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNjEyNjczLDE1LjMyNDUwNDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kMGFlNGJjODhkZjk0NzcxODczZTZhNDU1NDE0NjNlYSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOTg3YWRkZWJjNzk3NDA4M2E1N2YyMmFmMTljZTZjZmEuc2V0SWNvbihpY29uX2QwYWU0YmM4OGRmOTQ3NzE4NzNlNmE0NTU0MTQ2M2VhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3MWFhNWNlZWM2NzQ1ZDQ5MGM3NGY1MTU0NjQxMDVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhOTRjZmNiYjY5MTRkNGRhODc4ZGJmZGIyY2QyYTk0ID0gJCgnPGRpdiBpZD0iaHRtbF8wYTk0Y2ZjYmI2OTE0ZDRkYTg3OGRiZmRiMmNkMmE5NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDMyMCBQYcWCYWMgS3NpxIXFvMSZY3kgdyDFu2FnYW5pdTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDcxYWE1Y2VlYzY3NDVkNDkwYzc0ZjUxNTQ2NDEwNWMuc2V0Q29udGVudChodG1sXzBhOTRjZmNiYjY5MTRkNGRhODc4ZGJmZGIyY2QyYTk0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTg3YWRkZWJjNzk3NDA4M2E1N2YyMmFmMTljZTZjZmEuYmluZFBvcHVwKHBvcHVwXzQ3MWFhNWNlZWM2NzQ1ZDQ5MGM3NGY1MTU0NjQxMDVjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE1MzI4YmFmZTBjMTQ3YzNhMGM3MTdhNDZhZThlMGRlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNjE2MjU5LDE1LjMxODc0NTk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kZmU4Y2VjZWJiMDY0ZjVkYTYwNzdmYzA3NTNmYjhlMCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMTUzMjhiYWZlMGMxNDdjM2EwYzcxN2E0NmFlOGUwZGUuc2V0SWNvbihpY29uX2RmZThjZWNlYmIwNjRmNWRhNjA3N2ZjMDc1M2ZiOGUwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M0YmNmYzJmMzg2NTRlMjJhNWY2ZWRkMDU1NDg0ZTU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ5NTlmMGZkZTA3MDQ1NjZhZjkxMTM2OTM1OTZjY2E5ID0gJCgnPGRpdiBpZD0iaHRtbF80OTU5ZjBmZGUwNzA0NTY2YWY5MTEzNjkzNTk2Y2NhOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDMyMSBaZXNww7PFgiBQb2F1Z3VzdGlhxYRza2kgdyDFu2FnYW5pdTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzRiY2ZjMmYzODY1NGUyMmE1ZjZlZGQwNTU0ODRlNTcuc2V0Q29udGVudChodG1sXzQ5NTlmMGZkZTA3MDQ1NjZhZjkxMTM2OTM1OTZjY2E5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTUzMjhiYWZlMGMxNDdjM2EwYzcxN2E0NmFlOGUwZGUuYmluZFBvcHVwKHBvcHVwX2M0YmNmYzJmMzg2NTRlMjJhNWY2ZWRkMDU1NDg0ZTU3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhmMWJhMzJmZmQ2ODQwZjRhMmY4YTEzZmQ3YzRlYTJiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNjE4NzMxLDE1LjMyMTUwNzk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl84NTcxMDhlNGM2OGQ0YWZkOTRhMzg0NDE1NWI3ODllZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOGYxYmEzMmZmZDY4NDBmNGEyZjhhMTNmZDdjNGVhMmIuc2V0SWNvbihpY29uXzg1NzEwOGU0YzY4ZDRhZmQ5NGEzODQ0MTU1Yjc4OWVlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE3ZjA4NzNlZTM2MzRmOGI4MDc5N2EyNjFkYzliZmNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZhMmQ2NWE0ZTBmMjQwZmRiYTAwZDNmZjhhODFjNTQ1ID0gJCgnPGRpdiBpZD0iaHRtbF9mYTJkNjVhNGUwZjI0MGZkYmEwMGQzZmY4YTgxYzU0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDMyMiBXaWXFvGEgd2lkb2tvd2EgZGF3LiBLb8WbY2lvxYJhIMWBYXNraSB3IMW7YWdhbml1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xN2YwODczZWUzNjM0ZjhiODA3OTdhMjYxZGM5YmZjZi5zZXRDb250ZW50KGh0bWxfZmEyZDY1YTRlMGYyNDBmZGJhMDBkM2ZmOGE4MWM1NDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84ZjFiYTMyZmZkNjg0MGY0YTJmOGExM2ZkN2M0ZWEyYi5iaW5kUG9wdXAocG9wdXBfMTdmMDg3M2VlMzYzNGY4YjgwNzk3YTI2MWRjOWJmY2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjVlZGQ2MDhlZmYyNGViYmE5MGVhZjcxYzNkZjcxMzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS42MTE2NjEsMTUuMzMyNzA5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzY2MTBkZWQ1MzExYjRjNGQ5NDMwMmQwYWYzNzk0MWI0ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mNWVkZDYwOGVmZjI0ZWJiYTkwZWFmNzFjM2RmNzEzNi5zZXRJY29uKGljb25fNjYxMGRlZDUzMTFiNGM0ZDk0MzAyZDBhZjM3OTQxYjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzZlZjZkZDcyNmE2NDBiYmFmZDk0ZGYxNDEyYjk0NzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTBiODM0ZTgwZTEzNGI0YzliNzAxNTJmNmZiYjU4ODMgPSAkKCc8ZGl2IGlkPSJodG1sX2EwYjgzNGU4MGUxMzRiNGM5YjcwMTUyZjZmYmI1ODgzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzIzIEtvxZtjacOzxYIgxZp3acSZdGVnbyBLcnp5xbxhIHcgxbthZ2FuaXU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc2ZWY2ZGQ3MjZhNjQwYmJhZmQ5NGRmMTQxMmI5NDc4LnNldENvbnRlbnQoaHRtbF9hMGI4MzRlODBlMTM0YjRjOWI3MDE1MmY2ZmJiNTg4Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y1ZWRkNjA4ZWZmMjRlYmJhOTBlYWY3MWMzZGY3MTM2LmJpbmRQb3B1cChwb3B1cF83NmVmNmRkNzI2YTY0MGJiYWZkOTRkZjE0MTJiOTQ3OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yMjc5YjVlMWEyODg0MTI2OGUxMjY5MmIzNDRiM2UxMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjYyNzM4MSwxNS4yODY0ODU5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNWM2NDA1OGM4ZWE5NDUyNWI5MjIwYzY2NjY1OWZhZDggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzIyNzliNWUxYTI4ODQxMjY4ZTEyNjkyYjM0NGIzZTEzLnNldEljb24oaWNvbl81YzY0MDU4YzhlYTk0NTI1YjkyMjBjNjY2NjU5ZmFkOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYzlkOTE5MWZjNGM0NzlhYjNkY2VmYmE1YzU4MTc4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYzk4YzdjNWUzMDA0Yzg0ODVmYTlmOGVhOWVmMTY1NCA9ICQoJzxkaXYgaWQ9Imh0bWxfMWM5OGM3YzVlMzAwNGM4NDg1ZmE5ZjhlYTllZjE2NTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzMjQgQ2VudHJ1bSBUcmFkeWNqaSBQb2xza2ljaCBXb2pzayBQYW5jZXJueWNoIHcgxbthZ2FuaXU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjOWQ5MTkxZmM0YzQ3OWFiM2RjZWZiYTVjNTgxNzgwLnNldENvbnRlbnQoaHRtbF8xYzk4YzdjNWUzMDA0Yzg0ODVmYTlmOGVhOWVmMTY1NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzIyNzliNWUxYTI4ODQxMjY4ZTEyNjkyYjM0NGIzZTEzLmJpbmRQb3B1cChwb3B1cF9lYzlkOTE5MWZjNGM0NzlhYjNkY2VmYmE1YzU4MTc4MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mYmEwNmExODUzMWE0NWEzODY4NTVkZjI5ZWU2NzZiMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjU5NjY1OCwxNS4yOTIwNjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOGM0OWE1YjhiMjhmNGE5ZWJmMWYzODUxMzk5NzA3ZGEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2ZiYTA2YTE4NTMxYTQ1YTM4Njg1NWRmMjllZTY3NmIwLnNldEljb24oaWNvbl84YzQ5YTViOGIyOGY0YTllYmYxZjM4NTEzOTk3MDdkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YWFhNGE2MzRkMDQ0NGYzOTBhOGE2NTI3NTBkNDdkMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNzRiODdkMGQ2NTE0MzI3YTMzZWE1YmE1OTIzNDdjMSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjc0Yjg3ZDBkNjUxNDMyN2EzM2VhNWJhNTkyMzQ3YzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzMjUgTXV6ZXVtIE9ib3rDs3cgSmVuaWVja2ljaCB3IMW7YWdhbml1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YWFhNGE2MzRkMDQ0NGYzOTBhOGE2NTI3NTBkNDdkMi5zZXRDb250ZW50KGh0bWxfZjc0Yjg3ZDBkNjUxNDMyN2EzM2VhNWJhNTkyMzQ3YzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mYmEwNmExODUzMWE0NWEzODY4NTVkZjI5ZWU2NzZiMC5iaW5kUG9wdXAocG9wdXBfNWFhYTRhNjM0ZDA0NDRmMzkwYThhNjUyNzUwZDQ3ZDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmE4Y2U4M2E5NGM3NGFhZTk1ZWFiMjYyNzljN2MyNDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS45NDQ0MiwxNS4zMTc2NTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYjMxYjgyOGU0MmRjNDY5MTlkNWY1ZDExZDdhZDU4NWQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzZhOGNlODNhOTRjNzRhYWU5NWVhYjI2Mjc5YzdjMjQwLnNldEljb24oaWNvbl9iMzFiODI4ZTQyZGM0NjkxOWQ1ZjVkMTFkN2FkNTg1ZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMThlYmM2OTFkZGU0YTcwYjM5YWNhNDRkYjBjNzU3MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZDlmYTQ1MGI5NTA0NjNkODc1YTZhMDhmMmMzYzllNiA9ICQoJzxkaXYgaWQ9Imh0bWxfY2Q5ZmE0NTBiOTUwNDYzZDg3NWE2YTA4ZjJjM2M5ZTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzMjYgTHVidXNraWUgTXV6ZXVtIFdvanNrb3dlIHcgRHJ6b25vd2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMThlYmM2OTFkZGU0YTcwYjM5YWNhNDRkYjBjNzU3Mi5zZXRDb250ZW50KGh0bWxfY2Q5ZmE0NTBiOTUwNDYzZDg3NWE2YTA4ZjJjM2M5ZTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82YThjZTgzYTk0Yzc0YWFlOTVlYWIyNjI3OWM3YzI0MC5iaW5kUG9wdXAocG9wdXBfMzE4ZWJjNjkxZGRlNGE3MGIzOWFjYTQ0ZGIwYzc1NzIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODE0YzY5ZDM1NDlkNDNhMTgxOWRhZjhkMjM0N2Q1NTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS43Mzk3NywxNS4xMzQ3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8xODMwZmUxZTk3NmM0MDhmYWNlNWUzYWUxYmYzOTlhYyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODE0YzY5ZDM1NDlkNDNhMTgxOWRhZjhkMjM0N2Q1NTIuc2V0SWNvbihpY29uXzE4MzBmZTFlOTc2YzQwOGZhY2U1ZTNhZTFiZjM5OWFjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVmNjNjYjM3NzJiYzQ4OWQ4MGM1YzUxYzg1MDBjOGY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1NGNiOGRmYWQ4ZTQ0YjE5YjY3ZDI2OGYzNDk4MDkzID0gJCgnPGRpdiBpZD0iaHRtbF8wNTRjYjhkZmFkOGU0NGIxOWI2N2QyNjhmMzQ5ODA5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDMyNyBLb8WbY2nDs8WCIFJvbWHFhHNraSBQb2R3ecW8c3plbmlhIEtyennFvGEgxZp3LiB3IEJpZWRyenljaG93aWNhY2ggRG9sbnljaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWY2M2NiMzc3MmJjNDg5ZDgwYzVjNTFjODUwMGM4Zjcuc2V0Q29udGVudChodG1sXzA1NGNiOGRmYWQ4ZTQ0YjE5YjY3ZDI2OGYzNDk4MDkzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODE0YzY5ZDM1NDlkNDNhMTgxOWRhZjhkMjM0N2Q1NTIuYmluZFBvcHVwKHBvcHVwXzVmNjNjYjM3NzJiYzQ4OWQ4MGM1YzUxYzg1MDBjOGY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VjZGM2MGZhNTY5NDRiMWE5YTE5ODI5YWFlOGFhZTRhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODYwMTk0LDE1LjU2MjkyNjk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85MDQzZWQ2YWQ0OGQ0Mjg5ODU4NDkzYzNkYzZlOTliNiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZWNkYzYwZmE1Njk0NGIxYTlhMTk4MjlhYWU4YWFlNGEuc2V0SWNvbihpY29uXzkwNDNlZDZhZDQ4ZDQyODk4NTg0OTNjM2RjNmU5OWI2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I5NDEzZjlkODRiNDQ1ZGY5MTQyZWEyODY2ZTVjNmEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczZjljMTExZWJlMjQxNzc5YjJmMjRiZThhM2NmOWM1ID0gJCgnPGRpdiBpZD0iaHRtbF83M2Y5YzExMWViZTI0MTc3OWIyZjI0YmU4YTNjZjljNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDMyOCBSdWlueSBwYcWCYWN1IERvcm90eSBUZWxsZXlyYW5kIHcgWmF0b25pdTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjk0MTNmOWQ4NGI0NDVkZjkxNDJlYTI4NjZlNWM2YTMuc2V0Q29udGVudChodG1sXzczZjljMTExZWJlMjQxNzc5YjJmMjRiZThhM2NmOWM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWNkYzYwZmE1Njk0NGIxYTlhMTk4MjlhYWU4YWFlNGEuYmluZFBvcHVwKHBvcHVwX2I5NDEzZjlkODRiNDQ1ZGY5MTQyZWEyODY2ZTVjNmEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU1ZjAwYTlhNmU0ZjRiYWNiMzI3ZWVhZDk5YmJmNDEwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNjA4Njg0LDE1Ljk5OTMyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2RlMWFjYjBmYWY3ODQzNjlhZDMxYWQ2OGNiN2MwZmVmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81NWYwMGE5YTZlNGY0YmFjYjMyN2VlYWQ5OWJiZjQxMC5zZXRJY29uKGljb25fZGUxYWNiMGZhZjc4NDM2OWFkMzFhZDY4Y2I3YzBmZWYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTFjYjBkZGE3NTMzNGU3N2JlOGQzNTg0NTZjOTk0YWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTQzYmVhYjg1NGJjNGMyYTlhMDcxNTQzZTRiZDc0NGYgPSAkKCc8ZGl2IGlkPSJodG1sXzE0M2JlYWI4NTRiYzRjMmE5YTA3MTU0M2U0YmQ3NDRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzI5IFNhbmt0dWFyaXVtIMWady4gSmFrdWJhIEFwb3N0b8WCYSB3IEpha3Vib3dpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTFjYjBkZGE3NTMzNGU3N2JlOGQzNTg0NTZjOTk0YWUuc2V0Q29udGVudChodG1sXzE0M2JlYWI4NTRiYzRjMmE5YTA3MTU0M2U0YmQ3NDRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTVmMDBhOWE2ZTRmNGJhY2IzMjdlZWFkOTliYmY0MTAuYmluZFBvcHVwKHBvcHVwXzUxY2IwZGRhNzUzMzRlNzdiZThkMzU4NDU2Yzk5NGFlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNiOWUyYWQxNDExZTRkNTNhMTU5ZDE1ZmYzMWQ4MGU3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNTQzNzc4LDE2LjE3MTgwOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iZGNiNzI2N2EyMWU0ZTA1OTJmNmI2MDQ1NTdiZDExMyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfM2I5ZTJhZDE0MTFlNGQ1M2ExNTlkMTVmZjMxZDgwZTcuc2V0SWNvbihpY29uX2JkY2I3MjY3YTIxZTRlMDU5MmY2YjYwNDU1N2JkMTEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgzMTgzZTEyMzI0YTQwYTI5MDBiOWZkZjI3Y2Y5YTk0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY4MzA3Y2YyMzVmZDQ0MTY4NGFlZDJkNTc4MThkZjNjID0gJCgnPGRpdiBpZD0iaHRtbF82ODMwN2NmMjM1ZmQ0NDE2ODRhZWQyZDU3ODE4ZGYzYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDMzMCBTYW5rdHVhcml1bSBNYXRraSBCb8W8ZWogSnV0cnplbmtpIE5hZHppZWkgdyBHcm9kb3djdTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODMxODNlMTIzMjRhNDBhMjkwMGI5ZmRmMjdjZjlhOTQuc2V0Q29udGVudChodG1sXzY4MzA3Y2YyMzVmZDQ0MTY4NGFlZDJkNTc4MThkZjNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2I5ZTJhZDE0MTFlNGQ1M2ExNTlkMTVmZjMxZDgwZTcuYmluZFBvcHVwKHBvcHVwXzgzMTgzZTEyMzI0YTQwYTI5MDBiOWZkZjI3Y2Y5YTk0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VkOGQ1OTA1MmFlYzRjM2JiYzc3NjY2ZWMzNWMyOTE1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuOTUwNjA0LDE1LjcwOTgxMDk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iMGY2NTMyNTM1MDg0YjVmOTNhNDdlZGY1NTA3MGRiOSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZWQ4ZDU5MDUyYWVjNGMzYmJjNzc2NjZlYzM1YzI5MTUuc2V0SWNvbihpY29uX2IwZjY1MzI1MzUwODRiNWY5M2E0N2VkZjU1MDcwZGI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U3NjE2MzI2MmFlNjQzZmNiNzlkODNjODc5OTAzOGY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5ZWRkOWVmOTM3MjQ0ZDY4MjA5ZGFmNzliNTdhZDE3ID0gJCgnPGRpdiBpZD0iaHRtbF9kOWVkZDllZjkzNzI0NGQ2ODIwOWRhZjc5YjU3YWQxNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDMzMSBMdWJ1c2tpZSBDZW50cnVtIFdpbmlhcnN0d2EgdyBaYWJvcnplPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNzYxNjMyNjJhZTY0M2ZjYjc5ZDgzYzg3OTkwMzhmNC5zZXRDb250ZW50KGh0bWxfZDllZGQ5ZWY5MzcyNDRkNjgyMDlkYWY3OWI1N2FkMTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lZDhkNTkwNTJhZWM0YzNiYmM3NzY2NmVjMzVjMjkxNS5iaW5kUG9wdXAocG9wdXBfZTc2MTYzMjYyYWU2NDNmY2I3OWQ4M2M4Nzk5MDM4ZjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzFiMWZkZjZkMDg1NDRiZGE3MDFkMjM4OTI0MWRiZDggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS45NTU0NTIsMTUuNjI1MTU5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2ZiM2QzYmY1NDhmYjQ5YzM4MGI2MjRhNjJkMzA0NDY5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zMWIxZmRmNmQwODU0NGJkYTcwMWQyMzg5MjQxZGJkOC5zZXRJY29uKGljb25fZmIzZDNiZjU0OGZiNDljMzgwYjYyNGE2MmQzMDQ0NjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDkxMTI3ZTcxZGNjNGVlNTg0M2E3MTAyZDExYjE2MGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTE3N2U2MzgxOGM4NGM2YWExYjYxNmVkNzE0NjhmNzYgPSAkKCc8ZGl2IGlkPSJodG1sX2UxNzdlNjM4MThjODRjNmFhMWI2MTZlZDcxNDY4Zjc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzMyIE5lb3JlbmVzYW5zb3d5IFBhxYJhYyB3IFByenl0b2t1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wOTExMjdlNzFkY2M0ZWU1ODQzYTcxMDJkMTFiMTYwZS5zZXRDb250ZW50KGh0bWxfZTE3N2U2MzgxOGM4NGM2YWExYjYxNmVkNzE0NjhmNzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zMWIxZmRmNmQwODU0NGJkYTcwMWQyMzg5MjQxZGJkOC5iaW5kUG9wdXAocG9wdXBfMDkxMTI3ZTcxZGNjNGVlNTg0M2E3MTAyZDExYjE2MGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGIyNDJmZDNjZGUxNGVkNzhiMWVlODIzOWM0OTUxYTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS45NDg0NTksMTUuNzE3MTI5MDAwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2EwNzc3MjFhOWU2ZTRiNGU5MzNiOWU4YWMyZDFmNGEyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl84YjI0MmZkM2NkZTE0ZWQ3OGIxZWU4MjM5YzQ5NTFhMi5zZXRJY29uKGljb25fYTA3NzcyMWE5ZTZlNGI0ZTkzM2I5ZThhYzJkMWY0YTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWFlY2M5ZDE2NmU1NDIwMWJkM2I4MTg4YmM0ZTUxOWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzI3YzVlYjY2MjcxNDUxNTkzNjU5OWQ3N2I1YmQyZDYgPSAkKCc8ZGl2IGlkPSJodG1sXzMyN2M1ZWI2NjI3MTQ1MTU5MzY1OTlkNzdiNWJkMmQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzM2IFplc3DDs8WCIFBhxYJhY293byBQYXJrb3d5IHcgWmFib3J6ZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWFlY2M5ZDE2NmU1NDIwMWJkM2I4MTg4YmM0ZTUxOWUuc2V0Q29udGVudChodG1sXzMyN2M1ZWI2NjI3MTQ1MTU5MzY1OTlkNzdiNWJkMmQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGIyNDJmZDNjZGUxNGVkNzhiMWVlODIzOWM0OTUxYTIuYmluZFBvcHVwKHBvcHVwX2VhZWNjOWQxNjZlNTQyMDFiZDNiODE4OGJjNGU1MTllKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUzZDk2YjM5NTNhODQ2ZjlhMmRlOTUxNGE3NDM0N2UxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMDQ5NjYzLDE1LjA5ODM3M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zMTUxMGE1ZDExMWE0NDVhYWQxYWZjOWZkMjBjNzUxOCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNTNkOTZiMzk1M2E4NDZmOWEyZGU5NTE0YTc0MzQ3ZTEuc2V0SWNvbihpY29uXzMxNTEwYTVkMTExYTQ0NWFhZDFhZmM5ZmQyMGM3NTE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1NzQ1NDNlMWM1MTRlZGZiZjI0MmM0YWM4NWIzYTUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdlOThlNjc2OWI2MDQ2NTM5NDZjOWNmZmRhN2EzMmYyID0gJCgnPGRpdiBpZD0iaHRtbF83ZTk4ZTY3NjliNjA0NjUzOTQ2YzljZmZkYTdhMzJmMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDMzNyBNb3N0IG5hIE9kcnplIHcgS3JvxZtuaWUgT2RyemHFhHNraW08L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1NzQ1NDNlMWM1MTRlZGZiZjI0MmM0YWM4NWIzYTUzLnNldENvbnRlbnQoaHRtbF83ZTk4ZTY3NjliNjA0NjUzOTQ2YzljZmZkYTdhMzJmMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUzZDk2YjM5NTNhODQ2ZjlhMmRlOTUxNGE3NDM0N2UxLmJpbmRQb3B1cChwb3B1cF9lNTc0NTQzZTFjNTE0ZWRmYmYyNDJjNGFjODViM2E1Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYjYwMjA4MWVkMmM0MjI4ODEwZDRmZDJmZGQ4NzUyYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjMzNDYyLDE1LjI5Mjk1Nzk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9mODI2YmE2MjM1NTE0MTI4YTE4ODVlYjg2OTJmMTkyZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZGI2MDIwODFlZDJjNDIyODgxMGQ0ZmQyZmRkODc1MmMuc2V0SWNvbihpY29uX2Y4MjZiYTYyMzU1MTQxMjhhMTg4NWViODY5MmYxOTJkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgwZmNmYWRiOWU3ZjQ4ZTJhNDcwZjA4OWEyZTY0YjNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5YTk0MWRmOWJlMTQ0NTRhZjY4NGUwOGUzYWFlMzM3ID0gJCgnPGRpdiBpZD0iaHRtbF84OWE5NDFkZjliZTE0NDU0YWY2ODRlMDhlM2FhZTMzNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDMzOCBaYW1layBKb2Fubml0w7N3IHcgxYFhZ293aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgwZmNmYWRiOWU3ZjQ4ZTJhNDcwZjA4OWEyZTY0YjNkLnNldENvbnRlbnQoaHRtbF84OWE5NDFkZjliZTE0NDU0YWY2ODRlMDhlM2FhZTMzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RiNjAyMDgxZWQyYzQyMjg4MTBkNGZkMmZkZDg3NTJjLmJpbmRQb3B1cChwb3B1cF84MGZjZmFkYjllN2Y0OGUyYTQ3MGYwODlhMmU2NGIzZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yODM2NmI0N2ZjODQ0ZmViODYwZTY5MDEwNTg2M2FkMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjIwNjk2NSwxNi4xNjE2MDc5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNDViNTE1OTI1MTUyNDFlZDhjZDlmMTQ1YWNjNjQyZTQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzI4MzY2YjQ3ZmM4NDRmZWI4NjBlNjkwMTA1ODYzYWQzLnNldEljb24oaWNvbl80NWI1MTU5MjUxNTI0MWVkOGNkOWYxNDVhY2M2NDJlNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NThmMDI5Y2JmZjI0ODAwYTg5NDFkM2MxMmE2MDk0MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOWU2NWZmMDJkMjc0M2U2YjE5YTE2Mjc1NjFhMjIyOSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDllNjVmZjAyZDI3NDNlNmIxOWExNjI3NTYxYTIyMjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0MTkgS2F0ZWRyYSDFm3cuIGFwLiBQaW90cmEgaSBQYXfFgmEgdyBMZWduaWN5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NThmMDI5Y2JmZjI0ODAwYTg5NDFkM2MxMmE2MDk0My5zZXRDb250ZW50KGh0bWxfZDllNjVmZjAyZDI3NDNlNmIxOWExNjI3NTYxYTIyMjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yODM2NmI0N2ZjODQ0ZmViODYwZTY5MDEwNTg2M2FkMy5iaW5kUG9wdXAocG9wdXBfNjU4ZjAyOWNiZmYyNDgwMGE4OTQxZDNjMTJhNjA5NDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmRjOGRlM2VmYTc1NDg5ZTg4Zjg4YWVkNWFhYzEwYWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4xMjMyODQsMTUuOTEzMjY2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzQ4NjMyYzM2YzhiMjRhNTliMThiYTIzMTI3YmI2ZDliID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82ZGM4ZGUzZWZhNzU0ODllODhmODhhZWQ1YWFjMTBhYi5zZXRJY29uKGljb25fNDg2MzJjMzZjOGIyNGE1OWIxOGJhMjMxMjdiYjZkOWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjM3Zjg2Yjg0Y2E1NGEwMGI4NGM1OTAwNTdjNjRmMzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjQyODhiMjg1YmM4NGQxZjgxZDM2ODMxOTg2MGE1YTUgPSAkKCc8ZGl2IGlkPSJodG1sXzY0Mjg4YjI4NWJjODRkMWY4MWQzNjgzMTk4NjBhNWE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDIwIE11emV1bSBaxYJvdGEgdyBaxYJvdG9yeWk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYzN2Y4NmI4NGNhNTRhMDBiODRjNTkwMDU3YzY0ZjM5LnNldENvbnRlbnQoaHRtbF82NDI4OGIyODViYzg0ZDFmODFkMzY4MzE5ODYwYTVhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZkYzhkZTNlZmE3NTQ4OWU4OGY4OGFlZDVhYWMxMGFiLmJpbmRQb3B1cChwb3B1cF82MzdmODZiODRjYTU0YTAwYjg0YzU5MDA1N2M2NGYzOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85Mjg2MjAwZTlmYzY0Y2IzOWQyODI2Mzc2NzBhNDhlZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjEyMTk5NSwxNS45MTMzMjRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOWMxZmFlZTM1OTU0NDZjNzlmNjFiYTBjY2JlMmFjMGQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzkyODYyMDBlOWZjNjRjYjM5ZDI4MjYzNzY3MGE0OGVlLnNldEljb24oaWNvbl85YzFmYWVlMzU5NTQ0NmM3OWY2MWJhMGNjYmUyYWMwZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNzhhODU2OTJkZTk0MGU5YjIwNDBjOGU3YjFjZmU1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YTY0ZWM0M2QxYzQ0N2IxODgxOGQyNGYyY2U0OWVmNCA9ICQoJzxkaXYgaWQ9Imh0bWxfNGE2NGVjNDNkMWM0NDdiMTg4MThkMjRmMmNlNDllZjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0MjEgQmFzenRhIEtvd2Fsc2thIHcgWsWCb3RvcnlpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNzhhODU2OTJkZTk0MGU5YjIwNDBjOGU3YjFjZmU1Yy5zZXRDb250ZW50KGh0bWxfNGE2NGVjNDNkMWM0NDdiMTg4MThkMjRmMmNlNDllZjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85Mjg2MjAwZTlmYzY0Y2IzOWQyODI2Mzc2NzBhNDhlZS5iaW5kUG9wdXAocG9wdXBfYjc4YTg1NjkyZGU5NDBlOWIyMDQwYzhlN2IxY2ZlNWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWYwNzU3OTUyNGRhNDNmYWJhODc2MGU1ZTY3NzUyZWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4xMzA0OTIsMTUuOTIxMTQ1OTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2Y1ZTRmMDdlZmM0NTQ1MmE5N2JiNDJkNGY1Zjg2MGZjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xZjA3NTc5NTI0ZGE0M2ZhYmE4NzYwZTVlNjc3NTJlYy5zZXRJY29uKGljb25fZjVlNGYwN2VmYzQ1NDUyYTk3YmI0MmQ0ZjVmODYwZmMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGM5NTYzZDk4MTVhNDkyZTkyOTg0Zjc1ZTYzYzQ3ODAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDg3ODZjNmVmNjU4NDMwMTg3ZGE0ZWZkODVhMGFkNTYgPSAkKCc8ZGl2IGlkPSJodG1sXzQ4Nzg2YzZlZjY1ODQzMDE4N2RhNGVmZDg1YTBhZDU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDIyIEtvcGFsbmlhIFrFgm90YSDigJ5BdXJlbGlh4oCdIHcgWsWCb3RvcnlpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYzk1NjNkOTgxNWE0OTJlOTI5ODRmNzVlNjNjNDc4MC5zZXRDb250ZW50KGh0bWxfNDg3ODZjNmVmNjU4NDMwMTg3ZGE0ZWZkODVhMGFkNTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xZjA3NTc5NTI0ZGE0M2ZhYmE4NzYwZTVlNjc3NTJlYy5iaW5kUG9wdXAocG9wdXBfZGM5NTYzZDk4MTVhNDkyZTkyOTg0Zjc1ZTYzYzQ3ODApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzI4Y2M4MmQ3NGYzNGY4OGJlNmZkOTg0NmU2NDYwNDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4yNjM2MzksMTUuNTY3MTcyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzdkYjUxNTEyZGYyYzQzYzM5Y2U0MjU3ODRkYzQyMzI2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zMjhjYzgyZDc0ZjM0Zjg4YmU2ZmQ5ODQ2ZTY0NjA0NC5zZXRJY29uKGljb25fN2RiNTE1MTJkZjJjNDNjMzljZTQyNTc4NGRjNDIzMjYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWM3ZjBkMTg4ZmJiNDYxZDkyNzljZjBlOGE0OGQ0ZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTk4OTNjYjdmYjBhNGU1NmEzMTIwNDhjZGFlZDFjMmIgPSAkKCc8ZGl2IGlkPSJodG1sX2U5ODkzY2I3ZmIwYTRlNTZhMzEyMDQ4Y2RhZWQxYzJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDIzIE11emV1bSBDZXJhbWlraSB3IEJvbGVzxYJhd2N1IOKAkyBDZXJhbWlrYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWM3ZjBkMTg4ZmJiNDYxZDkyNzljZjBlOGE0OGQ0ZGUuc2V0Q29udGVudChodG1sX2U5ODkzY2I3ZmIwYTRlNTZhMzEyMDQ4Y2RhZWQxYzJiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzI4Y2M4MmQ3NGYzNGY4OGJlNmZkOTg0NmU2NDYwNDQuYmluZFBvcHVwKHBvcHVwX2FjN2YwZDE4OGZiYjQ2MWQ5Mjc5Y2YwZThhNDhkNGRlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY3MTU0MzkwNDRmNTQ3Nzg4YWJkMzk3NzI3NjZiYmNiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMjYxNzU5LDE1LjU2NDA0ODk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hYzcxNjFhODZlN2Y0MjAxYTYxMmY1N2EzNjU5Y2IyOSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjcxNTQzOTA0NGY1NDc3ODhhYmQzOTc3Mjc2NmJiY2Iuc2V0SWNvbihpY29uX2FjNzE2MWE4NmU3ZjQyMDFhNjEyZjU3YTM2NTljYjI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5MzYwZDQ0MGFkYTQzMTBhYTc1NDI0NzA0NTU3ZWVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FhNmU3OTMzNjg2NTQyN2I4ZDBiODI0ZjBiYWVkOTYyID0gJCgnPGRpdiBpZD0iaHRtbF9hYTZlNzkzMzY4NjU0MjdiOGQwYjgyNGYwYmFlZDk2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQyNCBNdXpldW0gQ2VyYW1pa2kgdyBCb2xlc8WCYXdjdSAtIEhpc3RvcmlhIE1pYXN0YTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODkzNjBkNDQwYWRhNDMxMGFhNzU0MjQ3MDQ1NTdlZWMuc2V0Q29udGVudChodG1sX2FhNmU3OTMzNjg2NTQyN2I4ZDBiODI0ZjBiYWVkOTYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjcxNTQzOTA0NGY1NDc3ODhhYmQzOTc3Mjc2NmJiY2IuYmluZFBvcHVwKHBvcHVwXzg5MzYwZDQ0MGFkYTQzMTBhYTc1NDI0NzA0NTU3ZWVjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE2YjY2MDJhZTk2NTQ4YmJhYjUyMWU3MWE5NGNkNTg0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMjYyOTY4LDE1LjU2NDgyNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kNDAwNDJlZWIyMmY0MjcwOWRkMzljNDE3MmViYzE5NSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMTZiNjYwMmFlOTY1NDhiYmFiNTIxZTcxYTk0Y2Q1ODQuc2V0SWNvbihpY29uX2Q0MDA0MmVlYjIyZjQyNzA5ZGQzOWM0MTcyZWJjMTk1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxMjMxZmI1YjQ2NTQ2MDdhNzU3ODI0ZWEzMmE4NGU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzNDI5ZDlhZjQ3ZjQ1ZTg4MzI0YWFmNGFmOThlNmUwID0gJCgnPGRpdiBpZD0iaHRtbF81MzQyOWQ5YWY0N2Y0NWU4ODMyNGFhZjRhZjk4ZTZlMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQyNSBSYXR1c3ogbmEgcnlua3UgU3RhcmVnbyBNaWFzdGEgdyBCb2xlc8WCYXdjdTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDEyMzFmYjViNDY1NDYwN2E3NTc4MjRlYTMyYTg0ZTUuc2V0Q29udGVudChodG1sXzUzNDI5ZDlhZjQ3ZjQ1ZTg4MzI0YWFmNGFmOThlNmUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTZiNjYwMmFlOTY1NDhiYmFiNTIxZTcxYTk0Y2Q1ODQuYmluZFBvcHVwKHBvcHVwXzAxMjMxZmI1YjQ2NTQ2MDdhNzU3ODI0ZWEzMmE4NGU1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdkOGI0YmYyYzcxNzRhZjJiY2M4NGFlOTJjMDc4YzdlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMjYyMzI2LDE1LjU2NjUxNDk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81YzczMjE5YWFhMzU0ODcxOGEwNjYwNjAxYTk0NDE2NSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfN2Q4YjRiZjJjNzE3NGFmMmJjYzg0YWU5MmMwNzhjN2Uuc2V0SWNvbihpY29uXzVjNzMyMTlhYWEzNTQ4NzE4YTA2NjA2MDFhOTQ0MTY1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZmMTUyOTk0N2RlZTQ5MzA5YWQ2MTBlZTgzN2ViYWQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzZjU0YTQ0NDZhMDQ1MzM4NzFkY2YwMWIxM2Y1MWIyID0gJCgnPGRpdiBpZD0iaHRtbF80M2Y1NGE0NDQ2YTA0NTMzODcxZGNmMDFiMTNmNTFiMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQyNiBLb8WbY2nDs8WCIFduaWVib3d6acSZY2lhIE5NUCBpIMWbdy4gTWlrb8WCYWphIHcgQm9sZXPFgmF3Y3U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZmMTUyOTk0N2RlZTQ5MzA5YWQ2MTBlZTgzN2ViYWQ0LnNldENvbnRlbnQoaHRtbF80M2Y1NGE0NDQ2YTA0NTMzODcxZGNmMDFiMTNmNTFiMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdkOGI0YmYyYzcxNzRhZjJiY2M4NGFlOTJjMDc4YzdlLmJpbmRQb3B1cChwb3B1cF82ZjE1Mjk5NDdkZWU0OTMwOWFkNjEwZWU4MzdlYmFkNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MWU0MjA0Y2E2MGM0ZjM3YTgzYTc4MDhjZDFmNDdmMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjI2ODU3NSwxNS41NTE1ODU5OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTBkNzAzZGE1YjJkNDYzZGJmYWIwZTNjNjE2MTQyZjAgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzYxZTQyMDRjYTYwYzRmMzdhODNhNzgwOGNkMWY0N2YxLnNldEljb24oaWNvbl9hMGQ3MDNkYTViMmQ0NjNkYmZhYjBlM2M2MTYxNDJmMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNDliMTVmM2MxYmQ0Y2JmYWY4OWFhOTVkOGY3MGU0MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZjQ3MDJmZDllMTE0ZjQzYmYwODQ1YjgyOGFiYzAwNSA9ICQoJzxkaXYgaWQ9Imh0bWxfOGY0NzAyZmQ5ZTExNGY0M2JmMDg0NWI4MjhhYmMwMDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0MjcgV2lhZHVrdCBrb2xlam93eSB3IEJvbGVzxYJhd2N1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNDliMTVmM2MxYmQ0Y2JmYWY4OWFhOTVkOGY3MGU0MS5zZXRDb250ZW50KGh0bWxfOGY0NzAyZmQ5ZTExNGY0M2JmMDg0NWI4MjhhYmMwMDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82MWU0MjA0Y2E2MGM0ZjM3YTgzYTc4MDhjZDFmNDdmMS5iaW5kUG9wdXAocG9wdXBfMDQ5YjE1ZjNjMWJkNGNiZmFmODlhYTk1ZDhmNzBlNDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzY2YmQxYjM4ZTg2NDVjNzgwMDgxNjM2MDc2M2E2MmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4xMTg0MDYsMTUuMjg5Mzc5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzk2NDU1YzZjN2YwYzQ2MThiNDNkZDE2MTE4Y2Q3NjM1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zNjZiZDFiMzhlODY0NWM3ODAwODE2MzYwNzYzYTYyZC5zZXRJY29uKGljb25fOTY0NTVjNmM3ZjBjNDYxOGI0M2RkMTYxMThjZDc2MzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTdlYTEyZWQ5Y2IyNDNiM2FiNTEzYmE0NDQwNTE4ZDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjUzYTc4MzNlMWY3NGJiMDk3NTI3ZjU2NDlhZTNhNGIgPSAkKCc8ZGl2IGlkPSJodG1sX2Y1M2E3ODMzZTFmNzRiYjA5NzUyN2Y1NjQ5YWUzYTRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDI4IFdpZcW8YSBCcmFja2EgdyBMdWJhbml1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hN2VhMTJlZDljYjI0M2IzYWI1MTNiYTQ0NDA1MThkMi5zZXRDb250ZW50KGh0bWxfZjUzYTc4MzNlMWY3NGJiMDk3NTI3ZjU2NDlhZTNhNGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zNjZiZDFiMzhlODY0NWM3ODAwODE2MzYwNzYzYTYyZC5iaW5kUG9wdXAocG9wdXBfYTdlYTEyZWQ5Y2IyNDNiM2FiNTEzYmE0NDQwNTE4ZDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzVlOWJmMmQ3OGZmNDExMzk0NDJmN2U5NDkxZjk1YzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4xMTA4NjMsMTUuNTg1NDMyOTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzg1MWQ4NTNmZDgwMTQ5NTE5YTk4ZGEwYjVhZWQ2MDIxID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jNWU5YmYyZDc4ZmY0MTEzOTQ0MmY3ZTk0OTFmOTVjNi5zZXRJY29uKGljb25fODUxZDg1M2ZkODAxNDk1MTlhOThkYTBiNWFlZDYwMjEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzFhOWFiNWEwNWUyNDBlM2EzODQyOWVjMTRmZDlhZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjgyMjU1YTcyZTBkNGYwNzhmZDZjMWQyN2FhZTFhY2UgPSAkKCc8ZGl2IGlkPSJodG1sXzI4MjI1NWE3MmUwZDRmMDc4ZmQ2YzFkMjdhYWUxYWNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDI5IFJhdHVzeiB3IEx3w7N3a3UgxZpsxIVza2ltPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMWE5YWI1YTA1ZTI0MGUzYTM4NDI5ZWMxNGZkOWFkYi5zZXRDb250ZW50KGh0bWxfMjgyMjU1YTcyZTBkNGYwNzhmZDZjMWQyN2FhZTFhY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jNWU5YmYyZDc4ZmY0MTEzOTQ0MmY3ZTk0OTFmOTVjNi5iaW5kUG9wdXAocG9wdXBfYzFhOWFiNWEwNWUyNDBlM2EzODQyOWVjMTRmZDlhZGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmM1M2I3ZDdjOGRiNGJiNzlkM2RkM2FmNGEzNmM1MjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4xMDIxMTUsMTUuNTk0MjZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNzQ3ZGU5ZDc5NmViNDdhNDg0ZDE5MzgxOWYwOWIyNDQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzZjNTNiN2Q3YzhkYjRiYjc5ZDNkZDNhZjRhMzZjNTI0LnNldEljb24oaWNvbl83NDdkZTlkNzk2ZWI0N2E0ODRkMTkzODE5ZjA5YjI0NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMTEzMDU0Y2EzZjA0M2VhYmRiYjM4YTJiYTZmNWEzNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZmRlNDgzYTAzZGE0ODBiOTU2MzMyMjc1NmM1NmIwOSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2ZkZTQ4M2EwM2RhNDgwYjk1NjMzMjI3NTZjNTZiMDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0MzAgU3p3YWpjYXJpYSBMd8Ozd2Vja2Eg4oCTIERvbGluYSBCb2JydTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTExMzA1NGNhM2YwNDNlYWJkYmIzOGEyYmE2ZjVhMzQuc2V0Q29udGVudChodG1sX2NmZGU0ODNhMDNkYTQ4MGI5NTYzMzIyNzU2YzU2YjA5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmM1M2I3ZDdjOGRiNGJiNzlkM2RkM2FmNGEzNmM1MjQuYmluZFBvcHVwKHBvcHVwX2ExMTMwNTRjYTNmMDQzZWFiZGJiMzhhMmJhNmY1YTM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk3YjEzZmRmMDQxOTRmNjFhMTY5ZmVlNjhjODA2MWQwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMDEyODczLDE1LjUxMjA4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2Q5NWUwZGI1MGQ5YzRkZWZiMDIxYWIzYzg5MzlmZWE2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85N2IxM2ZkZjA0MTk0ZjYxYTE2OWZlZTY4YzgwNjFkMC5zZXRJY29uKGljb25fZDk1ZTBkYjUwZDljNGRlZmIwMjFhYjNjODkzOWZlYTYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTMxNGMyOTI5ZmIwNGIyYzkyOGUxNTc5YTJmNDRmYTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDg3YmI5ZmE5YTczNGNkZDhkMTcyYjVkZDZhN2Q1NTcgPSAkKCc8ZGl2IGlkPSJodG1sX2Q4N2JiOWZhOWE3MzRjZGQ4ZDE3MmI1ZGQ2YTdkNTU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDMxIE1pYXN0byBMdWJvbWllcnog4oCTIFBvZ8OzcnplIEl6ZXJza2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMzE0YzI5MjlmYjA0YjJjOTI4ZTE1NzlhMmY0NGZhMy5zZXRDb250ZW50KGh0bWxfZDg3YmI5ZmE5YTczNGNkZDhkMTcyYjVkZDZhN2Q1NTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85N2IxM2ZkZjA0MTk0ZjYxYTE2OWZlZTY4YzgwNjFkMC5iaW5kUG9wdXAocG9wdXBfMTMxNGMyOTI5ZmIwNGIyYzkyOGUxNTc5YTJmNDRmYTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzM5MWNiYmQwZDcyNGFlNWI5MWRjNTQ4Yjk0NTY4YTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4wMTI5MzYsMTUuNTEwMTM2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzIzMGM1N2VjZjk3NTQxMmZhNmUzZTMyNWRhN2M2ZTZhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zMzkxY2JiZDBkNzI0YWU1YjkxZGM1NDhiOTQ1NjhhOS5zZXRJY29uKGljb25fMjMwYzU3ZWNmOTc1NDEyZmE2ZTNlMzI1ZGE3YzZlNmEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzAxNzFkOTdjNmEzNDIxNjlmYjI4ZGE0NGZhYTU5MGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWEwOWE3Y2Q5YmM0NGE2ZWI2ZDNmYzA5Yjg3OTU3NTAgPSAkKCc8ZGl2IGlkPSJodG1sXzVhMDlhN2NkOWJjNDRhNmViNmQzZmMwOWI4Nzk1NzUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDMyIE11emV1bSBLYXJndWxhIGkgUGF3bGFrYSB3IEx1Ym9taWVyenU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwMTcxZDk3YzZhMzQyMTY5ZmIyOGRhNDRmYWE1OTBlLnNldENvbnRlbnQoaHRtbF81YTA5YTdjZDliYzQ0YTZlYjZkM2ZjMDliODc5NTc1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzMzOTFjYmJkMGQ3MjRhZTViOTFkYzU0OGI5NDU2OGE5LmJpbmRQb3B1cChwb3B1cF9jMDE3MWQ5N2M2YTM0MjE2OWZiMjhkYTQ0ZmFhNTkwZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83YjcwNWExMGQ3NTA0ZTk0YjM5YzNiZWY0ZTJkOTIzYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjEzMTM1MiwxNC43MDE3MDQ5OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMGQyZWNmZjlkZDE5NGZkZjk0NjRlYWU1MmU2YzcyOWMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzdiNzA1YTEwZDc1MDRlOTRiMzljM2JlZjRlMmQ5MjNiLnNldEljb24oaWNvbl8wZDJlY2ZmOWRkMTk0ZmRmOTQ2NGVhZTUyZTZjNzI5Yyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jN2Q1NGYzODNjNzA0MzFlYWYwNzI0MjY1MTAzZWE3YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OWQxN2IxMmI5Zjg0MDgyYThmMGI4NDZmODk2NzNhMCA9ICQoJzxkaXYgaWQ9Imh0bWxfOTlkMTdiMTJiOWY4NDA4MmE4ZjBiODQ2Zjg5NjczYTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0MzYgTXV6ZXVtIEJvY2lhbmEgQmlhxYJlZ28gdyBLxYJvcG9jaWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3ZDU0ZjM4M2M3MDQzMWVhZjA3MjQyNjUxMDNlYTdjLnNldENvbnRlbnQoaHRtbF85OWQxN2IxMmI5Zjg0MDgyYThmMGI4NDZmODk2NzNhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdiNzA1YTEwZDc1MDRlOTRiMzljM2JlZjRlMmQ5MjNiLmJpbmRQb3B1cChwb3B1cF9jN2Q1NGYzODNjNzA0MzFlYWYwNzI0MjY1MTAzZWE3Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81NjFmMjZiZGQ0OWY0MThiOThlZTk1NDYzMWJjNjM4ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjYzMDA1NSwxNC44MDE1NDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTUzMGRhZDFhMGEzNDU1ODliMzVhNTE3OWQ3YzdiZmQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzU2MWYyNmJkZDQ5ZjQxOGI5OGVlOTU0NjMxYmM2MzhmLnNldEljb24oaWNvbl9hNTMwZGFkMWEwYTM0NTU4OWIzNWE1MTc5ZDdjN2JmZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NjYzZTA4MmY3OTI0OWJlOTk3N2RiMjhkZGI3MjVhMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYTIyNzkyNzRjNWM0NDE2OGQwYjFlYzZjYjM2ZTY3ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMmEyMjc5Mjc0YzVjNDQxNjhkMGIxZWM2Y2IzNmU2N2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0MzcgRGlhYmVsc2tpIGthbWllxYQg4oCTIEfFgmF6IEtyYWJhdGEgay4gVHJ6ZWJpZWxhPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NjYzZTA4MmY3OTI0OWJlOTk3N2RiMjhkZGI3MjVhMi5zZXRDb250ZW50KGh0bWxfMmEyMjc5Mjc0YzVjNDQxNjhkMGIxZWM2Y2IzNmU2N2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81NjFmMjZiZGQ0OWY0MThiOThlZTk1NDYzMWJjNjM4Zi5iaW5kUG9wdXAocG9wdXBfNDY2M2UwODJmNzkyNDliZTk5NzdkYjI4ZGRiNzI1YTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjhjZGNlM2Q0MDZkNDhlMDk5YzJkMjIwMTE1ZmYxMzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MzcyNzcsMTQuNzI3NTY0MDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzYxMDEzYzhjYWYxOTRkZDE4NTliNjFlZTcyNWIxMTU3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82OGNkY2UzZDQwNmQ0OGUwOTljMmQyMjAxMTVmZjEzNC5zZXRJY29uKGljb25fNjEwMTNjOGNhZjE5NGRkMTg1OWI2MWVlNzI1YjExNTcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDQ4YWRkODBhZWVlNDRhNGJlNWYzZWIwYWIxN2U3MDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWNlMDk3ODAyZjdkNDU0Nzg2OGFiMzJmYTM0NDRhODAgPSAkKCc8ZGl2IGlkPSJodG1sX2FjZTA5NzgwMmY3ZDQ1NDc4NjhhYjMyZmEzNDQ0YTgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDM4IEtvbGVqb3d5IG1vc3QgxYJ1a293eSB3IMWBxJlrbmljeTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDQ4YWRkODBhZWVlNDRhNGJlNWYzZWIwYWIxN2U3MDIuc2V0Q29udGVudChodG1sX2FjZTA5NzgwMmY3ZDQ1NDc4NjhhYjMyZmEzNDQ0YTgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjhjZGNlM2Q0MDZkNDhlMDk5YzJkMjIwMTE1ZmYxMzQuYmluZFBvcHVwKHBvcHVwXzQ0OGFkZDgwYWVlZTQ0YTRiZTVmM2ViMGFiMTdlNzAyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg5OTYxOTMzZDI0NTQ3MTlhMjFjOTBhZGE2MzE4Y2VhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNDc2MjgsMTQuOTQ1OTI5OTk5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2FiMDMyNDI4ZjdjODQxNTZiZWE2NWU3OWEwYjNkMTQyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl84OTk2MTkzM2QyNDU0NzE5YTIxYzkwYWRhNjMxOGNlYS5zZXRJY29uKGljb25fYWIwMzI0MjhmN2M4NDE1NmJlYTY1ZTc5YTBiM2QxNDIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmNjNzkxNTNiMzQ4NDQwNmE3Y2QyNmE0ZjIxNzc0MTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGY5YzlhMDM0MjdhNDVhMThiZTdmZWY2Y2M3ZGJlZGQgPSAkKCc8ZGl2IGlkPSJodG1sX2RmOWM5YTAzNDI3YTQ1YTE4YmU3ZmVmNmNjN2RiZWRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDM5IFdpZcW8YSBHxYJvZG93YSB3IFByemV3b3ppZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmNjNzkxNTNiMzQ4NDQwNmE3Y2QyNmE0ZjIxNzc0MTMuc2V0Q29udGVudChodG1sX2RmOWM5YTAzNDI3YTQ1YTE4YmU3ZmVmNmNjN2RiZWRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODk5NjE5MzNkMjQ1NDcxOWEyMWM5MGFkYTYzMThjZWEuYmluZFBvcHVwKHBvcHVwXzZjYzc5MTUzYjM0ODQ0MDZhN2NkMjZhNGYyMTc3NDEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzEwZTAyMzllNDExODRmZGQ5ZTc3YzAzMTdjOGExNjQ4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNTM0ODQ3LDE0Ljc0MDQxNDk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80YTIxYjE2NDFkYzI0MWIyOTUwNzE0N2EwM2NlYjg4NSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMTBlMDIzOWU0MTE4NGZkZDllNzdjMDMxN2M4YTE2NDguc2V0SWNvbihpY29uXzRhMjFiMTY0MWRjMjQxYjI5NTA3MTQ3YTAzY2ViODg1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1NzY2NzAyZWMwZDQ2MDA5ZDQ0ZGQwYzgzNjMzMWRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JlMDBkZDVjMWNjYjRmMGU4NmIyZGY5ZmMyMmViNzQ1ID0gJCgnPGRpdiBpZD0iaHRtbF9iZTAwZGQ1YzFjY2I0ZjBlODZiMmRmOWZjMjJlYjc0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQ0MCBNaWFzdG8gxYHEmWtuaWNhPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NTc2NjcwMmVjMGQ0NjAwOWQ0NGRkMGM4MzYzMzFkYy5zZXRDb250ZW50KGh0bWxfYmUwMGRkNWMxY2NiNGYwZTg2YjJkZjlmYzIyZWI3NDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMGUwMjM5ZTQxMTg0ZmRkOWU3N2MwMzE3YzhhMTY0OC5iaW5kUG9wdXAocG9wdXBfNjU3NjY3MDJlYzBkNDYwMDlkNDRkZDBjODM2MzMxZGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjY1ZGU0NzdkMTA5NDVlMmEwODJhZGQyNjg0NzI1ZTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS43OTk5OSwxNS43MTU2MzU5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fY2YyZTc2MDNhODlkNDZjNmI4Y2NkN2IyYjEzYTE1MDkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzY2NWRlNDc3ZDEwOTQ1ZTJhMDgyYWRkMjY4NDcyNWU2LnNldEljb24oaWNvbl9jZjJlNzYwM2E4OWQ0NmM2YjhjY2Q3YjJiMTNhMTUwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NWVjYTgwYWZkYTY0ODBjYTRhNjA2ZGRmNTk3Yjk5NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zODY2ODBjYTFmODk0ODFlYmM0MmExMzliOGY2NjVjNSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzg2NjgwY2ExZjg5NDgxZWJjNDJhMTM5YjhmNjY1YzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0NDYgTXV6ZXVtIE1pZWpza2llIHcgTm93ZWogU29saTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODVlY2E4MGFmZGE2NDgwY2E0YTYwNmRkZjU5N2I5OTcuc2V0Q29udGVudChodG1sXzM4NjY4MGNhMWY4OTQ4MWViYzQyYTEzOWI4ZjY2NWM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjY1ZGU0NzdkMTA5NDVlMmEwODJhZGQyNjg0NzI1ZTYuYmluZFBvcHVwKHBvcHVwXzg1ZWNhODBhZmRhNjQ4MGNhNGE2MDZkZGY1OTdiOTk3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FlNTY1NWY5NmUxOTQyNmE4YmEzOTVmZjg0ZGJjNGEwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuOTA1ODkxLDE1LjMzNTMxNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82ZGQ0MGRkMzNlYzI0NzYwYjhhOGY5YTY5MjM2ZGJjYSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYWU1NjU1Zjk2ZTE5NDI2YThiYTM5NWZmODRkYmM0YTAuc2V0SWNvbihpY29uXzZkZDQwZGQzM2VjMjQ3NjBiOGE4ZjlhNjkyMzZkYmNhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ExZjgxYmI1NWQwOTQ0ODlhODRiYTczZDY1ZGNiNDFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdkNWExOTE4YWM1NjQ2MWJiNjY5M2JkNzA3NmVkYmFkID0gJCgnPGRpdiBpZD0iaHRtbF83ZDVhMTkxOGFjNTY0NjFiYjY2OTNiZDcwNzZlZGJhZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQ0OCBIYWxhIFNwYWNlcm93YSB3IMWad2llcmFkb3dpZSBaZHJvanU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ExZjgxYmI1NWQwOTQ0ODlhODRiYTczZDY1ZGNiNDFkLnNldENvbnRlbnQoaHRtbF83ZDVhMTkxOGFjNTY0NjFiYjY2OTNiZDcwNzZlZGJhZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FlNTY1NWY5NmUxOTQyNmE4YmEzOTVmZjg0ZGJjNGEwLmJpbmRQb3B1cChwb3B1cF9hMWY4MWJiNTVkMDk0NDg5YTg0YmE3M2Q2NWRjYjQxZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lMDMwOGUxZTg2NjQ0ODU0YmE2MzY2NDU5MWIzZWI1NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjg2NTQ4MywxNS42Nzc4MzI5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYmVkMTFmOTY1NTMyNGE4NWI5ZmI3NWVhOTU1N2JjOTUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2UwMzA4ZTFlODY2NDQ4NTRiYTYzNjY0NTkxYjNlYjU3LnNldEljb24oaWNvbl9iZWQxMWY5NjU1MzI0YTg1YjlmYjc1ZWE5NTU3YmM5NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMmMzOGNlNzlmYjI0ZTU4YTMyOTI2ZDIxMTczNWJlZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNmUxZDk4ZDk0NGQ0NmRjYmMxYTkzOTZjYmM5MTViYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjZlMWQ5OGQ5NDRkNDZkY2JjMWE5Mzk2Y2JjOTE1YmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA1MDQgTXV6ZXVtIFByenlyb2RuaWN6ZSB3IEplbGVuaWVqIEfDs3J6ZSAgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMmMzOGNlNzlmYjI0ZTU4YTMyOTI2ZDIxMTczNWJlZS5zZXRDb250ZW50KGh0bWxfMjZlMWQ5OGQ5NDRkNDZkY2JjMWE5Mzk2Y2JjOTE1YmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMDMwOGUxZTg2NjQ0ODU0YmE2MzY2NDU5MWIzZWI1Ny5iaW5kUG9wdXAocG9wdXBfYzJjMzhjZTc5ZmIyNGU1OGEzMjkyNmQyMTE3MzViZWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmU0YTFkYzY2MGE1NGVkZTkyYzI4NzY3OTA1OTYwYjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4yNDk4NDgsMTUuNTMyODA3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzI5NjlkOWM3MWIwYTQ4MWNiNzRmZDhkOTY3YWE2ZDE2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mZTRhMWRjNjYwYTU0ZWRlOTJjMjg3Njc5MDU5NjBiNS5zZXRJY29uKGljb25fMjk2OWQ5YzcxYjBhNDgxY2I3NGZkOGQ5NjdhYTZkMTYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTdhNmY1MzZmYTc0NDY0NDhmM2Q1MzFkMjdmYjAxMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmFhZDI5ODRiMzY2NDM2MmExYzdhMGQwZDc4NWI3NDcgPSAkKCc8ZGl2IGlkPSJodG1sX2ZhYWQyOTg0YjM2NjQzNjJhMWM3YTBkMGQ3ODViNzQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTEzIE11emV1bSBSZWdpb25hbG5lIHcgxZp3aWVib2R6aW5pZSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U3YTZmNTM2ZmE3NDQ2NDQ4ZjNkNTMxZDI3ZmIwMTE2LnNldENvbnRlbnQoaHRtbF9mYWFkMjk4NGIzNjY0MzYyYTFjN2EwZDBkNzg1Yjc0Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZlNGExZGM2NjBhNTRlZGU5MmMyODc2NzkwNTk2MGI1LmJpbmRQb3B1cChwb3B1cF9lN2E2ZjUzNmZhNzQ0NjQ0OGYzZDUzMWQyN2ZiMDExNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNGEwZWQ3ZWMwZDc0MGJjYTExNjQ3ZDZlZDczOTg1YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjM2OTcxNywxNS40OTA3MDEwMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOWIzZWM4OWUyZjlhNDZkM2EzMTYxM2M2ZmI4ODg2MzUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2Y0YTBlZDdlYzBkNzQwYmNhMTE2NDdkNmVkNzM5ODVjLnNldEljb24oaWNvbl85YjNlYzg5ZTJmOWE0NmQzYTMxNjEzYzZmYjg4ODYzNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YTgwOGRhNDc1N2Y0NTk0OTVhODcyY2I1NTEyMjE2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMWIyMThiNjg0ZDA0NDIyYTAwZjI3MWU5Y2E1ZmQ2YiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzFiMjE4YjY4NGQwNDQyMmEwMGYyNzFlOWNhNWZkNmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA1NTEgTWnEmWR6eXJ6ZWNraSBSZWpvbiBVbW9jbmlvbnkgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YTgwOGRhNDc1N2Y0NTk0OTVhODcyY2I1NTEyMjE2Mi5zZXRDb250ZW50KGh0bWxfYzFiMjE4YjY4NGQwNDQyMmEwMGYyNzFlOWNhNWZkNmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNGEwZWQ3ZWMwZDc0MGJjYTExNjQ3ZDZlZDczOTg1Yy5iaW5kUG9wdXAocG9wdXBfNWE4MDhkYTQ3NTdmNDU5NDk1YTg3MmNiNTUxMjIxNjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjUwOTJiNGM4NjNjNDRjODg3ZDk2OWMyY2NhYTg2M2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4zNTUzNiwxNS40NjY4NjE5OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOGJiNGY5YzgxNGZkNDU3NDgzZTkwMTgxOWRhNTI3NGMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2Y1MDkyYjRjODYzYzQ0Yzg4N2Q5NjljMmNjYWE4NjNlLnNldEljb24oaWNvbl84YmI0ZjljODE0ZmQ0NTc0ODNlOTAxODE5ZGE1Mjc0Yyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNjliYWY3M2QzNWY0ODJmOGRhNGFhODlhMjJhMDM3NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYzA3OTdlZGViYTE0NTViODFmOGRjZjU0NmMyNjg0MSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWMwNzk3ZWRlYmExNDU1YjgxZjhkY2Y1NDZjMjY4NDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA1NTMgTWnEmWR6eXJ6ZWNraSBSZWpvbiBVbW9jbmlvbnkg4oCTIFDEmXRsYSBCb3J5c3p5xYRza2E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M2OWJhZjczZDM1ZjQ4MmY4ZGE0YWE4OWEyMmEwMzc0LnNldENvbnRlbnQoaHRtbF8xYzA3OTdlZGViYTE0NTViODFmOGRjZjU0NmMyNjg0MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y1MDkyYjRjODYzYzQ0Yzg4N2Q5NjljMmNjYWE4NjNlLmJpbmRQb3B1cChwb3B1cF9jNjliYWY3M2QzNWY0ODJmOGRhNGFhODlhMjJhMDM3NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNzQwMjBkMDE2ZGI0MDEwYTMxOTdjMDUzNWVjZjIxZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjM0NDMsMTQuNTkxMjkxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzc5MzVjZWQyZTU2ZjQzY2RiNTVmYTI1YThhMDk1YTY3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mNzQwMjBkMDE2ZGI0MDEwYTMxOTdjMDUzNWVjZjIxZi5zZXRJY29uKGljb25fNzkzNWNlZDJlNTZmNDNjZGI1NWZhMjVhOGEwOTVhNjcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmY5Yjg1MzIzODA5NDcxMDk3NzdhYWU3NjQzMTJiNDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzZmNDNlMjQyOGE3NDYxODlkNmY1YTYzMmQxNDQxYzggPSAkKCc8ZGl2IGlkPSJodG1sXzc2ZjQzZTI0MjhhNzQ2MTg5ZDZmNWE2MzJkMTQ0MWM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTU0IFN0YWRpb24gU09TaVIgdyBTxYJ1YmljYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZjliODUzMjM4MDk0NzEwOTc3N2FhZTc2NDMxMmI0NC5zZXRDb250ZW50KGh0bWxfNzZmNDNlMjQyOGE3NDYxODlkNmY1YTYzMmQxNDQxYzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNzQwMjBkMDE2ZGI0MDEwYTMxOTdjMDUzNWVjZjIxZi5iaW5kUG9wdXAocG9wdXBfZmY5Yjg1MzIzODA5NDcxMDk3NzdhYWU3NjQzMTJiNDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzg5NDk4NDk0ZDhiNDNkYzlkOTg2Mjc2NGQ3MGYwMzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC43NDgyMDcsMTUuNzQzNzI5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzI5OTc1Y2RiMzBkZTRiNmM4MDY3NTQ3YmUzODRhOTU1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83ODk0OTg0OTRkOGI0M2RjOWQ5ODYyNzY0ZDcwZjAzNi5zZXRJY29uKGljb25fMjk5NzVjZGIzMGRlNGI2YzgwNjc1NDdiZTM4NGE5NTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmU0OTc3NGVjY2UyNDU4NTgxODY2ZjMyOWYzODFjYTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWRjM2FlNjNmNTgxNDAxNGJkN2QwOTJhYjVkZmUwZmQgPSAkKCc8ZGl2IGlkPSJodG1sX2VkYzNhZTYzZjU4MTQwMTRiZDdkMDkyYWI1ZGZlMGZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjM2IFNjaHJvbmlza28gZ8OzcnNraWUgbmFkIMWBb21uaWN6a8SFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZTQ5Nzc0ZWNjZTI0NTg1ODE4NjZmMzI5ZjM4MWNhMy5zZXRDb250ZW50KGh0bWxfZWRjM2FlNjNmNTgxNDAxNGJkN2QwOTJhYjVkZmUwZmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83ODk0OTg0OTRkOGI0M2RjOWQ5ODYyNzY0ZDcwZjAzNi5iaW5kUG9wdXAocG9wdXBfYmU0OTc3NGVjY2UyNDU4NTgxODY2ZjMyOWYzODFjYTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTZlYTlhZTAyNTEwNGVmM2I3MTY4MjA5MWM5ZGVhNDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4yMDgyMDIsMTYuMTU4MzQ1OTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzRjNmQ3ZjczNmExMTRiZDI4ZGZmMjMzYWZlMGZlYjYwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lNmVhOWFlMDI1MTA0ZWYzYjcxNjgyMDkxYzlkZWE0NC5zZXRJY29uKGljb25fNGM2ZDdmNzM2YTExNGJkMjhkZmYyMzNhZmUwZmViNjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTdjMWU3N2RlYjJiNDA4ZTgzZDUwYzg5MzlmNGEzMzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmFkYmJkMWNiMDIzNDg3NjgzZDgxNTJiY2M0ZDE2NDYgPSAkKCc8ZGl2IGlkPSJodG1sX2JhZGJiZDFjYjAyMzQ4NzY4M2Q4MTUyYmNjNGQxNjQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjM4IEFrYWRlbWlhIFJ5Y2Vyc2thIHcgTGVnbmljeTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTdjMWU3N2RlYjJiNDA4ZTgzZDUwYzg5MzlmNGEzMzUuc2V0Q29udGVudChodG1sX2JhZGJiZDFjYjAyMzQ4NzY4M2Q4MTUyYmNjNGQxNjQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTZlYTlhZTAyNTEwNGVmM2I3MTY4MjA5MWM5ZGVhNDQuYmluZFBvcHVwKHBvcHVwXzE3YzFlNzdkZWIyYjQwOGU4M2Q1MGM4OTM5ZjRhMzM1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE5OTcwYmZiMDY3ZDRhZWQ5YTBjYTBhZTk5ZTdiY2I3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMjExMTI0LDE2LjE2MjM2MDk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hMTQ0NTRhNzYxMmQ0MWQ1YTYwYzA1NTMxZDNjM2E4OSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMTk5NzBiZmIwNjdkNGFlZDlhMGNhMGFlOTllN2JjYjcuc2V0SWNvbihpY29uX2ExNDQ1NGE3NjEyZDQxZDVhNjBjMDU1MzFkM2MzYTg5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyNTY3MDYyMjk4NDQ2MjE5MjRkNDUwYmM1ZTZkM2E1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlMWEyYzM2YzRlNzQ4Y2VhNmZmN2NlNTYyODQ0ZTNkID0gJCgnPGRpdiBpZD0iaHRtbF80ZTFhMmMzNmM0ZTc0OGNlYTZmZjdjZTU2Mjg0NGUzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDYzOSBaYW1layBQaWFzdG93c2tpIHcgTGVnbmljeTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjI1NjcwNjIyOTg0NDYyMTkyNGQ0NTBiYzVlNmQzYTUuc2V0Q29udGVudChodG1sXzRlMWEyYzM2YzRlNzQ4Y2VhNmZmN2NlNTYyODQ0ZTNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTk5NzBiZmIwNjdkNGFlZDlhMGNhMGFlOTllN2JjYjcuYmluZFBvcHVwKHBvcHVwX2YyNTY3MDYyMjk4NDQ2MjE5MjRkNDUwYmM1ZTZkM2E1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZlZDVlMzQ4MTVhZDQ2MmRhMGI4Yjc5MjBlOWFjZjRkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMjExNTI1LDE2LjE2MzkyOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82MTU3NjdlMDhiMjI0ODhlYWQwMDFkYzQwODA3MDQ5ZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNmVkNWUzNDgxNWFkNDYyZGEwYjhiNzkyMGU5YWNmNGQuc2V0SWNvbihpY29uXzYxNTc2N2UwOGIyMjQ4OGVhZDAwMWRjNDA4MDcwNDlmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IyOTI5Yzg0OTYyODRlODVhMTliN2I5NDYyYTY5MTZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5ODJjYTdlMjNlMDQ5ODY5NzM4MzM2OTdhZTBjYWUyID0gJCgnPGRpdiBpZD0iaHRtbF9kOTgyY2E3ZTIzZTA0OTg2OTczODMzNjk3YWUwY2FlMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDY0MCBXaWXFvGEgQnJhbXkgR8WCb2dvd3NraWVqIHcgTGVnbmljeTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjI5MjljODQ5NjI4NGU4NWExOWI3Yjk0NjJhNjkxNmQuc2V0Q29udGVudChodG1sX2Q5ODJjYTdlMjNlMDQ5ODY5NzM4MzM2OTdhZTBjYWUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmVkNWUzNDgxNWFkNDYyZGEwYjhiNzkyMGU5YWNmNGQuYmluZFBvcHVwKHBvcHVwX2IyOTI5Yzg0OTYyODRlODVhMTliN2I5NDYyYTY5MTZkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM3YmY1ZDUyMDg0ZjQ4OTQ4N2U2OWY1YzgyYzRmZjUxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuOTAzMjQzLDE1LjczNDEzOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81MjAxZDRlNmQ3M2Q0NGU2YThmOTM1MThhYmI4MjUwNCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMzdiZjVkNTIwODRmNDg5NDg3ZTY5ZjVjODJjNGZmNTEuc2V0SWNvbihpY29uXzUyMDFkNGU2ZDczZDQ0ZTZhOGY5MzUxOGFiYjgyNTA0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEwMWEwMmU4MmRjNDRhMzQ4ZGMxY2RlYjgwMDBmN2ZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMwMTgwODQ0ZGIyMjRlNTg5ZjRmYmViNGY3OTkyYzE1ID0gJCgnPGRpdiBpZD0iaHRtbF8zMDE4MDg0NGRiMjI0ZTU4OWY0ZmJlYjRmNzk5MmMxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDY0MyBSYXR1c3ogdyBKZWxlbmllaiBHw7NyemU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEwMWEwMmU4MmRjNDRhMzQ4ZGMxY2RlYjgwMDBmN2ZjLnNldENvbnRlbnQoaHRtbF8zMDE4MDg0NGRiMjI0ZTU4OWY0ZmJlYjRmNzk5MmMxNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM3YmY1ZDUyMDg0ZjQ4OTQ4N2U2OWY1YzgyYzRmZjUxLmJpbmRQb3B1cChwb3B1cF8xMDFhMDJlODJkYzQ0YTM0OGRjMWNkZWI4MDAwZjdmYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNWRkNDdmZDcwNTQ0ODliYTUyYmQ4ZTM5YzllZjEwMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjkwMzI5OCwxNS43MzQ2ODU5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYmUxYmRlMTQ1NjA1NDA2Y2FiYTkxZjQ4Y2VmMzc5N2MgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2Q1ZGQ0N2ZkNzA1NDQ4OWJhNTJiZDhlMzljOWVmMTAyLnNldEljb24oaWNvbl9iZTFiZGUxNDU2MDU0MDZjYWJhOTFmNDhjZWYzNzk3Yyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMjgyZTUxNTIwZjE0MzVmYTEyZTc4ODhjOTUxMzU5ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZGI3OWZjNGMxYjA0NTg3OTU0NjI5NzFjMDQ2NDFkZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMGRiNzlmYzRjMWIwNDU4Nzk1NDYyOTcxYzA0NjQxZGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2NDQgSmVsZW5pb2fDs3Jza2kgVHJhbXdhajwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjI4MmU1MTUyMGYxNDM1ZmExMmU3ODg4Yzk1MTM1OWQuc2V0Q29udGVudChodG1sXzBkYjc5ZmM0YzFiMDQ1ODc5NTQ2Mjk3MWMwNDY0MWRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDVkZDQ3ZmQ3MDU0NDg5YmE1MmJkOGUzOWM5ZWYxMDIuYmluZFBvcHVwKHBvcHVwX2IyODJlNTE1MjBmMTQzNWZhMTJlNzg4OGM5NTEzNTlkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNkYWUwMmZiNDM4YzQ0ZmE5NzI2MWFiZDY4NjU4NDc0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMDg1MjAzLDE1LjYyNTk2Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9mZDRmNjRiY2QzOTk0YTYwOTg4YTlkNWExZTdjN2ZmNSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfM2RhZTAyZmI0MzhjNDRmYTk3MjYxYWJkNjg2NTg0NzQuc2V0SWNvbihpY29uX2ZkNGY2NGJjZDM5OTRhNjA5ODhhOWQ1YTFlN2M3ZmY1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5OGM1MWYxNjFmMjRkM2U4OWQwMTc4MmU1Mzg5ZDI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwYWY4OTYyMjFjNDQ0Y2E5NjhmZTRhZGU5ZDY3ZWY1ID0gJCgnPGRpdiBpZD0iaHRtbF9lMGFmODk2MjIxYzQ0NGNhOTY4ZmU0YWRlOWQ2N2VmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDY2OCBSYXR1c3ogTWllanNraSB3IFN1bGVjaG93aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5OGM1MWYxNjFmMjRkM2U4OWQwMTc4MmU1Mzg5ZDI1LnNldENvbnRlbnQoaHRtbF9lMGFmODk2MjIxYzQ0NGNhOTY4ZmU0YWRlOWQ2N2VmNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNkYWUwMmZiNDM4YzQ0ZmE5NzI2MWFiZDY4NjU4NDc0LmJpbmRQb3B1cChwb3B1cF8zOThjNTFmMTYxZjI0ZDNlODlkMDE3ODJlNTM4OWQyNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZjhiZTE2MjIzYzc0Njk2YWQ2YzRiMjI2Mjk4MzY5OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjA4NjYyMSwxNS42Mjc4MDE5OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOWQ3YTRmNjJjNTRmNGY5NTk0Yzk5NTJhYzQ1ODA0NTAgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2RmOGJlMTYyMjNjNzQ2OTZhZDZjNGIyMjYyOTgzNjk4LnNldEljb24oaWNvbl85ZDdhNGY2MmM1NGY0Zjk1OTRjOTk1MmFjNDU4MDQ1MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mY2I4YjAxNzU2YzM0ZDcyYjk1MTc4NjY1ODdkNjU3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YWRiMTE4NjQ5ODc0OTViYmYzZjhmZTE4MTNkODEzOCA9ICQoJzxkaXYgaWQ9Imh0bWxfOGFkYjExODY0OTg3NDk1YmJmM2Y4ZmUxODEzZDgxMzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2NjkgWmFtZWsgdyBTdWxlY2hvd2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mY2I4YjAxNzU2YzM0ZDcyYjk1MTc4NjY1ODdkNjU3Ny5zZXRDb250ZW50KGh0bWxfOGFkYjExODY0OTg3NDk1YmJmM2Y4ZmUxODEzZDgxMzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZjhiZTE2MjIzYzc0Njk2YWQ2YzRiMjI2Mjk4MzY5OC5iaW5kUG9wdXAocG9wdXBfZmNiOGIwMTc1NmMzNGQ3MmI5NTE3ODY2NTg3ZDY1NzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzFlNjViMDc4Mzc3NDAxZjk2NTM3MWMzNzRjYWRiNTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4wODUyOTUsMTUuNjIzODE4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzMxZWJkOGVhOGExNTQwODhiZWEyYTEyNWIyM2ExN2M2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jMWU2NWIwNzgzNzc0MDFmOTY1MzcxYzM3NGNhZGI1MC5zZXRJY29uKGljb25fMzFlYmQ4ZWE4YTE1NDA4OGJlYTJhMTI1YjIzYTE3YzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzkxNWFlMWU0NDhmNDFiZThkZDIyMjMyYTA2ZjE5NWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmE2M2E3ZjUxZmU5NDU0Yjg3MTdjMTE1NjRlYzk4YzIgPSAkKCc8ZGl2IGlkPSJodG1sX2ZhNjNhN2Y1MWZlOTQ1NGI4NzE3YzExNTY0ZWM5OGMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjcwIEJyYW1hIEtyb8WbbmllxYRza2EgdyBTdWxlY2hvd2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jOTE1YWUxZTQ0OGY0MWJlOGRkMjIyMzJhMDZmMTk1Zi5zZXRDb250ZW50KGh0bWxfZmE2M2E3ZjUxZmU5NDU0Yjg3MTdjMTE1NjRlYzk4YzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMWU2NWIwNzgzNzc0MDFmOTY1MzcxYzM3NGNhZGI1MC5iaW5kUG9wdXAocG9wdXBfYzkxNWFlMWU0NDhmNDFiZThkZDIyMjMyYTA2ZjE5NWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjNmODFjMjU4YmE1NDMyZmJlNzlmMmY0MDdhNTU0MzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS4yMTQ1NDksMjIuMzEzNjI5MDAwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzFhMjFiMDE0MGFiYjQ3ZGRhZjJkMjQyMzY5Njc2Nzc4ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMjNmODFjMjU4YmE1NDMyZmJlNzlmMmY0MDdhNTU0MzYuc2V0SWNvbihpY29uXzFhMjFiMDE0MGFiYjQ3ZGRhZjJkMjQyMzY5Njc2Nzc4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5YzQ3ZDRmMzYxYzRmMWRiZjc2Nzc5MDExOGFhOWI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YyNTM3OTY3NjRmZTQ2MzJiNDczMDcwYjEyNzg4NGFjID0gJCgnPGRpdiBpZD0iaHRtbF9mMjUzNzk2NzY0ZmU0NjMyYjQ3MzA3MGIxMjc4ODRhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDAyNSBCYWPDs3drYSBQb2QgSG9uZW0gIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODljNDdkNGYzNjFjNGYxZGJmNzY3NzkwMTE4YWE5YjYuc2V0Q29udGVudChodG1sX2YyNTM3OTY3NjRmZTQ2MzJiNDczMDcwYjEyNzg4NGFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjNmODFjMjU4YmE1NDMyZmJlNzlmMmY0MDdhNTU0MzYuYmluZFBvcHVwKHBvcHVwXzg5YzQ3ZDRmMzYxYzRmMWRiZjc2Nzc5MDExOGFhOWI2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBjYjM4NDA5YmJlOTQwYWJiMzdkYWE4YWE5NTVjMDk3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuMjgyMTY4LDIyLjEyMDVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZTI5NWY0MDE0ODZiNDUyYzlkMGEzNzkwZTA5Yjg4NjQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3B1cnBsZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wY2IzODQwOWJiZTk0MGFiYjM3ZGFhOGFhOTU1YzA5Ny5zZXRJY29uKGljb25fZTI5NWY0MDE0ODZiNDUyYzlkMGEzNzkwZTA5Yjg4NjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjhmZTk4MTQ0NjNhNGZjYzgzODZiMGYyYmIzZDIxMTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWJkYjk2MzNiZWIzNDc3OWIxYWU5NThjZjc2NzFkNjQgPSAkKCc8ZGl2IGlkPSJodG1sX2FiZGI5NjMzYmViMzQ3NzliMWFlOTU4Y2Y3NjcxZDY0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDQxIFNjaHJvbmlza28gTmFkIFNtb2xuaWtpZW0gPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yOGZlOTgxNDQ2M2E0ZmNjODM4NmIwZjJiYjNkMjExMC5zZXRDb250ZW50KGh0bWxfYWJkYjk2MzNiZWIzNDc3OWIxYWU5NThjZjc2NzFkNjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wY2IzODQwOWJiZTk0MGFiYjM3ZGFhOGFhOTU1YzA5Ny5iaW5kUG9wdXAocG9wdXBfMjhmZTk4MTQ0NjNhNGZjYzgzODZiMGYyYmIzZDIxMTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWEyYjQxYTExMjQxNDZmZWE4YTM3ZWNmOTI1NGVkYWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS4zNDc4OTUsMjIuMDc3MTk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzNiOTU1NzYwZDk4MDQ4NWZhYjNhZWJmMWM0YmE0M2QzID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZWEyYjQxYTExMjQxNDZmZWE4YTM3ZWNmOTI1NGVkYWYuc2V0SWNvbihpY29uXzNiOTU1NzYwZDk4MDQ4NWZhYjNhZWJmMWM0YmE0M2QzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdkNTUyOTczZDUwMjQ2YjJiOGQ1MTZiNGE5M2ZkNmQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IzZTBkMjQ3NzkxZTQ1MWZhYmZhNzA5MDMwOWM5ZTY2ID0gJCgnPGRpdiBpZD0iaHRtbF9iM2UwZDI0Nzc5MWU0NTFmYWJmYTcwOTAzMDljOWU2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA0MiBTY2hyb25pc2tvIFBUVEsgdyBLb21hxYRjenk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdkNTUyOTczZDUwMjQ2YjJiOGQ1MTZiNGE5M2ZkNmQ0LnNldENvbnRlbnQoaHRtbF9iM2UwZDI0Nzc5MWU0NTFmYWJmYTcwOTAzMDljOWU2Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2VhMmI0MWExMTI0MTQ2ZmVhOGEzN2VjZjkyNTRlZGFmLmJpbmRQb3B1cChwb3B1cF83ZDU1Mjk3M2Q1MDI0NmIyYjhkNTE2YjRhOTNmZDZkNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lMjJmNWJlZmUzYTM0YzU2YTA1NzAyNGM3OGJhMDRhYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjY5NDMxNiwyMS43NjQyMzY5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fM2E5MTRiMDA2MWYwNGY0ODhmYmEyNWNjYWQxM2Q2YTkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3B1cnBsZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lMjJmNWJlZmUzYTM0YzU2YTA1NzAyNGM3OGJhMDRhYS5zZXRJY29uKGljb25fM2E5MTRiMDA2MWYwNGY0ODhmYmEyNWNjYWQxM2Q2YTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWJlNjVhYTkzODRmNGIwNmI2Nzk1NGIxYWRmZGViZTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWE2ZDIzYzA3NmZhNGZjOWJmNDM1ZmFlYWJmN2M2NTMgPSAkKCc8ZGl2IGlkPSJodG1sXzVhNmQyM2MwNzZmYTRmYzliZjQzNWZhZWFiZjdjNjUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTA1IFdpZcW8YSBEendvbm5pY2EgcHJ6eSBLb8WbY2llbGUgRmFybnltIHcgS3JvxZtuaWUgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YmU2NWFhOTM4NGY0YjA2YjY3OTU0YjFhZGZkZWJlOS5zZXRDb250ZW50KGh0bWxfNWE2ZDIzYzA3NmZhNGZjOWJmNDM1ZmFlYWJmN2M2NTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMjJmNWJlZmUzYTM0YzU2YTA1NzAyNGM3OGJhMDRhYS5iaW5kUG9wdXAocG9wdXBfNWJlNjVhYTkzODRmNGIwNmI2Nzk1NGIxYWRmZGViZTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjQ0OTQyMmU1Mzc3NGZiNWIxY2M5NThmZjE0Y2IxYjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4wMzcxNTksMjIuMDAxNDUyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzY4ODdmMTY2NWZiNTRjMzliZDRjMDllYTlmNTBiZGJmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjQ0OTQyMmU1Mzc3NGZiNWIxY2M5NThmZjE0Y2IxYjIuc2V0SWNvbihpY29uXzY4ODdmMTY2NWZiNTRjMzliZDRjMDllYTlmNTBiZGJmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1MTkwYmQwOGRmZTQwZTVhODgxMzk1YTU3OGJmZWRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RiOTdiNDFlMzcyODQxOTliMzhiMjVhYTM4YmNhOWI4ID0gJCgnPGRpdiBpZD0iaHRtbF9kYjk3YjQxZTM3Mjg0MTk5YjM4YjI1YWEzOGJjYTliOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDEwNiBNdXpldW0gU2thcmLDs3cgTWF0a2kgWmllbWkgdyBSemVzem93aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M1MTkwYmQwOGRmZTQwZTVhODgxMzk1YTU3OGJmZWRkLnNldENvbnRlbnQoaHRtbF9kYjk3YjQxZTM3Mjg0MTk5YjM4YjI1YWEzOGJjYTliOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY0NDk0MjJlNTM3NzRmYjViMWNjOTU4ZmYxNGNiMWIyLmJpbmRQb3B1cChwb3B1cF9jNTE5MGJkMDhkZmU0MGU1YTg4MTM5NWE1NzhiZmVkZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83MzI5MzU3NGI2YTI0YWI3ODhmNGM3N2RjNDYyNDA2YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5Ljc4MDE4NiwyMi43NjU5MzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMTc3NjIzODA3MjBlNGU5YWE1YjBiZTNmMzI5MGVhNWYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3B1cnBsZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83MzI5MzU3NGI2YTI0YWI3ODhmNGM3N2RjNDYyNDA2Yy5zZXRJY29uKGljb25fMTc3NjIzODA3MjBlNGU5YWE1YjBiZTNmMzI5MGVhNWYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGUyZTdhNjAyN2ZhNGVkOWI4ZWI4YzAzYmMwZGJmY2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjMxMzJiNjRjMGQ3NDdjZGI1OWQ3NDVmZjVmZjI1OGIgPSAkKCc8ZGl2IGlkPSJodG1sX2IzMTMyYjY0YzBkNzQ3Y2RiNTlkNzQ1ZmY1ZmYyNThiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTA3IFphbWVrIEthemltaWVyem93c2tpIHcgUHJ6ZW15xZtsdTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGUyZTdhNjAyN2ZhNGVkOWI4ZWI4YzAzYmMwZGJmY2Quc2V0Q29udGVudChodG1sX2IzMTMyYjY0YzBkNzQ3Y2RiNTlkNzQ1ZmY1ZmYyNThiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzMyOTM1NzRiNmEyNGFiNzg4ZjRjNzdkYzQ2MjQwNmMuYmluZFBvcHVwKHBvcHVwX2RlMmU3YTYwMjdmYTRlZDliOGViOGMwM2JjMGRiZmNkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I2NWY5YWY1NmYwODQwNGY4MzIzZDc3M2IwMDc2ODk4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNTkwNzQxLDIyLjYyNzE5M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8yM2Q0YWYxNDZlYzI0ODkzOTI0NGZmZGRkNjdmNjFkMSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2I2NWY5YWY1NmYwODQwNGY4MzIzZDc3M2IwMDc2ODk4LnNldEljb24oaWNvbl8yM2Q0YWYxNDZlYzI0ODkzOTI0NGZmZGRkNjdmNjFkMSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YTRhM2YwYWU0YTQ0NzBmYjVlZjFlYzM4YzQ0MWYzMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YWRlOTcwZTliMDk0ODYxOGJmMDA4YzY4NzYxZDZjMiA9ICQoJzxkaXYgaWQ9Imh0bWxfNGFkZTk3MGU5YjA5NDg2MThiZjAwOGM2ODc2MWQ2YzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxMDggQXLFgmFtw7N3IOKAkyBNaWVqc2NlIGludGVybm93YW5pYSBMZWNoYSBXYcWCxJlzeTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWE0YTNmMGFlNGE0NDcwZmI1ZWYxZWMzOGM0NDFmMzIuc2V0Q29udGVudChodG1sXzRhZGU5NzBlOWIwOTQ4NjE4YmYwMDhjNjg3NjFkNmMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjY1ZjlhZjU2ZjA4NDA0ZjgzMjNkNzczYjAwNzY4OTguYmluZFBvcHVwKHBvcHVwXzVhNGEzZjBhZTRhNDQ3MGZiNWVmMWVjMzhjNDQxZjMyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzExNzEyMTVkNmI3NDQ3N2FhNmIwZGZjZjIxN2I0MDM5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuMTY0MzQyLDIyLjQ1NzY5M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lNWVlZmE1MGY3OTk0ZjI5OWZkNmZiYzc3ZWFhZTE0YSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzExNzEyMTVkNmI3NDQ3N2FhNmIwZGZjZjIxN2I0MDM5LnNldEljb24oaWNvbl9lNWVlZmE1MGY3OTk0ZjI5OWZkNmZiYzc3ZWFhZTE0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTgyMWUwYThmMTU0MDc2YTIwOGU4M2VhMDRmMjA5MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZjE3YzlmYzI1OGE0MGY3YjJmZWVmMjFjNzA3NGUzZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNGYxN2M5ZmMyNThhNDBmN2IyZmVlZjIxYzcwNzRlM2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxMDkgU2Nocm9uaXNrbyBQb2QgV3lzb2vEhSBQb8WCb25pbsSFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTgyMWUwYThmMTU0MDc2YTIwOGU4M2VhMDRmMjA5Mi5zZXRDb250ZW50KGh0bWxfNGYxN2M5ZmMyNThhNDBmN2IyZmVlZjIxYzcwNzRlM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMTcxMjE1ZDZiNzQ0NzdhYTZiMGRmY2YyMTdiNDAzOS5iaW5kUG9wdXAocG9wdXBfYjE4MjFlMGE4ZjE1NDA3NmEyMDhlODNlYTA0ZjIwOTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDMyMWVmYjA0NjNhNDhhM2EyNmM4NTE3YmI4OGYzNTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC43MTUwMzgsMjMuMjUzOTczMDAwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzljMjNkMzNkYjY1NTQzYjZhOTkyN2RiNDczOWJmMjVlID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDMyMWVmYjA0NjNhNDhhM2EyNmM4NTE3YmI4OGYzNTMuc2V0SWNvbihpY29uXzljMjNkMzNkYjY1NTQzYjZhOTkyN2RiNDczOWJmMjVlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E2N2JlMDg3ZjQ5NjRkZDE4YzU2N2E1NTE2OWIzMTYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRjMTY3YzQzMTVkYzRiNzRhMDkzMjJlNWIxZTFjYTM0ID0gJCgnPGRpdiBpZD0iaHRtbF80YzE2N2M0MzE1ZGM0Yjc0YTA5MzIyZTViMWUxY2EzNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDExMCBLb8WbY2nDs8WCIFJlZGVtcHRvcnlzdMOzdyDFm3cuIE1pa2/FgmFqYSB3IFphbW/Fm2NpdTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTY3YmUwODdmNDk2NGRkMThjNTY3YTU1MTY5YjMxNjAuc2V0Q29udGVudChodG1sXzRjMTY3YzQzMTVkYzRiNzRhMDkzMjJlNWIxZTFjYTM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDMyMWVmYjA0NjNhNDhhM2EyNmM4NTE3YmI4OGYzNTMuYmluZFBvcHVwKHBvcHVwX2E2N2JlMDg3ZjQ5NjRkZDE4YzU2N2E1NTE2OWIzMTYwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVmNmJhNTUyYzY0NjRlNzBiYzMwYjVmZTU1NTUyNGI5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjc1OTc0LDIxLjc0NzY4N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81NGE2NDgxOGIxYTY0MDhmOGQzMmJlNGNmMTRjZTJmZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzVmNmJhNTUyYzY0NjRlNzBiYzMwYjVmZTU1NTUyNGI5LnNldEljb24oaWNvbl81NGE2NDgxOGIxYTY0MDhmOGQzMmJlNGNmMTRjZTJmZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOThlMzAwNzkzNmE0NThhOWU3ZTE4MjRhYzdlZjMxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNGMxMmE0ZmM4MTc0ZjEyOWNhMjc2MmFlNzAxNTFjNiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzRjMTJhNGZjODE3NGYxMjljYTI3NjJhZTcwMTUxYzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyMTQgTXV6ZXVtIE9rcsSZZ293ZSB3IFNhbmRvbWllcnp1LCBaYW1layB3IFNhbmRvbWllcnp1IDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTk4ZTMwMDc5MzZhNDU4YTllN2UxODI0YWM3ZWYzMWUuc2V0Q29udGVudChodG1sX2M0YzEyYTRmYzgxNzRmMTI5Y2EyNzYyYWU3MDE1MWM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWY2YmE1NTJjNjQ2NGU3MGJjMzBiNWZlNTU1NTI0YjkuYmluZFBvcHVwKHBvcHVwXzE5OGUzMDA3OTM2YTQ1OGE5ZTdlMTgyNGFjN2VmMzFlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUxMWU3MGQ3MDk4YjRiZmI4MTVmMjZkN2JjZWQzYTAwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNzQxMDg3LDIyLjA4NzQ4NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl84ZjAxZGRjNjA4MjU0NTNhYmY3ZTM5ZWIxZjczZGVlYSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzUxMWU3MGQ3MDk4YjRiZmI4MTVmMjZkN2JjZWQzYTAwLnNldEljb24oaWNvbl84ZjAxZGRjNjA4MjU0NTNhYmY3ZTM5ZWIxZjczZGVlYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZTA3ZGQ1NDg2NWU0MDNlOWYzZTVhZmFkN2I2OTY0YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZGNhYzJhNmVhNTI0YWM3OTJlN2FiZDEwZjYxMGJhNSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2RjYWMyYTZlYTUyNGFjNzkyZTdhYmQxMGY2MTBiYTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyODYgS2/Fm2Npw7PFgiDFm3dpxJl0eWNoIGFwb3N0b8WCw7N3IFBpb3RyYSBpIFBhd8WCYSB3IE9rcnplaTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGUwN2RkNTQ4NjVlNDAzZTlmM2U1YWZhZDdiNjk2NGMuc2V0Q29udGVudChodG1sX2NkY2FjMmE2ZWE1MjRhYzc5MmU3YWJkMTBmNjEwYmE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTExZTcwZDcwOThiNGJmYjgxNWYyNmQ3YmNlZDNhMDAuYmluZFBvcHVwKHBvcHVwXzhlMDdkZDU0ODY1ZTQwM2U5ZjNlNWFmYWQ3YjY5NjRjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc5MzBjN2YzMjdhOTQ2NGNhZGQ2YjQ5YTkyOGJmYjVjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNDE1NzU2LDIxLjk1ODczNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80ZWJjMzM1YTI3Y2Q0NTlhYmUzNmQxMzJjMTE5NmYzOSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzc5MzBjN2YzMjdhOTQ2NGNhZGQ2YjQ5YTkyOGJmYjVjLnNldEljb24oaWNvbl80ZWJjMzM1YTI3Y2Q0NTlhYmUzNmQxMzJjMTE5NmYzOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OTM0NTVmNmFmNGY0NDRiYTUzYmM4NDdlYTBmOTgwOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYjE3N2I0ZjI3YjI0YWVkYmQwNDdlOTNhY2E0MGNhZCA9ICQoJzxkaXYgaWQ9Imh0bWxfZGIxNzdiNGYyN2IyNGFlZGJkMDQ3ZTkzYWNhNDBjYWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzMTYgUHXFgmF3eSAtIMWad2nEhXR5bmlhIFN5YmlsbGkgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82OTM0NTVmNmFmNGY0NDRiYTUzYmM4NDdlYTBmOTgwOS5zZXRDb250ZW50KGh0bWxfZGIxNzdiNGYyN2IyNGFlZGJkMDQ3ZTkzYWNhNDBjYWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83OTMwYzdmMzI3YTk0NjRjYWRkNmI0OWE5MjhiZmI1Yy5iaW5kUG9wdXAocG9wdXBfNjkzNDU1ZjZhZjRmNDQ0YmE1M2JjODQ3ZWEwZjk4MDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjZiOGU4Njg3MDNmNGZjN2IxN2EyNTBkMWVhZGRhMmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4yODQzNDIsMjEuNDEwODQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzQyNjU3MTY4YTVmNTQxNDdhNGE0NWFhMzIxNjM5ZTUyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZjZiOGU4Njg3MDNmNGZjN2IxN2EyNTBkMWVhZGRhMmQuc2V0SWNvbihpY29uXzQyNjU3MTY4YTVmNTQxNDdhNGE0NWFhMzIxNjM5ZTUyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFiY2QwZTVjN2Q1MDQ2MmZhY2E0NGQzNWU0MTQzZmM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdmZTAwNzEwYWJjZTQ3YWU5ZWE4Mzk4NzhjMjI0ZDczID0gJCgnPGRpdiBpZD0iaHRtbF83ZmUwMDcxMGFiY2U0N2FlOWVhODM5ODc4YzIyNGQ3MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQ2NCBQYcWCYWN5ayBPYm9yc2tpY2ggdyBNaWVsY3U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFiY2QwZTVjN2Q1MDQ2MmZhY2E0NGQzNWU0MTQzZmM5LnNldENvbnRlbnQoaHRtbF83ZmUwMDcxMGFiY2U0N2FlOWVhODM5ODc4YzIyNGQ3Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y2YjhlODY4NzAzZjRmYzdiMTdhMjUwZDFlYWRkYTJkLmJpbmRQb3B1cChwb3B1cF8xYmNkMGU1YzdkNTA0NjJmYWNhNDRkMzVlNDE0M2ZjOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MTQ2MzRmYmNiN2Y0NjBmYjAzMzhjOWM3Mjg1MzhjMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjAzNzYzNSwyMi4wMDM5ODJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNmE5Y2QyM2JhZGU2NGFjMjhhOWFlMWNmYWY2Y2U1MTcgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3B1cnBsZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82MTQ2MzRmYmNiN2Y0NjBmYjAzMzhjOWM3Mjg1MzhjMi5zZXRJY29uKGljb25fNmE5Y2QyM2JhZGU2NGFjMjhhOWFlMWNmYWY2Y2U1MTcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzg1NjkzMDA2YmVjNGNmNDkxZjE5MTg2ZWZhMWZjMjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjYwMjkyM2ZkYWIzNDlmYmI4YWI1OTJiMmM5ODJiOTggPSAkKCc8ZGl2IGlkPSJodG1sX2Y2MDI5MjNmZGFiMzQ5ZmJiOGFiNTkyYjJjOTgyYjk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDY1IEphZGVybsOzd2thIHcgTWllbGN1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zODU2OTMwMDZiZWM0Y2Y0OTFmMTkxODZlZmExZmMyMy5zZXRDb250ZW50KGh0bWxfZjYwMjkyM2ZkYWIzNDlmYmI4YWI1OTJiMmM5ODJiOTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82MTQ2MzRmYmNiN2Y0NjBmYjAzMzhjOWM3Mjg1MzhjMi5iaW5kUG9wdXAocG9wdXBfMzg1NjkzMDA2YmVjNGNmNDkxZjE5MTg2ZWZhMWZjMjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjZkM2ZjNTE3ZGFiNDRhN2E0NjU0YWRkZjYzOTVlMjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4wMzc2MzUsMjIuMDAzOTgyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzFkMWUzOGQzZWMwNTQ1NDA5YmU3YTkyM2QzYjA0ODFlID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZjZkM2ZjNTE3ZGFiNDRhN2E0NjU0YWRkZjYzOTVlMjcuc2V0SWNvbihpY29uXzFkMWUzOGQzZWMwNTQ1NDA5YmU3YTkyM2QzYjA0ODFlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IyNzkyNTc3YzRkNjQyYjhhZjEwNThlZTIzYThmMDFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0NzI4ZTViYjEzNjQ3ODJhN2UzMGJhNGMxNmJlNDE0ID0gJCgnPGRpdiBpZD0iaHRtbF9hNDcyOGU1YmIxMzY0NzgyYTdlMzBiYTRjMTZiZTQxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQ2NiBQb2R6aWVtbmEgVHJhc2EgVHVyeXN0eWN6bmEgdyBSemVzem93aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyNzkyNTc3YzRkNjQyYjhhZjEwNThlZTIzYThmMDFjLnNldENvbnRlbnQoaHRtbF9hNDcyOGU1YmIxMzY0NzgyYTdlMzBiYTRjMTZiZTQxNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y2ZDNmYzUxN2RhYjQ0YTdhNDY1NGFkZGY2Mzk1ZTI3LmJpbmRQb3B1cChwb3B1cF9iMjc5MjU3N2M0ZDY0MmI4YWYxMDU4ZWUyM2E4ZjAxYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81ZmVlODIyOTdmMzA0NjMxYWQxYjdlOWUxNjNlZGM1YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjA4Nzk5MywyMi41NjU3MjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNDllZmEyNDFkMDFkNGExNDliOWU2NGVkZjEwMzgxNDIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3B1cnBsZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81ZmVlODIyOTdmMzA0NjMxYWQxYjdlOWUxNjNlZGM1YS5zZXRJY29uKGljb25fNDllZmEyNDFkMDFkNGExNDliOWU2NGVkZjEwMzgxNDIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmQ0YzUzOTQyMTU5NGMzMDg0MDVmYmUzZDY5NzA0MTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTk0ZDhiYWFmZmYxNDQ5M2JjMjg1YTIzNzRmNjVlZGEgPSAkKCc8ZGl2IGlkPSJodG1sX2E5NGQ4YmFhZmZmMTQ0OTNiYzI4NWEyMzc0ZjY1ZWRhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDY3IFRyw7Nqc3R5ayBncmFuaWMsIFBvbHNrYSDigJMgVWtyYWluYSDigJMgU8WCb3dhY2phPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZDRjNTM5NDIxNTk0YzMwODQwNWZiZTNkNjk3MDQxOS5zZXRDb250ZW50KGh0bWxfYTk0ZDhiYWFmZmYxNDQ5M2JjMjg1YTIzNzRmNjVlZGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81ZmVlODIyOTdmMzA0NjMxYWQxYjdlOWUxNjNlZGM1YS5iaW5kUG9wdXAocG9wdXBfZmQ0YzUzOTQyMTU5NGMzMDg0MDVmYmUzZDY5NzA0MTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjI4ZjJkNzBkYTFjNDA2YWEzNmE2NTAxMjVmMWYwMDMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS4yMjE5MjEsMjIuNDQxOTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMDg0MzUyZThhNTBlNDFlNzg5MmMzYjBiZjYwZjZlYTQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3B1cnBsZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iMjhmMmQ3MGRhMWM0MDZhYTM2YTY1MDEyNWYxZjAwMy5zZXRJY29uKGljb25fMDg0MzUyZThhNTBlNDFlNzg5MmMzYjBiZjYwZjZlYTQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDI0NzNhNWNlYTMxNDQxYmIyYzZkZDk3NmNkMGVkZmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTQ5ZWFmODJkZWNmNDhhODhmOTIzOTgzNWUwNmI0NTggPSAkKCc8ZGl2IGlkPSJodG1sX2E0OWVhZjgyZGVjZjQ4YTg4ZjkyMzk4MzVlMDZiNDU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDY4IEJhY8Ozd2thIFBUVEsgSmF3b3J6ZWMg4oCTIEJpZXN6Y3phZHk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAyNDczYTVjZWEzMTQ0MWJiMmM2ZGQ5NzZjZDBlZGZmLnNldENvbnRlbnQoaHRtbF9hNDllYWY4MmRlY2Y0OGE4OGY5MjM5ODM1ZTA2YjQ1OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IyOGYyZDcwZGExYzQwNmFhMzZhNjUwMTI1ZjFmMDAzLmJpbmRQb3B1cChwb3B1cF8wMjQ3M2E1Y2VhMzE0NDFiYjJjNmRkOTc2Y2QwZWRmZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kOTdiNjZhYjUwYjM0ZjY1OTdhZmM3MjE5MzdiMGMyOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjAxODI2OSwyMi42ODM3NDZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOGQxNzlkZTk3ZWQ4NGIyOGE0Y2JkMmI1ZWVmZTE3MmQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3B1cnBsZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kOTdiNjZhYjUwYjM0ZjY1OTdhZmM3MjE5MzdiMGMyOC5zZXRJY29uKGljb25fOGQxNzlkZTk3ZWQ4NGIyOGE0Y2JkMmI1ZWVmZTE3MmQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGEzYzg3ZjY2ODcyNDJjYzljNTE3MjFkZDQxNDMyMDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWQzY2FlYmYzYTdiNDEzOTlhYzdhZmQ4YjU3MmQ0ZjUgPSAkKCc8ZGl2IGlkPSJodG1sX2VkM2NhZWJmM2E3YjQxMzk5YWM3YWZkOGI1NzJkNGY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDY5IE11emV1bSB3IEphcm9zxYJhd2l1IOKAkyBLYW1pZW5pY2EgT3JzZXR0aWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYTNjODdmNjY4NzI0MmNjOWM1MTcyMWRkNDE0MzIwOC5zZXRDb250ZW50KGh0bWxfZWQzY2FlYmYzYTdiNDEzOTlhYzdhZmQ4YjU3MmQ0ZjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kOTdiNjZhYjUwYjM0ZjY1OTdhZmM3MjE5MzdiMGMyOC5iaW5kUG9wdXAocG9wdXBfZGEzYzg3ZjY2ODcyNDJjYzljNTE3MjFkZDQxNDMyMDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmM5ZWY4NjNhZmU2NDI3MmE1ZTVkYmVhYjU5ZjZlNjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS43ODMwNTQsMjIuNzcxNzg1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzgwMjkxOWFjYmI0MjRiOGQ4N2EwZDI1NDMyZGMwZmIyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNmM5ZWY4NjNhZmU2NDI3MmE1ZTVkYmVhYjU5ZjZlNjIuc2V0SWNvbihpY29uXzgwMjkxOWFjYmI0MjRiOGQ4N2EwZDI1NDMyZGMwZmIyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMzMDhmMWI0NWQxMDQzMjhhZjQ1MzM2NDY4YzYwYjI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAwN2IwOTA4OWI2NjRlY2ZhY2I0OWVlMGU3NmM3ZmE1ID0gJCgnPGRpdiBpZD0iaHRtbF8wMDdiMDkwODliNjY0ZWNmYWNiNDllZTBlNzZjN2ZhNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQ3MCBNdXpldW0gTmFyb2Rvd2UgWmllbWkgUHJ6ZW15c2tpZWogdyBQcnplbXnFm2x1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMzA4ZjFiNDVkMTA0MzI4YWY0NTMzNjQ2OGM2MGIyNi5zZXRDb250ZW50KGh0bWxfMDA3YjA5MDg5YjY2NGVjZmFjYjQ5ZWUwZTc2YzdmYTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82YzllZjg2M2FmZTY0MjcyYTVlNWRiZWFiNTlmNmU2Mi5iaW5kUG9wdXAocG9wdXBfMzMwOGYxYjQ1ZDEwNDMyOGFmNDUzMzY0NjhjNjBiMjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTNhYjQ2MDM0YWJhNDliODk4NDAwYWUwM2UwZTFiNGMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS43ODIyOTQsMjIuNzcwMjkzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzY0OGI1NzkwMTk1MDRjZjFiMWNmZWRmZWE5ZjMzZWU5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOTNhYjQ2MDM0YWJhNDliODk4NDAwYWUwM2UwZTFiNGMuc2V0SWNvbihpY29uXzY0OGI1NzkwMTk1MDRjZjFiMWNmZWRmZWE5ZjMzZWU5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE0YjFlNDUxMTk0ODQ3MzY5MWIxMTZkNTExNTBkYTk1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzZjdiM2NlMmE2MTQzZTE5ODU5YzU4ZDhmYTkzNDkzID0gJCgnPGRpdiBpZD0iaHRtbF80M2Y3YjNjZTJhNjE0M2UxOTg1OWM1OGQ4ZmE5MzQ5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQ3MSBNdXpldW0gSGlzdG9yaWkgTWlhc3RhIFByemVtecWbbGE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE0YjFlNDUxMTk0ODQ3MzY5MWIxMTZkNTExNTBkYTk1LnNldENvbnRlbnQoaHRtbF80M2Y3YjNjZTJhNjE0M2UxOTg1OWM1OGQ4ZmE5MzQ5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkzYWI0NjAzNGFiYTQ5Yjg5ODQwMGFlMDNlMGUxYjRjLmJpbmRQb3B1cChwb3B1cF8xNGIxZTQ1MTE5NDg0NzM2OTFiMTE2ZDUxMTUwZGE5NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xMWNjZDQ3MDU0OTA0ZWFiODliMzIzODEyODBmNWViYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5Ljc4MTgyNCwyMi43NzM2MzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fM2NkMDJhMWYyZjNlNDFlNDlkMGYxOTNmZDk0MmY5M2MgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3B1cnBsZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xMWNjZDQ3MDU0OTA0ZWFiODliMzIzODEyODBmNWViYi5zZXRJY29uKGljb25fM2NkMDJhMWYyZjNlNDFlNDlkMGYxOTNmZDk0MmY5M2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzYxNWZiYmQ0OWQ4NDc1OTkwZGYyMmFkMjFlMzNkZGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTk5OWMwNmQ4ZjgwNDRkYWIwZjM0NmZkZTA2MzZjNDIgPSAkKCc8ZGl2IGlkPSJodG1sXzU5OTljMDZkOGY4MDQ0ZGFiMGYzNDZmZGUwNjM2YzQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDcyIE11emV1bSBEendvbsOzdyBpIEZhamVrIHcgUHJ6ZW15xZtsdTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzYxNWZiYmQ0OWQ4NDc1OTkwZGYyMmFkMjFlMzNkZGYuc2V0Q29udGVudChodG1sXzU5OTljMDZkOGY4MDQ0ZGFiMGYzNDZmZGUwNjM2YzQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTFjY2Q0NzA1NDkwNGVhYjg5YjMyMzgxMjgwZjVlYmIuYmluZFBvcHVwKHBvcHVwXzc2MTVmYmJkNDlkODQ3NTk5MGRmMjJhZDIxZTMzZGRmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E0NjMyZjlmZGU3ZDRiNWM5ZWQ2NTI1YjU3MGQxMTYzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjY1NTEyLDIzLjU1NDc5M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8wNTYxNWE3NDg4ODU0ZmUyODQyZmI4NzFjYjRmYjYyNyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2E0NjMyZjlmZGU3ZDRiNWM5ZWQ2NTI1YjU3MGQxMTYzLnNldEljb24oaWNvbl8wNTYxNWE3NDg4ODU0ZmUyODQyZmI4NzFjYjRmYjYyNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jN2FmZTUzMDFiMGM0ZjEyYmVmOTA5Nzc0ODMwNDhlNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZDQ1ZWUzNjRmNGQ0YjkwYjMzNjk4NDYzYWIwY2Q3MiA9ICQoJzxkaXYgaWQ9Imh0bWxfN2Q0NWVlMzY0ZjRkNGI5MGIzMzY5ODQ2M2FiMGNkNzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0NzMgTXV6ZXVtIFNrYW1pZW5pYcWCeWNoIERyemV3IHcgU2llZGxpc2thY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3YWZlNTMwMWIwYzRmMTJiZWY5MDk3NzQ4MzA0OGU1LnNldENvbnRlbnQoaHRtbF83ZDQ1ZWUzNjRmNGQ0YjkwYjMzNjk4NDYzYWIwY2Q3Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E0NjMyZjlmZGU3ZDRiNWM5ZWQ2NTI1YjU3MGQxMTYzLmJpbmRQb3B1cChwb3B1cF9jN2FmZTUzMDFiMGM0ZjEyYmVmOTA5Nzc0ODMwNDhlNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wMTk2NTVlN2EwODY0M2Q2YWI4OTBjZjM0ZmI4NjI1OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjMzOTQ4NiwyMy41MTk4ODRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMjFlNjc1YTliZjQzNDMyMThjYTBlNDUzOWI1MzVkZGYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3B1cnBsZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wMTk2NTVlN2EwODY0M2Q2YWI4OTBjZjM0ZmI4NjI1OC5zZXRJY29uKGljb25fMjFlNjc1YTliZjQzNDMyMThjYTBlNDUzOWI1MzVkZGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjVmZDAyMmJmZjFmNDZjMjk1YTEyZTYyNjA4YmIxZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjM1MjllNmJlOTA4NGI4ZTg3M2M5OWQ4ZGVkOTE4NzIgPSAkKCc8ZGl2IGlkPSJodG1sX2IzNTI5ZTZiZTkwODRiOGU4NzNjOTlkOGRlZDkxODcyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDc0IEdtaW5hIEx1YnljemEgS3LDs2xld3NrYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjVmZDAyMmJmZjFmNDZjMjk1YTEyZTYyNjA4YmIxZjMuc2V0Q29udGVudChodG1sX2IzNTI5ZTZiZTkwODRiOGU4NzNjOTlkOGRlZDkxODcyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDE5NjU1ZTdhMDg2NDNkNmFiODkwY2YzNGZiODYyNTguYmluZFBvcHVwKHBvcHVwXzY1ZmQwMjJiZmYxZjQ2YzI5NWExMmU2MjYwOGJiMWYzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAzMjNkMjFiY2FjZDRjNDY5OWJlYzI4NzAxZjc4YTQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjc5NDE4LDIxLjc0OTU0MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81YzAzOTk2ZTEzZmY0OTk1OTIwNTRlYzFkMWVmNmRmOCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzAzMjNkMjFiY2FjZDRjNDY5OWJlYzI4NzAxZjc4YTQ1LnNldEljb24oaWNvbl81YzAzOTk2ZTEzZmY0OTk1OTIwNTRlYzFkMWVmNmRmOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OWNmZTJiNGU3ODg0YzMxYTkyMjUzMzc0OWUwNWI3NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMzk3OTU4M2I5NDE0ZWJjOWMxMDg0M2VkY2QyODVhZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjM5Nzk1ODNiOTQxNGViYzljMTA4NDNlZGNkMjg1YWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0ODIgUmF0dXN6IHcgU2FuZG9taWVyenU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5Y2ZlMmI0ZTc4ODRjMzFhOTIyNTMzNzQ5ZTA1Yjc1LnNldENvbnRlbnQoaHRtbF9iMzk3OTU4M2I5NDE0ZWJjOWMxMDg0M2VkY2QyODVhZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAzMjNkMjFiY2FjZDRjNDY5OWJlYzI4NzAxZjc4YTQ1LmJpbmRQb3B1cChwb3B1cF84OWNmZTJiNGU3ODg0YzMxYTkyMjUzMzc0OWUwNWI3NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYzA5MGRlY2ZkZTY0Y2JmYmRhY2E2NDAxNDBlMmIwNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY4MTUxMiwyMS43NDk1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zMDZjMGMxZDVhNjE0OWQyOWMyNzZhOGYwNTM0ZmFkMCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2RjMDkwZGVjZmRlNjRjYmZiZGFjYTY0MDE0MGUyYjA0LnNldEljb24oaWNvbl8zMDZjMGMxZDVhNjE0OWQyOWMyNzZhOGYwNTM0ZmFkMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OTdlMDdiZDljZjQ0ZjM3ODQzMzNjODc1M2E1ZmQ2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZmUwODMzOTA2OTI0OTI2OGQ0YTdlOTI2ZTUzNjRmNCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWZlMDgzMzkwNjkyNDkyNjhkNGE3ZTkyNmU1MzY0ZjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0ODMgQnJhbWEgT3BhdG93c2thIHcgU2FuZG9taWVyenU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY5N2UwN2JkOWNmNDRmMzc4NDMzM2M4NzUzYTVmZDZhLnNldENvbnRlbnQoaHRtbF85ZmUwODMzOTA2OTI0OTI2OGQ0YTdlOTI2ZTUzNjRmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RjMDkwZGVjZmRlNjRjYmZiZGFjYTY0MDE0MGUyYjA0LmJpbmRQb3B1cChwb3B1cF82OTdlMDdiZDljZjQ0ZjM3ODQzMzNjODc1M2E1ZmQ2YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NmQ5OTBhZGE1N2M0NmE4YTg5ZTYzOWVkMDIwMDlmMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3NjkyMiwyMS43NTA1ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZWEwMmUyODFjMmI2NGEwZmJmNTc1ODliMDNmMTJmOWIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3B1cnBsZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85NmQ5OTBhZGE1N2M0NmE4YTg5ZTYzOWVkMDIwMDlmMC5zZXRJY29uKGljb25fZWEwMmUyODFjMmI2NGEwZmJmNTc1ODliMDNmMTJmOWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjA4NjZkZGQ4OWJjNDllM2E0ZGIyMTg2NzkwNGNhMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGI2N2MwN2QwNTVkNDYzNWI1OWM0MDE4NDlhOTk3MWQgPSAkKCc8ZGl2IGlkPSJodG1sXzBiNjdjMDdkMDU1ZDQ2MzViNTljNDAxODQ5YTk5NzFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDg0IE11emV1bSBEaWVjZXpqYWxuZSB3IFNhbmRvbWllcnp1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMDg2NmRkZDg5YmM0OWUzYTRkYjIxODY3OTA0Y2ExNC5zZXRDb250ZW50KGh0bWxfMGI2N2MwN2QwNTVkNDYzNWI1OWM0MDE4NDlhOTk3MWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NmQ5OTBhZGE1N2M0NmE4YTg5ZTYzOWVkMDIwMDlmMC5iaW5kUG9wdXAocG9wdXBfZjA4NjZkZGQ4OWJjNDllM2E0ZGIyMTg2NzkwNGNhMTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjBmNmE4Y2QxYzFmNGE3MDlhNzBmZTM5NDcyNzdkODggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4wMTQ5MzIsMjIuNTM1NDc0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2U1ZmZhODA0NTE2NjQyODFiNzgxMzRiZjc0MTcwZTkyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMjBmNmE4Y2QxYzFmNGE3MDlhNzBmZTM5NDcyNzdkODguc2V0SWNvbihpY29uX2U1ZmZhODA0NTE2NjQyODFiNzgxMzRiZjc0MTcwZTkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NkNjJlZmRkYWQyOTQ3ZmY4ZTZmYjc3NDExN2MxY2FhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5NmVkN2M3Mzc4ZDQ5MWI5MTc3ZjY4NGFmMzExYTVhID0gJCgnPGRpdiBpZD0iaHRtbF82OTZlZDdjNzM3OGQ0OTFiOTE3N2Y2ODRhZjMxMWE1YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQ4NSBCeWNoYXdhIOKAkyBtb2plIG1hxYJlIGNlbnRydW0gxZt3aWF0YTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2Q2MmVmZGRhZDI5NDdmZjhlNmZiNzc0MTE3YzFjYWEuc2V0Q29udGVudChodG1sXzY5NmVkN2M3Mzc4ZDQ5MWI5MTc3ZjY4NGFmMzExYTVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjBmNmE4Y2QxYzFmNGE3MDlhNzBmZTM5NDcyNzdkODguYmluZFBvcHVwKHBvcHVwX2NkNjJlZmRkYWQyOTQ3ZmY4ZTZmYjc3NDExN2MxY2FhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I2OWY4ZjVlMDUyMzQ2ODhiNTFiMTMzNGZmYTM4NDQxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMDIzODk5LDIyLjUyMzc2MTk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jYWFmMDZjOWY5MDE0MWFkOWU0MmQ0Mzc4Mjg1NGJhNiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2I2OWY4ZjVlMDUyMzQ2ODhiNTFiMTMzNGZmYTM4NDQxLnNldEljb24oaWNvbl9jYWFmMDZjOWY5MDE0MWFkOWU0MmQ0Mzc4Mjg1NGJhNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYTdkYzg3OWRiNTI0ODUzYjAyNDBhMWE3ZmNhZDQxMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOTVlYjYxODE4YTg0YTY5YmFmNmJlZjc3ZTk2ODNjYSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzk1ZWI2MTgxOGE4NGE2OWJhZjZiZWY3N2U5NjgzY2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0ODYgUnVpbnkgcGHFgmFjdSB3IEJ5Y2hhd2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYTdkYzg3OWRiNTI0ODUzYjAyNDBhMWE3ZmNhZDQxMy5zZXRDb250ZW50KGh0bWxfYzk1ZWI2MTgxOGE4NGE2OWJhZjZiZWY3N2U5NjgzY2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNjlmOGY1ZTA1MjM0Njg4YjUxYjEzMzRmZmEzODQ0MS5iaW5kUG9wdXAocG9wdXBfM2E3ZGM4NzlkYjUyNDg1M2IwMjQwYTFhN2ZjYWQ0MTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzE1ZGQ3NTk1OGU1NGQ5ZTlmYmQ4NzVjNGNkMjRmOTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS43NDU1MywyMi4xMjgzNDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZGY3ZTBmOWU3Y2I3NDRlM2JmZWE2MzcyYTEyODhkODUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3B1cnBsZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jMTVkZDc1OTU4ZTU0ZDllOWZiZDg3NWM0Y2QyNGY5My5zZXRJY29uKGljb25fZGY3ZTBmOWU3Y2I3NDRlM2JmZWE2MzcyYTEyODhkODUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTIwY2FkY2NiMjY5NDAxZjk0Y2I2MTdiNDcxOTViNDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmM1OWE2Y2ViZTk4NGUxM2FhMDk4YjdhMjdmODhkY2IgPSAkKCc8ZGl2IGlkPSJodG1sXzZjNTlhNmNlYmU5ODRlMTNhYTA5OGI3YTI3Zjg4ZGNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDg3IE11emV1bSBIZW5yeWthIFNpZW5raWV3aWN6YSB3IFdvbGkgT2tyemVqc2tpZWo8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkyMGNhZGNjYjI2OTQwMWY5NGNiNjE3YjQ3MTk1YjQ2LnNldENvbnRlbnQoaHRtbF82YzU5YTZjZWJlOTg0ZTEzYWEwOThiN2EyN2Y4OGRjYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2MxNWRkNzU5NThlNTRkOWU5ZmJkODc1YzRjZDI0ZjkzLmJpbmRQb3B1cChwb3B1cF85MjBjYWRjY2IyNjk0MDFmOTRjYjYxN2I0NzE5NWI0Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZWM3NGQ5YTczZGI0OWJlOGEyODM1YmVhZGNlYThmNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjczMzM0LDIyLjEwNDMyNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82NjkyNjA4NTFmY2M0MzQ1OTJhMDIwODMyNDdmMzY0ZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2NlYzc0ZDlhNzNkYjQ5YmU4YTI4MzViZWFkY2VhOGY2LnNldEljb24oaWNvbl82NjkyNjA4NTFmY2M0MzQ1OTJhMDIwODMyNDdmMzY0ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZGFlOTM1MTkxYmQ0Y2YzYTA0NmY3NjIwYmZkNTgyMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mODVlMTAzMmZhNGE0YTMwYjQ3YmNlOThjNTYwMTliYyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjg1ZTEwMzJmYTRhNGEzMGI0N2JjZTk4YzU2MDE5YmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0ODggS29waWVjIEhlbnJ5a2EgU2llbmtpZXdpY3phIHcgT2tyemVpPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZGFlOTM1MTkxYmQ0Y2YzYTA0NmY3NjIwYmZkNTgyMC5zZXRDb250ZW50KGh0bWxfZjg1ZTEwMzJmYTRhNGEzMGI0N2JjZTk4YzU2MDE5YmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZWM3NGQ5YTczZGI0OWJlOGEyODM1YmVhZGNlYThmNi5iaW5kUG9wdXAocG9wdXBfNGRhZTkzNTE5MWJkNGNmM2EwNDZmNzYyMGJmZDU4MjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTUyMmFmZmEwMTdkNDZlZDk2YmMzNGUyNWNlY2Q3N2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS40NTk2NCwyMi40ODk0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzc2NTFiMTRjMTk2ODRlZDk5ZGIyZDFjODMyNzFkNzFhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMTUyMmFmZmEwMTdkNDZlZDk2YmMzNGUyNWNlY2Q3N2Yuc2V0SWNvbihpY29uXzc2NTFiMTRjMTk2ODRlZDk5ZGIyZDFjODMyNzFkNzFhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzMDVlMzcxYTQ3YzRjMmNiNWQxNzMzMWYzY2UzYTBjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI5NmJhYmEwZmRhYzQ5NGE5NDRkZTIxM2VkYjdjZGYxID0gJCgnPGRpdiBpZD0iaHRtbF8yOTZiYWJhMGZkYWM0OTRhOTQ0ZGUyMTNlZGI3Y2RmMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDUwOCBNdXpldW0gWmFtb3lza2ljaCB3IEtvesWCw7N3Y2UgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MzA1ZTM3MWE0N2M0YzJjYjVkMTczMzFmM2NlM2EwYy5zZXRDb250ZW50KGh0bWxfMjk2YmFiYTBmZGFjNDk0YTk0NGRlMjEzZWRiN2NkZjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xNTIyYWZmYTAxN2Q0NmVkOTZiYzM0ZTI1Y2VjZDc3Zi5iaW5kUG9wdXAocG9wdXBfNTMwNWUzNzFhNDdjNGMyY2I1ZDE3MzMxZjNjZTNhMGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjcwOTVhYTA1OTEyNGJlNzk5ZDAwZmVmMzBkYWE5OGYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42MDU4NzIsMjIuOTY2Nzk2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2EzOWY0YjU0ZWNlMTRiMzNiYzljMmY4NGM4MGFmZDQwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZjcwOTVhYTA1OTEyNGJlNzk5ZDAwZmVmMzBkYWE5OGYuc2V0SWNvbihpY29uX2EzOWY0YjU0ZWNlMTRiMzNiYzljMmY4NGM4MGFmZDQwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I0MGNiOTk3MTViMzQ0Y2JiZmM4NzZjMzc4Y2UwOGFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RmODVkNGJmODNjMzRjMzI4YjA5NzNlMWMwZTU1YzY4ID0gJCgnPGRpdiBpZD0iaHRtbF9kZjg1ZDRiZjgzYzM0YzMyOGIwOTczZTFjMGU1NWM2OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDUwOSBSb3p0b2N6YcWEc2tpIFBhcmsgTmFyb2Rvd3kgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNDBjYjk5NzE1YjM0NGNiYmZjODc2YzM3OGNlMDhhZS5zZXRDb250ZW50KGh0bWxfZGY4NWQ0YmY4M2MzNGMzMjhiMDk3M2UxYzBlNTVjNjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNzA5NWFhMDU5MTI0YmU3OTlkMDBmZWYzMGRhYTk4Zi5iaW5kUG9wdXAocG9wdXBfYjQwY2I5OTcxNWIzNDRjYmJmYzg3NmMzNzhjZTA4YWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTlmY2Q2NTlmZDRlNGE2MzkyMzVjMmM5OTQ2NTIxYTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS42ODgzMDIsMjEuNjY4NjYyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2JkMTZlYWZiZmYwYjRlZjA4YTkyMGFkNmVhZTA0NGFhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTlmY2Q2NTlmZDRlNGE2MzkyMzVjMmM5OTQ2NTIxYTQuc2V0SWNvbihpY29uX2JkMTZlYWZiZmYwYjRlZjA4YTkyMGFkNmVhZTA0NGFhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlhZGI5ZGE0NjM3YjQ0MjU5NGZlNDVjZTA3ODIxZmU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ0ZTUxYTJkODMwNDQ3ZDZiOTlkZDA3YjlhMzY1MDEwID0gJCgnPGRpdiBpZD0iaHRtbF80NGU1MWEyZDgzMDQ0N2Q2Yjk5ZGQwN2I5YTM2NTAxMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDUxOSBNdXpldW0gTWFyaWkgS29ub3BuaWNraWVqIHcgxbthcm5vd2N1IDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWFkYjlkYTQ2MzdiNDQyNTk0ZmU0NWNlMDc4MjFmZTguc2V0Q29udGVudChodG1sXzQ0ZTUxYTJkODMwNDQ3ZDZiOTlkZDA3YjlhMzY1MDEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTlmY2Q2NTlmZDRlNGE2MzkyMzVjMmM5OTQ2NTIxYTQuYmluZFBvcHVwKHBvcHVwXzlhZGI5ZGE0NjM3YjQ0MjU5NGZlNDVjZTA3ODIxZmU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg2YmY5ZjBjNTgwNzRlOWE4Mzg2N2E2MDc2YmNjMjI0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNTAxOTE1LDIxLjUzNTcwOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85M2QwN2U5OTRiMWU0NWY2YThjYjRhMTQzNDEwMjlhNCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzg2YmY5ZjBjNTgwNzRlOWE4Mzg2N2E2MDc2YmNjMjI0LnNldEljb24oaWNvbl85M2QwN2U5OTRiMWU0NWY2YThjYjRhMTQzNDEwMjlhNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNjBkZGMxZDljNjg0YTFhODIyNGM2OTI1NzcyNTk5MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OGM3OTdmNmY0MGQ0MmY4YmI4NGNlMGI2MjY3Y2YwYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDhjNzk3ZjZmNDBkNDJmOGJiODRjZTBiNjI2N2NmMGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA1NDEgWmVzcMOzxYIgWmFta293by1QYXJrb3d5IHcgQmFyYW5vd2llIFNhbmRvbWllcnNraW0gPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNjBkZGMxZDljNjg0YTFhODIyNGM2OTI1NzcyNTk5Mi5zZXRDb250ZW50KGh0bWxfNDhjNzk3ZjZmNDBkNDJmOGJiODRjZTBiNjI2N2NmMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NmJmOWYwYzU4MDc0ZTlhODM4NjdhNjA3NmJjYzIyNC5iaW5kUG9wdXAocG9wdXBfZTYwZGRjMWQ5YzY4NGExYTgyMjRjNjkyNTc3MjU5OTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjYwOTJlNmU5OGQ3NDExZjkxYzFjYzFlYmI2NWMxYTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS40MTEyMjUsMjEuOTYzMDY0MDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzU2NWUzNmFkNGVkNTRjNjViOTA3MDY0NDk3YzI1OTZmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjYwOTJlNmU5OGQ3NDExZjkxYzFjYzFlYmI2NWMxYTkuc2V0SWNvbihpY29uXzU2NWUzNmFkNGVkNTRjNjViOTA3MDY0NDk3YzI1OTZmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0YmE3MzUyMzI4OTRlZGRiN2Y3NWM3ZDU3OWQ1NWY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FkYTI5MzI3OTQxZjRiZTg4NzNhMDdiODkzNTNkMzE0ID0gJCgnPGRpdiBpZD0iaHRtbF9hZGEyOTMyNzk0MWY0YmU4ODczYTA3Yjg5MzUzZDMxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDU0MiBQdcWCYXd5IC0gRG9tIEdvdHlja2kgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNGJhNzM1MjMyODk0ZWRkYjdmNzVjN2Q1NzlkNTVmOS5zZXRDb250ZW50KGh0bWxfYWRhMjkzMjc5NDFmNGJlODg3M2EwN2I4OTM1M2QzMTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNjA5MmU2ZTk4ZDc0MTFmOTFjMWNjMWViYjY1YzFhOS5iaW5kUG9wdXAocG9wdXBfZjRiYTczNTIzMjg5NGVkZGI3Zjc1YzdkNTc5ZDU1ZjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjA1MzI4MjdkNGIxNDcwOWIxMGVhMTE1ZDM3ZWJmYjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS40MDA2NjgsMjEuOTcxNzAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzU5MWY0YmMxNjA4ODQ3NTU5MWU5NDY5OWVmNmM5ZjQ5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjA1MzI4MjdkNGIxNDcwOWIxMGVhMTE1ZDM3ZWJmYjQuc2V0SWNvbihpY29uXzU5MWY0YmMxNjA4ODQ3NTU5MWU5NDY5OWVmNmM5ZjQ5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E4NDViYjQwMTdjOTQzYzY5YTFmNjljNjAzZGI4ODE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwYTNiOTQ4MjI1MzQzNDQ5MmFjY2I5NDFjZDMzZjNkID0gJCgnPGRpdiBpZD0iaHRtbF9lMGEzYjk0ODIyNTM0MzQ0OTJhY2NiOTQxY2QzM2YzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDU0MyBQdcWCYXd5IC0gTXV6ZXVtIE/Fm3dpYXRvd2UgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hODQ1YmI0MDE3Yzk0M2M2OWExZjY5YzYwM2RiODgxOS5zZXRDb250ZW50KGh0bWxfZTBhM2I5NDgyMjUzNDM0NDkyYWNjYjk0MWNkMzNmM2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMDUzMjgyN2Q0YjE0NzA5YjEwZWExMTVkMzdlYmZiNC5iaW5kUG9wdXAocG9wdXBfYTg0NWJiNDAxN2M5NDNjNjlhMWY2OWM2MDNkYjg4MTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTdiNTEyNmIxYjU4NDVkODgwNWRmMWFjZTE0MWQ0ZmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41NTkyOCwyMS44NjMxMzJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzk2MzNiZmIxNTJhNGNiODk2OTkwMWQ1ODA4NWZkNWIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3B1cnBsZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xN2I1MTI2YjFiNTg0NWQ4ODA1ZGYxYWNlMTQxZDRmZi5zZXRJY29uKGljb25fYzk2MzNiZmIxNTJhNGNiODk2OTkwMWQ1ODA4NWZkNWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODdkODRkMTZkOWY1NDc0YTg2MzgzYjY4NjhiMzc0NWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjRjNWY2MGY4NTNiNGQ0ZjhlYTQ3MDNhNWQ1NjE2NjggPSAkKCc8ZGl2IGlkPSJodG1sX2I0YzVmNjBmODUzYjRkNGY4ZWE0NzAzYTVkNTYxNjY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTc3IE11emV1bSBTacWCIFBvd2lldHJ6bnljaCB3IETEmWJsaW5pZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODdkODRkMTZkOWY1NDc0YTg2MzgzYjY4NjhiMzc0NWUuc2V0Q29udGVudChodG1sX2I0YzVmNjBmODUzYjRkNGY4ZWE0NzAzYTVkNTYxNjY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTdiNTEyNmIxYjU4NDVkODgwNWRmMWFjZTE0MWQ0ZmYuYmluZFBvcHVwKHBvcHVwXzg3ZDg0ZDE2ZDlmNTQ3NGE4NjM4M2I2ODY4YjM3NDVlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NiMDcxZDZhNTljZTRmOTRiM2E2ODBhNjI3Nzk1N2ZjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMDU4NTY0LDIxLjQwOTIyNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8xMjUyOThmZjA1MTQ0ZjI1YWEwOTllMDhkZmJkNTBlMyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2NiMDcxZDZhNTljZTRmOTRiM2E2ODBhNjI3Nzk1N2ZjLnNldEljb24oaWNvbl8xMjUyOThmZjA1MTQ0ZjI1YWEwOTllMDhkZmJkNTBlMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNzk3ZjEwZTVjMjM0ODljOGU2ZmUzYTMxNjU5YWI1ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZDZmOWExZDg1ODE0YjgzODZkNDgxM2NhZGJkOTRiMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMGQ2ZjlhMWQ4NTgxNGI4Mzg2ZDQ4MTNjYWRiZDk0YjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2MjcgTXV6ZXVtIFJlZ2lvbmFsbmUgdyBExJliaWN5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNzk3ZjEwZTVjMjM0ODljOGU2ZmUzYTMxNjU5YWI1ZS5zZXRDb250ZW50KGh0bWxfMGQ2ZjlhMWQ4NTgxNGI4Mzg2ZDQ4MTNjYWRiZDk0YjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jYjA3MWQ2YTU5Y2U0Zjk0YjNhNjgwYTYyNzc5NTdmYy5iaW5kUG9wdXAocG9wdXBfZjc5N2YxMGU1YzIzNDg5YzhlNmZlM2EzMTY1OWFiNWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjI2NzYzMzY2ZTU4NDg1MDg3ZDg3MDE4Y2Y2N2Y0MTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4xODk0MjEsMjEuNjA3NTIzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2I4ODJhZTdhYjIwNzRjNzlhNDEzYjJlZGE5YWVkZGIwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjI2NzYzMzY2ZTU4NDg1MDg3ZDg3MDE4Y2Y2N2Y0MTAuc2V0SWNvbihpY29uX2I4ODJhZTdhYjIwNzRjNzlhNDEzYjJlZGE5YWVkZGIwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU4MzZmN2ZiYWUyNDQwMTI4YWYyMTNmMTYyZDY5MzkzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYwMzhiZWY0OTY1NTQzNWVhNzg0YTJjMWY2ZjcwMTIyID0gJCgnPGRpdiBpZD0iaHRtbF82MDM4YmVmNDk2NTU0MzVlYTc4NGEyYzFmNmY3MDEyMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDYyOCBQYXJrIEhpc3Rvcnljem55IEJsaXpuYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTgzNmY3ZmJhZTI0NDAxMjhhZjIxM2YxNjJkNjkzOTMuc2V0Q29udGVudChodG1sXzYwMzhiZWY0OTY1NTQzNWVhNzg0YTJjMWY2ZjcwMTIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjI2NzYzMzY2ZTU4NDg1MDg3ZDg3MDE4Y2Y2N2Y0MTAuYmluZFBvcHVwKHBvcHVwXzU4MzZmN2ZiYWUyNDQwMTI4YWYyMTNmMTYyZDY5MzkzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI0NTJhNTcxNzc3YjQ2Yjg4NDRmNDE1Nzk4NDA2MjJjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMjQ4Nzg1LDIyLjU2OTE1M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jMTg1YzkxOTdjYTY0NWQzYjJhODI1NzE0MGQ3ZjkzOCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzI0NTJhNTcxNzc3YjQ2Yjg4NDRmNDE1Nzk4NDA2MjJjLnNldEljb24oaWNvbl9jMTg1YzkxOTdjYTY0NWQzYjJhODI1NzE0MGQ3ZjkzOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYzY0ZDM4Njk0ZGE0NmRmYWZiZDdlODEwNmE2NGQ3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZmY2OTZkMzk3MjY0ZjgyYWEyYjUwODVhMTYwOTZkNyA9ICQoJzxkaXYgaWQ9Imh0bWxfMmZmNjk2ZDM5NzI2NGY4MmFhMmI1MDg1YTE2MDk2ZDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2MjkgTWlhc3RvIEx1YmxpbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGM2NGQzODY5NGRhNDZkZmFmYmQ3ZTgxMDZhNjRkN2Uuc2V0Q29udGVudChodG1sXzJmZjY5NmQzOTcyNjRmODJhYTJiNTA4NWExNjA5NmQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjQ1MmE1NzE3NzdiNDZiODg0NGY0MTU3OTg0MDYyMmMuYmluZFBvcHVwKHBvcHVwXzBjNjRkMzg2OTRkYTQ2ZGZhZmJkN2U4MTA2YTY0ZDdlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA5ZjU4MmM1NmFiNDRjNTM5NGFkY2NlOWRhNTAyY2JhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMjQ3NTQ5LDIyLjU2NjM1Nzk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl84MDlkMzE1MTA2YWU0YzE4YmE2MzNhNzRlNTEwMDVhYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzA5ZjU4MmM1NmFiNDRjNTM5NGFkY2NlOWRhNTAyY2JhLnNldEljb24oaWNvbl84MDlkMzE1MTA2YWU0YzE4YmE2MzNhNzRlNTEwMDVhYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMWQyMTQ1ZWFkYmM0Yzk2YTk4NjY3ZTdhZWNiZGM4OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMzgyZmFiMjcwNGU0ZGExOTVmOTU4MjAxMzQxNjNkYiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjM4MmZhYjI3MDRlNGRhMTk1Zjk1ODIwMTM0MTYzZGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2MzAgQnJhbWEgS3Jha293c2thIHcgTHVibGluaWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzExZDIxNDVlYWRiYzRjOTZhOTg2NjdlN2FlY2JkYzg5LnNldENvbnRlbnQoaHRtbF8yMzgyZmFiMjcwNGU0ZGExOTVmOTU4MjAxMzQxNjNkYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA5ZjU4MmM1NmFiNDRjNTM5NGFkY2NlOWRhNTAyY2JhLmJpbmRQb3B1cChwb3B1cF8xMWQyMTQ1ZWFkYmM0Yzk2YTk4NjY3ZTdhZWNiZGM4OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jNGZjODFkZDkyODg0YjlkOTk4ZDcxYzUwMmYxODA1YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjI0NjE3OSwyMi41NjQ5MTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fN2MzNDUxOTE5MjVmNDZkNjgzZTdjZDZlNmQxZDkzMGEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3B1cnBsZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jNGZjODFkZDkyODg0YjlkOTk4ZDcxYzUwMmYxODA1Yy5zZXRJY29uKGljb25fN2MzNDUxOTE5MjVmNDZkNjgzZTdjZDZlNmQxZDkzMGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmUwZDQzODYxYzZhNDJmOWE2MDA2NmVmZDU5YjgyMjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDZiOGVjOTVjMmJkNDIwM2JiZTk2MDJiZjI3NjY3MTIgPSAkKCc8ZGl2IGlkPSJodG1sXzQ2YjhlYzk1YzJiZDQyMDNiYmU5NjAyYmYyNzY2NzEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjMxIEtvxZtjacOzxYIgTmF3csOzY2VuaWEgxZt3LiBQYXfFgmEgdyBMdWJsaW5pZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmUwZDQzODYxYzZhNDJmOWE2MDA2NmVmZDU5YjgyMjUuc2V0Q29udGVudChodG1sXzQ2YjhlYzk1YzJiZDQyMDNiYmU5NjAyYmYyNzY2NzEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzRmYzgxZGQ5Mjg4NGI5ZDk5OGQ3MWM1MDJmMTgwNWMuYmluZFBvcHVwKHBvcHVwXzZlMGQ0Mzg2MWM2YTQyZjlhNjAwNjZlZmQ1OWI4MjI1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhhNTRiZjgzOTFlNDRlMDk5MDE5NzMzMjVhYmMxYTYwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMjE1OTcsMjEuOTk3OTY1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2QyMzZjZDAwODkyNDQxODg4ODBmZWIyNjc2MzI0NmQ5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdwdXJwbGUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOGE1NGJmODM5MWU0NGUwOTkwMTk3MzMyNWFiYzFhNjAuc2V0SWNvbihpY29uX2QyMzZjZDAwODkyNDQxODg4ODBmZWIyNjc2MzI0NmQ5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RmZjNlZjk1MTk4ZDQ3MjlhYTY3ZjNmMjk4OGNiMzk4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MxYTBkNmEwYjcxNjQ5ZTNhZjI5MmQ1YzdiZjZjZTBhID0gJCgnPGRpdiBpZD0iaHRtbF9jMWEwZDZhMGI3MTY0OWUzYWYyOTJkNWM3YmY2Y2UwYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDYzMyBOYWR3acWbbGHFhHNrYSBLb2xlamthIFfEhXNrb3Rvcm93YSB3IEthcmN6bWlza2FjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGZmM2VmOTUxOThkNDcyOWFhNjdmM2YyOTg4Y2IzOTguc2V0Q29udGVudChodG1sX2MxYTBkNmEwYjcxNjQ5ZTNhZjI5MmQ1YzdiZjZjZTBhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGE1NGJmODM5MWU0NGUwOTkwMTk3MzMyNWFiYzFhNjAuYmluZFBvcHVwKHBvcHVwX2RmZjNlZjk1MTk4ZDQ3MjlhYTY3ZjNmMjk4OGNiMzk4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FlZDAwMGRiYTBkMjQ0OTU4NTA2OTUwMGEyNmYzYTY3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMzg3MDMyLDIzLjE5MTk4ODAwMDAwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8xZGQzMmMyZWVhNjM0YzJhYWZkMzM0MDM1YjY1ZTliZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2FlZDAwMGRiYTBkMjQ0OTU4NTA2OTUwMGEyNmYzYTY3LnNldEljb24oaWNvbl8xZGQzMmMyZWVhNjM0YzJhYWZkMzM0MDM1YjY1ZTliZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNDgwNDAyNTdmNzU0MTVmYTc1Njg0OGIzYzdjODY1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iM2UwMmRiYjJiYWM0NWZhOTQyNDg1NGQ0ZGU2ZTBjZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjNlMDJkYmIyYmFjNDVmYTk0MjQ4NTRkNGRlNmUwY2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2MzQgUG9sZXNraSBQYXJrIE5hcm9kb3d5IOKAkyBVcnN6dWxpbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDQ4MDQwMjU3Zjc1NDE1ZmE3NTY4NDhiM2M3Yzg2NTkuc2V0Q29udGVudChodG1sX2IzZTAyZGJiMmJhYzQ1ZmE5NDI0ODU0ZDRkZTZlMGNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWVkMDAwZGJhMGQyNDQ5NTg1MDY5NTAwYTI2ZjNhNjcuYmluZFBvcHVwKHBvcHVwXzA0ODA0MDI1N2Y3NTQxNWZhNzU2ODQ4YjNjN2M4NjU5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ0ZDVjNmNmY2I3ZTQzYjU5Yzk2OTc1ZDE3NDMwOTA5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMzg2Njg5LDIzLjE5Mjg0OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82N2Y5NTE5N2I5ZTY0YWUyYmNmNzQ4Yzk3MWI0MDllYyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzQ0ZDVjNmNmY2I3ZTQzYjU5Yzk2OTc1ZDE3NDMwOTA5LnNldEljb24oaWNvbl82N2Y5NTE5N2I5ZTY0YWUyYmNmNzQ4Yzk3MWI0MDllYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOTUxNDZhMDY0NWM0ZDYzOTk2MDFmMWU2YjQ2ZTA0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mODFkMjZlMWI4N2Y0NDk1OWRmMWJmZWMxYzU0Y2FkNSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjgxZDI2ZTFiODdmNDQ5NTlkZjFiZmVjMWM1NGNhZDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2MzUgT8Wbcm9kZWsgb2Nocm9ueSDFvMOzxYJ3aWEgYsWCb3RuZWdvIFBQTiB3IFVyc3p1bGluaWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5NTE0NmEwNjQ1YzRkNjM5OTYwMWYxZTZiNDZlMDRlLnNldENvbnRlbnQoaHRtbF9mODFkMjZlMWI4N2Y0NDk1OWRmMWJmZWMxYzU0Y2FkNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ0ZDVjNmNmY2I3ZTQzYjU5Yzk2OTc1ZDE3NDMwOTA5LmJpbmRQb3B1cChwb3B1cF8zOTUxNDZhMDY0NWM0ZDYzOTk2MDFmMWU2YjQ2ZTA0ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xN2I3ODI0Njg0Njg0OGE1OThlMjFiNDliMTc4NzA0ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjA2ODQ5NSwyMi4yMzQyNTRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNTFmYWI4NWE5M2EwNGNkZWE5NDI1YWE5Yzk3MWM1NWYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3B1cnBsZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xN2I3ODI0Njg0Njg0OGE1OThlMjFiNDliMTc4NzA0Zi5zZXRJY29uKGljb25fNTFmYWI4NWE5M2EwNGNkZWE5NDI1YWE5Yzk3MWM1NWYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTQ3YTI2NDJjZTVlNDAxZmJkZjAwOTQxOGViN2MxNjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmQwMWY3YWM1ZGEzNGRiN2JiODhhNDc2NDY2ZDViOTEgPSAkKCc8ZGl2IGlkPSJodG1sXzJkMDFmN2FjNWRhMzRkYjdiYjg4YTQ3NjQ2NmQ1YjkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNzQxIFphbWVrIHcgxYFhxYRjdWNpZSAtIFBvbW5payBIaXN0b3JpaTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTQ3YTI2NDJjZTVlNDAxZmJkZjAwOTQxOGViN2MxNjUuc2V0Q29udGVudChodG1sXzJkMDFmN2FjNWRhMzRkYjdiYjg4YTQ3NjQ2NmQ1YjkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTdiNzgyNDY4NDY4NDhhNTk4ZTIxYjQ5YjE3ODcwNGYuYmluZFBvcHVwKHBvcHVwX2U0N2EyNjQyY2U1ZTQwMWZiZGYwMDk0MThlYjdjMTY1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JkZGY4NDg2MjVkYzQwNmViYjdmMDZiNTFjMDBiYmNlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMDY1NTI0LDIyLjIzNTE2Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82MjE3ODM2NTZiNDg0YjdjOTM3ZjU5ODQ4ZTlkNDRlYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncHVycGxlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2JkZGY4NDg2MjVkYzQwNmViYjdmMDZiNTFjMDBiYmNlLnNldEljb24oaWNvbl82MjE3ODM2NTZiNDg0YjdjOTM3ZjU5ODQ4ZTlkNDRlYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMmY2N2M5ZjNmZjM0ODA1YjNhOThmOGJhZDVmMWMxOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNTE3NTUxM2E5NDE0YTU5YmYzYTU5NjZhYjAyYzYyYyA9ICQoJzxkaXYgaWQ9Imh0bWxfZDUxNzU1MTNhOTQxNGE1OWJmM2E1OTY2YWIwMmM2MmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA3NDIgV296b3duaWEgdyDFgWHFhGN1Y2llIOKAkyBLb2xla2NqYSBwb2phemTDs3cga29ubnljaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzJmNjdjOWYzZmYzNDgwNWIzYTk4ZjhiYWQ1ZjFjMTkuc2V0Q29udGVudChodG1sX2Q1MTc1NTEzYTk0MTRhNTliZjNhNTk2NmFiMDJjNjJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmRkZjg0ODYyNWRjNDA2ZWJiN2YwNmI1MWMwMGJiY2UuYmluZFBvcHVwKHBvcHVwX2MyZjY3YzlmM2ZmMzQ4MDViM2E5OGY4YmFkNWYxYzE5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZkMDAxZjcwNDE1YTQ5MTc4ZDVlNDg0OTI3YjU5NjA1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNTczMDU1LDE5LjUyOTQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jNzU5ZDYwN2MyNDA0OTA3YTlhMDY0ZTA1NDliNDZlZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2ZkMDAxZjcwNDE1YTQ5MTc4ZDVlNDg0OTI3YjU5NjA1LnNldEljb24oaWNvbl9jNzU5ZDYwN2MyNDA0OTA3YTlhMDY0ZTA1NDliNDZlZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZGM1YzJhMTkxYTQ0MzYzYTYxZTVjM2EwMWM5YWZiNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wN2QwMGQ4ZGMwNDQ0OThjYTM0MDNiODdjZTExODlmNSA9ICQoJzxkaXYgaWQ9Imh0bWxfMDdkMDBkOGRjMDQ0NDk4Y2EzNDAzYjg3Y2UxMTg5ZjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwMDMgQmFiaWEgR8OzcmEg4oCTIG5hand5xbxzenkgc3pjenl0IEJlc2tpZHUgxbt5d2llY2tpZWdvPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZGM1YzJhMTkxYTQ0MzYzYTYxZTVjM2EwMWM5YWZiNS5zZXRDb250ZW50KGh0bWxfMDdkMDBkOGRjMDQ0NDk4Y2EzNDAzYjg3Y2UxMTg5ZjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mZDAwMWY3MDQxNWE0OTE3OGQ1ZTQ4NDkyN2I1OTYwNS5iaW5kUG9wdXAocG9wdXBfY2RjNWMyYTE5MWE0NDM2M2E2MWU1YzNhMDFjOWFmYjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGNmNTk2M2EyZTRlNDZiNDk0ZDE5MDEyOWQ0MjhjMGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS43Njc4MSwxOS4xNjA1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iYjZlODM4ZDY2MDI0YmY3YmI4ODJhNGY4MDkyNWRmYyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzhjZjU5NjNhMmU0ZTQ2YjQ5NGQxOTAxMjlkNDI4YzBkLnNldEljb24oaWNvbl9iYjZlODM4ZDY2MDI0YmY3YmI4ODJhNGY4MDkyNWRmYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OGViNjU1MjQwYTk0ZDVmYWE1NGFiZThjNzMxODEzMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNTdlMTVmYTM1ZGE0YjIzYmQ2OTQ2NTI3NGFiZjdjMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjU3ZTE1ZmEzNWRhNGIyM2JkNjk0NjUyNzRhYmY3YzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwMTcgQ3p1cGVsIOKAkyBuYWp3ecW8c3p5IHN6Y3p5dCBCZXNraWR1IE1hxYJlZ288L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4ZWI2NTUyNDBhOTRkNWZhYTU0YWJlOGM3MzE4MTMxLnNldENvbnRlbnQoaHRtbF8yNTdlMTVmYTM1ZGE0YjIzYmQ2OTQ2NTI3NGFiZjdjMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhjZjU5NjNhMmU0ZTQ2YjQ5NGQxOTAxMjlkNDI4YzBkLmJpbmRQb3B1cChwb3B1cF83OGViNjU1MjQwYTk0ZDVmYWE1NGFiZThjNzMxODEzMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84ZDE0YjJlYTE3NDU0OWY1YmMwMGIyNWQwNWFhZTJiMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5Ljc4MDM5MSwxOS4wMTQ5NzRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMWNlZTVlZmJiMjA3NGJlOWIwNDIxMGQxZTczMzg1YTQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl84ZDE0YjJlYTE3NDU0OWY1YmMwMGIyNWQwNWFhZTJiMS5zZXRJY29uKGljb25fMWNlZTVlZmJiMjA3NGJlOWIwNDIxMGQxZTczMzg1YTQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWUxMWJmZmM1NjQxNDI3ZGFlNjZiNGU5Y2FiNzQ3YmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmEzMGI4OTI1Zjk2NDBhNWEzM2Y3YTc0ZTAwNTJjNjYgPSAkKCc8ZGl2IGlkPSJodG1sX2JhMzBiODkyNWY5NjQwYTVhMzNmN2E3NGUwMDUyYzY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDI2IFNjaHJvbmlza28gRMSZYm93aWVjIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWUxMWJmZmM1NjQxNDI3ZGFlNjZiNGU5Y2FiNzQ3YmIuc2V0Q29udGVudChodG1sX2JhMzBiODkyNWY5NjQwYTVhMzNmN2E3NGUwMDUyYzY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGQxNGIyZWExNzQ1NDlmNWJjMDBiMjVkMDVhYWUyYjEuYmluZFBvcHVwKHBvcHVwXzVlMTFiZmZjNTY0MTQyN2RhZTY2YjRlOWNhYjc0N2JiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QzYmZhMzE3NDE4NDRiYTZiNGQ3MmJlMjU0ZTEzZDQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNzU1MzIxLDE5LjAwMjU5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jNDU4NzBjZGMzYmY0NWJlYjA0NWUyY2Y2ODM2Nzg0NiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2QzYmZhMzE3NDE4NDRiYTZiNGQ3MmJlMjU0ZTEzZDQ1LnNldEljb24oaWNvbl9jNDU4NzBjZGMzYmY0NWJlYjA0NWUyY2Y2ODM2Nzg0Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzU0YTBlODlmYmI0YzdhOTg3NzQ1ZTkzOTkxYzc3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MGExYjY0NTQ1YjY0NTFmODZiMWQxZmRkOTc2MTg4MSA9ICQoJzxkaXYgaWQ9Imh0bWxfODBhMWI2NDU0NWI2NDUxZjg2YjFkMWZkZDk3NjE4ODEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwMjcgU2Nocm9uaXNrbyBuYSBTenluZHppZWxuaSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFjNTRhMGU4OWZiYjRjN2E5ODc3NDVlOTM5OTFjNzdhLnNldENvbnRlbnQoaHRtbF84MGExYjY0NTQ1YjY0NTFmODZiMWQxZmRkOTc2MTg4MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QzYmZhMzE3NDE4NDRiYTZiNGQ3MmJlMjU0ZTEzZDQ1LmJpbmRQb3B1cChwb3B1cF8xYzU0YTBlODlmYmI0YzdhOTg3NzQ1ZTkzOTkxYzc3YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yYTcxOGEyNzNiYzU0Mzc3YmU5OGY0NmFkMjgzZWU3ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5Ljc3NjYxOSwxOS4xMzAyMDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzc3NGUwYzA2MjJjNGRkMzk3YTc2YzdkY2ZmMjMyNmYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yYTcxOGEyNzNiYzU0Mzc3YmU5OGY0NmFkMjgzZWU3ZC5zZXRJY29uKGljb25fYzc3NGUwYzA2MjJjNGRkMzk3YTc2YzdkY2ZmMjMyNmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWFmNWJjMzJlNDRlNGRkYmE0OTRkMTQyYTVmNzk0YWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQxM2Y0OGQxYmUyNGQ4ZGE0YjBhMjlkMmIyMzlkZDQgPSAkKCc8ZGl2IGlkPSJodG1sXzRkMTNmNDhkMWJlMjRkOGRhNGIwYTI5ZDJiMjM5ZGQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDI4IE1hZ3Vya2EgV2lsa293aWNrYSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhZjViYzMyZTQ0ZTRkZGJhNDk0ZDE0MmE1Zjc5NGFhLnNldENvbnRlbnQoaHRtbF80ZDEzZjQ4ZDFiZTI0ZDhkYTRiMGEyOWQyYjIzOWRkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJhNzE4YTI3M2JjNTQzNzdiZTk4ZjQ2YWQyODNlZTdkLmJpbmRQb3B1cChwb3B1cF9hYWY1YmMzMmU0NGU0ZGRiYTQ5NGQxNDJhNWY3OTRhYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85Mzc2NTRmMzMwZjg0NzhmYjAxMmY2ODJhOGQ5ZGFlMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjcxOTYzNCwxOC44NTIxNTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMDFiOWI0Y2VlZWM5NGI2NjhkOWRlODRkMGIyZmMxYmMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85Mzc2NTRmMzMwZjg0NzhmYjAxMmY2ODJhOGQ5ZGFlMy5zZXRJY29uKGljb25fMDFiOWI0Y2VlZWM5NGI2NjhkOWRlODRkMGIyZmMxYmMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTRhZDk4YzU4ZDQ0NGM2YzgyZTYzZDFhMjkxYzc5NTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWMwZjUxZDYzYzRiNGU1MzkxNjI2NGNiZjIwZTJiNjIgPSAkKCc8ZGl2IGlkPSJodG1sXzljMGY1MWQ2M2M0YjRlNTM5MTYyNjRjYmYyMGUyYjYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDM1IFNjaHJvbmlza28gUsOzd25pY2EgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNGFkOThjNThkNDQ0YzZjODJlNjNkMWEyOTFjNzk1Ny5zZXRDb250ZW50KGh0bWxfOWMwZjUxZDYzYzRiNGU1MzkxNjI2NGNiZjIwZTJiNjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85Mzc2NTRmMzMwZjg0NzhmYjAxMmY2ODJhOGQ5ZGFlMy5iaW5kUG9wdXAocG9wdXBfZTRhZDk4YzU4ZDQ0NGM2YzgyZTYzZDFhMjkxYzc5NTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDY4Y2U1ZTg2MmFmNDMxZTkwZGFjODEyMGYwZmRmZDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS40OTk3MjIsMTguOTc0OTg1OTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2MzZTk0MjA2YzczOTQ3N2U5OTczYTk2MTMyNTQ4MjNiID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZDY4Y2U1ZTg2MmFmNDMxZTkwZGFjODEyMGYwZmRmZDAuc2V0SWNvbihpY29uX2MzZTk0MjA2YzczOTQ3N2U5OTczYTk2MTMyNTQ4MjNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEzMTlhOGU4NTI5YTQxNTY4N2E1NWMxYThmYzg4MWI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RiMGFlZjU4MjVjOTRjNGRhYzdjZDkxODk4OWJkM2RmID0gJCgnPGRpdiBpZD0iaHRtbF9kYjBhZWY1ODI1Yzk0YzRkYWM3Y2Q5MTg5ODliZDNkZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDAzNiBEd29yemVjIEJlc2tpZHpraSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEzMTlhOGU4NTI5YTQxNTY4N2E1NWMxYThmYzg4MWI0LnNldENvbnRlbnQoaHRtbF9kYjBhZWY1ODI1Yzk0YzRkYWM3Y2Q5MTg5ODliZDNkZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q2OGNlNWU4NjJhZjQzMWU5MGRhYzgxMjBmMGZkZmQwLmJpbmRQb3B1cChwb3B1cF8xMzE5YThlODUyOWE0MTU2ODdhNTVjMWE4ZmM4ODFiNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hN2JiNGE3YWZjNGI0MzIxYWY4MzM2YWExZjA2NTZkMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5Ljc2ODA1MSwxOS4wMzkwMTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZWE2YTU5YmRhMGZhNDVmNGEwMjQ5YzlkYzU0NDhhZGEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hN2JiNGE3YWZjNGI0MzIxYWY4MzM2YWExZjA2NTZkMy5zZXRJY29uKGljb25fZWE2YTU5YmRhMGZhNDVmNGEwMjQ5YzlkYzU0NDhhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzI5NDYyYmZlMDQ0NGQxZWE4MTM2M2ExNjc4YzdlZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2NjZTA4ZGJhOGI4NGJkN2EyYmEyNmJiODA3MDA1MTggPSAkKCc8ZGl2IGlkPSJodG1sXzNjY2UwOGRiYThiODRiZDdhMmJhMjZiYjgwNzAwNTE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDQ0IFNjaHJvbmlza28gU3RlZmFua2EgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83Mjk0NjJiZmUwNDQ0ZDFlYTgxMzYzYTE2NzhjN2VmMC5zZXRDb250ZW50KGh0bWxfM2NjZTA4ZGJhOGI4NGJkN2EyYmEyNmJiODA3MDA1MTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hN2JiNGE3YWZjNGI0MzIxYWY4MzM2YWExZjA2NTZkMy5iaW5kUG9wdXAocG9wdXBfNzI5NDYyYmZlMDQ0NGQxZWE4MTM2M2ExNjc4YzdlZjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDQwMmUyNzM0ZTI5NGFjOThhYmE2MGMwMmMzOGM5YjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS43NDcyMjIsMTguOTQyNjM5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzg1M2U5NzQ5NjI2NjQ4ZGI5YmU5NDQ0M2RlMmQyYjBjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZDQwMmUyNzM0ZTI5NGFjOThhYmE2MGMwMmMzOGM5YjQuc2V0SWNvbihpY29uXzg1M2U5NzQ5NjI2NjQ4ZGI5YmU5NDQ0M2RlMmQyYjBjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ5OGY5NDYyNjVhYTRiYzdhMTU4OTliMGZjOWFhMWUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YwNzZlZjZhMWZkMTQzODI4MGYwYmQ1NDNhNTM3ZmY2ID0gJCgnPGRpdiBpZD0iaHRtbF9mMDc2ZWY2YTFmZDE0MzgyODBmMGJkNTQzYTUzN2ZmNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA0OCBTY2hyb25pc2tvIG5hIELFgmF0bmllaiA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ5OGY5NDYyNjVhYTRiYzdhMTU4OTliMGZjOWFhMWUwLnNldENvbnRlbnQoaHRtbF9mMDc2ZWY2YTFmZDE0MzgyODBmMGJkNTQzYTUzN2ZmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q0MDJlMjczNGUyOTRhYzk4YWJhNjBjMDJjMzhjOWI0LmJpbmRQb3B1cChwb3B1cF80OThmOTQ2MjY1YWE0YmM3YTE1ODk5YjBmYzlhYTFlMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80NDZjYWE2NzkzYmY0ODQwOGNlNDU2ZDJiNmE1ZDBmZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjcyNTIyMywxOC45OTMyNDIwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fN2RkNDVmYjBkNWY0NGMyMDhlYTNhYjU2ZjY5YzY5NTIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80NDZjYWE2NzkzYmY0ODQwOGNlNDU2ZDJiNmE1ZDBmZC5zZXRJY29uKGljb25fN2RkNDVmYjBkNWY0NGMyMDhlYTNhYjU2ZjY5YzY5NTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODQ4ZWM3Nzc5YWYwNDIyMDllMjczOTcxN2M4YzViOTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODZmZmEzYzIyMWVmNDMyNGE5ZTA4ZmYwN2RiMmI2ZjQgPSAkKCc8ZGl2IGlkPSJodG1sXzg2ZmZhM2MyMjFlZjQzMjRhOWUwOGZmMDdkYjJiNmY0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDQ5IFNjaHJvbmlza28gQ2hhdGEgV3VqYSBUb21hIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODQ4ZWM3Nzc5YWYwNDIyMDllMjczOTcxN2M4YzViOTkuc2V0Q29udGVudChodG1sXzg2ZmZhM2MyMjFlZjQzMjRhOWUwOGZmMDdkYjJiNmY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDQ2Y2FhNjc5M2JmNDg0MDhjZTQ1NmQyYjZhNWQwZmQuYmluZFBvcHVwKHBvcHVwXzg0OGVjNzc3OWFmMDQyMjA5ZTI3Mzk3MTdjOGM1Yjk5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U3OGE0OTIyMDQyMjQ0OTU4MjI5YzMyOTAyZTJiNjUxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNzM4NTk4LDE5LjAwNTAwN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8xMzFlODJjMjA3NWM0NDdjYmJjODlhZGQxMWFiZmUwZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2U3OGE0OTIyMDQyMjQ0OTU4MjI5YzMyOTAyZTJiNjUxLnNldEljb24oaWNvbl8xMzFlODJjMjA3NWM0NDdjYmJjODlhZGQxMWFiZmUwZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOTI3MmFhMWY3NGI0YmQ3YTllOTY0NTBkMzg0NzM2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Zjg1Mzc2ZjhhYzQ0ZGI3ODRiYWJiOGIwYzFmOThiMCA9ICQoJzxkaXYgaWQ9Imh0bWxfN2Y4NTM3NmY4YWM0NGRiNzg0YmFiYjhiMGMxZjk4YjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwNTAgU2Nocm9uaXNrbyBLbGltY3pvayA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5MjcyYWExZjc0YjRiZDdhOWU5NjQ1MGQzODQ3MzYzLnNldENvbnRlbnQoaHRtbF83Zjg1Mzc2ZjhhYzQ0ZGI3ODRiYWJiOGIwYzFmOThiMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U3OGE0OTIyMDQyMjQ0OTU4MjI5YzMyOTAyZTJiNjUxLmJpbmRQb3B1cChwb3B1cF8zOTI3MmFhMWY3NGI0YmQ3YTllOTY0NTBkMzg0NzM2Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MmNlM2FkODkwODc0MjFhODljNTI0MDdhNTk3NDAxZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjY4NDI0OSwxOS4wMzE3MTA5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYjg3YTk4MDA1MzhhNDU5M2JlYmNhZDM4OTNkOWE5MzMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81MmNlM2FkODkwODc0MjFhODljNTI0MDdhNTk3NDAxZS5zZXRJY29uKGljb25fYjg3YTk4MDA1MzhhNDU5M2JlYmNhZDM4OTNkOWE5MzMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjVkMzMxOTNkMjVmNDk1ZmI1MDQ0ZDY0ZGU2ZjgwZTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTk3NGQ2ODA5NTVlNGFiMGI5NmZkOWJhMjVlOWU1MTYgPSAkKCc8ZGl2IGlkPSJodG1sX2U5NzRkNjgwOTU1ZTRhYjBiOTZmZDliYTI1ZTllNTE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDUxIFNjaHJvbmlza28gU2tyenljem5lIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjVkMzMxOTNkMjVmNDk1ZmI1MDQ0ZDY0ZGU2ZjgwZTguc2V0Q29udGVudChodG1sX2U5NzRkNjgwOTU1ZTRhYjBiOTZmZDliYTI1ZTllNTE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTJjZTNhZDg5MDg3NDIxYTg5YzUyNDA3YTU5NzQwMWUuYmluZFBvcHVwKHBvcHVwXzI1ZDMzMTkzZDI1ZjQ5NWZiNTA0NGQ2NGRlNmY4MGU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E2YWFkZWZkMzRhNzQyMmJhM2ZkYmU0ODdjM2MxM2ExID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNTQwMzU3LDE5LjMxODkwNDk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl84ODQwMWQ4OGFmMTA0ZjkwYTIyMzNlNDNjYzYzMjQwMCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2E2YWFkZWZkMzRhNzQyMmJhM2ZkYmU0ODdjM2MxM2ExLnNldEljb24oaWNvbl84ODQwMWQ4OGFmMTA0ZjkwYTIyMzNlNDNjYzYzMjQwMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZGY1MzIwOGM2M2I0MjU3OWJhOGIzMWQ5MjAzMzNiYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZjUzZGRhYWQ2ZTM0YjkxOGRlNTA4YTFmMjIxMmU4NyA9ICQoJzxkaXYgaWQ9Imh0bWxfOGY1M2RkYWFkNmUzNGI5MThkZTUwOGExZjIyMTJlODciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwNTMgU2Nocm9uaXNrbyBQVFRLIG5hIEhhbGkgTWl6aW93ZWogPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZGY1MzIwOGM2M2I0MjU3OWJhOGIzMWQ5MjAzMzNiYi5zZXRDb250ZW50KGh0bWxfOGY1M2RkYWFkNmUzNGI5MThkZTUwOGExZjIyMTJlODcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hNmFhZGVmZDM0YTc0MjJiYTNmZGJlNDg3YzNjMTNhMS5iaW5kUG9wdXAocG9wdXBfN2RmNTMyMDhjNjNiNDI1NzliYThiMzFkOTIwMzMzYmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjc0OWQ3MjNjYmUyNDAyNDlmOTdlOWMyNGQ2NzM4ZDkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS42MDQzODcsMTguODIzNjAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2ZkZmE2NjliOWQ5ODQ5MGE4NDM4MGQ0ZjI2MDQ1OGFiID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjc0OWQ3MjNjYmUyNDAyNDlmOTdlOWMyNGQ2NzM4ZDkuc2V0SWNvbihpY29uX2ZkZmE2NjliOWQ5ODQ5MGE4NDM4MGQ0ZjI2MDQ1OGFiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E1MmY5ZTUxZDkzNTQ3OTE5ZjQ5ZjljYjFkMDc3OWVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2YmJlMzI1NzllMDRkZWNhNmU3ODg2YjZkN2JkZWQxID0gJCgnPGRpdiBpZD0iaHRtbF9kNmJiZTMyNTc5ZTA0ZGVjYTZlNzg4NmI2ZDdiZGVkMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA1NCBTY2hyb25pc2tvIFBUVEsgU3RvxbxlayA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E1MmY5ZTUxZDkzNTQ3OTE5ZjQ5ZjljYjFkMDc3OWVkLnNldENvbnRlbnQoaHRtbF9kNmJiZTMyNTc5ZTA0ZGVjYTZlNzg4NmI2ZDdiZGVkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY3NDlkNzIzY2JlMjQwMjQ5Zjk3ZTljMjRkNjczOGQ5LmJpbmRQb3B1cChwb3B1cF9hNTJmOWU1MWQ5MzU0NzkxOWY0OWY5Y2IxZDA3NzllZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83NTJiNjA5NjRmNzc0ZGQwOGFkYTllNmUzN2IyNTdhYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjUzNDkwMiwxOS4yMjUzODhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMDg1MTI4MTM0Y2Y2NDEwM2ExMmE5YmRjNzVkNWNlZWYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83NTJiNjA5NjRmNzc0ZGQwOGFkYTllNmUzN2IyNTdhYi5zZXRJY29uKGljb25fMDg1MTI4MTM0Y2Y2NDEwM2ExMmE5YmRjNzVkNWNlZWYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmIyMmI1NGRlNGI5NDBkY2JiMzNiYWNlMTc3OGY5ZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmIyMTc5ODdlMjIxNGE5N2JmZGVmZGRkNjcyMTlhODggPSAkKCc8ZGl2IGlkPSJodG1sX2JiMjE3OTg3ZTIyMTRhOTdiZmRlZmRkZDY3MjE5YTg4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDU1IFNjaHJvbmlza28gbmEgSGFsaSBMaXBvd3NraWVqIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmIyMmI1NGRlNGI5NDBkY2JiMzNiYWNlMTc3OGY5ZjAuc2V0Q29udGVudChodG1sX2JiMjE3OTg3ZTIyMTRhOTdiZmRlZmRkZDY3MjE5YTg4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzUyYjYwOTY0Zjc3NGRkMDhhZGE5ZTZlMzdiMjU3YWIuYmluZFBvcHVwKHBvcHVwX2ZiMjJiNTRkZTRiOTQwZGNiYjMzYmFjZTE3NzhmOWYwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY0ZDNiZGM3YTJmMTRjMGVhNTQ4N2RhMjIzMGZjYWZmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNTM2OTYzLDE5LjIzNDI3MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8yMzJjY2Y2ZWFlZTE0ODBiOWIwODVhODk2ODZmN2UwMiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzY0ZDNiZGM3YTJmMTRjMGVhNTQ4N2RhMjIzMGZjYWZmLnNldEljb24oaWNvbl8yMzJjY2Y2ZWFlZTE0ODBiOWIwODVhODk2ODZmN2UwMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NjQyZTQwMmFkMjQ0NGVlYjJmMjJhZDFiZTRlZjk1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMjgzZGVmNDcxNDM0ZDA5YjQ2MGFkNTI3NTVhZGNmZSA9ICQoJzxkaXYgaWQ9Imh0bWxfZTI4M2RlZjQ3MTQzNGQwOWI0NjBhZDUyNzU1YWRjZmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwNTYgU2Nocm9uaXNrbyBuYSBIYWxpIFJ5c2lhbmNlICA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2NDJlNDAyYWQyNDQ0ZWViMmYyMmFkMWJlNGVmOTVjLnNldENvbnRlbnQoaHRtbF9lMjgzZGVmNDcxNDM0ZDA5YjQ2MGFkNTI3NTVhZGNmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY0ZDNiZGM3YTJmMTRjMGVhNTQ4N2RhMjIzMGZjYWZmLmJpbmRQb3B1cChwb3B1cF82NjQyZTQwMmFkMjQ0NGVlYjJmMjJhZDFiZTRlZjk1Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NGQyMzIxMjYxOTI0MjQ0YmMzNWE2MjBlYjI0YjE4NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjQyMTQ4NSwxOS4wNDc2MzJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOWJmZmQ2ZDEyM2RjNGIyZDk5N2I2ODNkZWZiNDQ5OWIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85NGQyMzIxMjYxOTI0MjQ0YmMzNWE2MjBlYjI0YjE4Ni5zZXRJY29uKGljb25fOWJmZmQ2ZDEyM2RjNGIyZDk5N2I2ODNkZWZiNDQ5OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzUxZjA5M2I1MzFmNDU0MzhkZDAwMjFlZTU0OTk1ZTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmFmM2JjMTU1MDUxNGM2YWJkZjgzNWNjYjc3MDczZGYgPSAkKCc8ZGl2IGlkPSJodG1sXzZhZjNiYzE1NTA1MTRjNmFiZGY4MzVjY2I3NzA3M2RmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDU3IFNjaHJvbmlza28gbmEgUHJ6ZcWCxJljenkgUHJ6ZWdpYmVrICA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M1MWYwOTNiNTMxZjQ1NDM4ZGQwMDIxZWU1NDk5NWU3LnNldENvbnRlbnQoaHRtbF82YWYzYmMxNTUwNTE0YzZhYmRmODM1Y2NiNzcwNzNkZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk0ZDIzMjEyNjE5MjQyNDRiYzM1YTYyMGViMjRiMTg2LmJpbmRQb3B1cChwb3B1cF9jNTFmMDkzYjUzMWY0NTQzOGRkMDAyMWVlNTQ5OTVlNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lOWU0YTE4MWE0ZTE0NTdhODRlNzg4ZWUwMjA5NWNiOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjQxMjQyNSwxOC45Njk0ODNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMTBjZTI2NzhiNzE0NDZiM2JhNWI2MjFjMTg0NWVlYWQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lOWU0YTE4MWE0ZTE0NTdhODRlNzg4ZWUwMjA5NWNiOS5zZXRJY29uKGljb25fMTBjZTI2NzhiNzE0NDZiM2JhNWI2MjFjMTg0NWVlYWQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTU1MjA4YzhmNzM3NDQ2NmEzNjk2NjVjZWJmMmE3M2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2RlMjU1NTc4NzY0NGMyZmFiMWM5YWYyMWFjMzMxNmIgPSAkKCc8ZGl2IGlkPSJodG1sXzdkZTI1NTU3ODc2NDRjMmZhYjFjOWFmMjFhYzMzMTZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDU4IFNjaHJvbmlza28gbmEgV2llbGtpZWogUmFjenkgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNTUyMDhjOGY3Mzc0NDY2YTM2OTY2NWNlYmYyYTczZi5zZXRDb250ZW50KGh0bWxfN2RlMjU1NTc4NzY0NGMyZmFiMWM5YWYyMWFjMzMxNmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lOWU0YTE4MWE0ZTE0NTdhODRlNzg4ZWUwMjA5NWNiOS5iaW5kUG9wdXAocG9wdXBfYTU1MjA4YzhmNzM3NDQ2NmEzNjk2NjVjZWJmMmE3M2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmNiYWMyMGE3MTQ0NDNmYjk1MDJjYmVmMWM1YzZkYmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS42MjYzMDgsMTkuNjQ1MTg1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzdmNDJlNmEyNzU0YTQzYzZhMGZjYjkyOTcwZTI5NmIxID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZmNiYWMyMGE3MTQ0NDNmYjk1MDJjYmVmMWM1YzZkYmIuc2V0SWNvbihpY29uXzdmNDJlNmEyNzU0YTQzYzZhMGZjYjkyOTcwZTI5NmIxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEyYTJkZTc3MzZlNTRiYzA4ZGUxZDI2NTBlNjA5YWIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E1ZjgyN2IxODhmYTQ2YmI5Yzg1ZDVmZTVjM2VjYzFjID0gJCgnPGRpdiBpZD0iaHRtbF9hNWY4MjdiMTg4ZmE0NmJiOWM4NWQ1ZmU1YzNlY2MxYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA1OSBTY2hyb25pc2tvIG5hIEhhbGkgS3J1cG93ZWogPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMmEyZGU3NzM2ZTU0YmMwOGRlMWQyNjUwZTYwOWFiMy5zZXRDb250ZW50KGh0bWxfYTVmODI3YjE4OGZhNDZiYjljODVkNWZlNWMzZWNjMWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mY2JhYzIwYTcxNDQ0M2ZiOTUwMmNiZWYxYzVjNmRiYi5iaW5kUG9wdXAocG9wdXBfMTJhMmRlNzczNmU1NGJjMDhkZTFkMjY1MGU2MDlhYjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODhkNDkyMzJiNzBjNDc4NDljYzFmZjI2M2UxYTM0NzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS41NDIxNzcsMTkuMTcwMzA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2M2Y2I5MTkwZmYwMDRiOThiYTlhYTQ1YjUzYjEzOTUzID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODhkNDkyMzJiNzBjNDc4NDljYzFmZjI2M2UxYTM0NzYuc2V0SWNvbihpY29uX2M2Y2I5MTkwZmYwMDRiOThiYTlhYTQ1YjUzYjEzOTUzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlYTFlYTk3YWZlNTQzNjE5ZmFjYzBhY2QxYzhiZDM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc2YzMwZjgyYjIwNzRkNjliM2E2NzMwZDEwMTQ1ZTc0ID0gJCgnPGRpdiBpZD0iaHRtbF83NmMzMGY4MmIyMDc0ZDY5YjNhNjczMGQxMDE0NWU3NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA2MSBTY2hyb25pc2tvIG5hIEhhbGkgQm9yYWN6ZWogPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZWExZWE5N2FmZTU0MzYxOWZhY2MwYWNkMWM4YmQzNS5zZXRDb250ZW50KGh0bWxfNzZjMzBmODJiMjA3NGQ2OWIzYTY3MzBkMTAxNDVlNzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84OGQ0OTIzMmI3MGM0Nzg0OWNjMWZmMjYzZTFhMzQ3Ni5iaW5kUG9wdXAocG9wdXBfNWVhMWVhOTdhZmU1NDM2MTlmYWNjMGFjZDFjOGJkMzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmU3MjRmYjZiNTJiNDRiYWE3ZTFmZTQwMjVkYTRiOTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS41ODgxOTQsMTkuNTE2MzMyMDAwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzQxNmZlZWExOTZjMTRmZDViODEzNmRjYzI2YWVmMzM5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMmU3MjRmYjZiNTJiNDRiYWE3ZTFmZTQwMjVkYTRiOTQuc2V0SWNvbihpY29uXzQxNmZlZWExOTZjMTRmZDViODEzNmRjYzI2YWVmMzM5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwNzMxM2Y1ZDRkZTRjZWY5NjU3YjMzZWY5NDA2NmRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzllNjFmNjdkMjE4MzQ2ZjM4OGYxMjZiMDhhOTI2YWI4ID0gJCgnPGRpdiBpZD0iaHRtbF85ZTYxZjY3ZDIxODM0NmYzODhmMTI2YjA4YTkyNmFiOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA2MiBCYWJpYSBHw7NyYSAtIE1hcmtvd2UgU3pjemF3aW55IDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzA3MzEzZjVkNGRlNGNlZjk2NTdiMzNlZjk0MDY2ZGUuc2V0Q29udGVudChodG1sXzllNjFmNjdkMjE4MzQ2ZjM4OGYxMjZiMDhhOTI2YWI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmU3MjRmYjZiNTJiNDRiYWE3ZTFmZTQwMjVkYTRiOTQuYmluZFBvcHVwKHBvcHVwXzcwNzMxM2Y1ZDRkZTRjZWY5NjU3YjMzZWY5NDA2NmRlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ3NGYzZTQwOGQ2ZjQyM2U4MTYyZGNjYTAzMTY0Yzc4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNTk1Mzk5LDE4Ljk4NTMxOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kY2Q2NGU5ZGJjYTQ0MTZhOTI5OWVjZjc5NThiOWI4NCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzQ3NGYzZTQwOGQ2ZjQyM2U4MTYyZGNjYTAzMTY0Yzc4LnNldEljb24oaWNvbl9kY2Q2NGU5ZGJjYTQ0MTZhOTI5OWVjZjc5NThiOWI4NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDI4NWFjMGM0MmU0OGI3YmMxZjIwOTY0YWU4YWY5NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGFhYmMwZWM4ZmI0OGU1OTcwYjQzZWFmMWI0Y2M5NSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjhhYWJjMGVjOGZiNDhlNTk3MGI0M2VhZjFiNGNjOTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwNjUgU2Nocm9uaXNrbyBOYSBQcnp5c8WCb3BpZSAtIEJhcmFuaWEgR8OzcmEgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDI4NWFjMGM0MmU0OGI3YmMxZjIwOTY0YWU4YWY5Ny5zZXRDb250ZW50KGh0bWxfNjhhYWJjMGVjOGZiNDhlNTk3MGI0M2VhZjFiNGNjOTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80NzRmM2U0MDhkNmY0MjNlODE2MmRjY2EwMzE2NGM3OC5iaW5kUG9wdXAocG9wdXBfNGQyODVhYzBjNDJlNDhiN2JjMWYyMDk2NGFlOGFmOTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODc5NTRiYjEyYTFkNGFhZGI2ZjM4N2ZkOTFiOWYwNjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS42Mjk1NjcsMTguOTE1MTYzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzBmMTQ3MWIyNWFkMDRjNDViMTI5ZDA3NmVlYTg3YWZlID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODc5NTRiYjEyYTFkNGFhZGI2ZjM4N2ZkOTFiOWYwNjQuc2V0SWNvbihpY29uXzBmMTQ3MWIyNWFkMDRjNDViMTI5ZDA3NmVlYTg3YWZlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA0YTgzNGNhMzhjOTRkZWRhNzNhYzgzZDVlMjY0M2NmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0MjcwMDA5NWViMDRkY2Q5N2NiOWExMjc2MGM0M2IzID0gJCgnPGRpdiBpZD0iaHRtbF8xNDI3MDAwOTVlYjA0ZGNkOTdjYjlhMTI3NjBjNDNiMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA2NiBTa29jem5pYSBOYXJjaWFyc2thIEltLiBBZGFtYSBNYcWCeXN6YSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA0YTgzNGNhMzhjOTRkZWRhNzNhYzgzZDVlMjY0M2NmLnNldENvbnRlbnQoaHRtbF8xNDI3MDAwOTVlYjA0ZGNkOTdjYjlhMTI3NjBjNDNiMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg3OTU0YmIxMmExZDRhYWRiNmYzODdmZDkxYjlmMDY0LmJpbmRQb3B1cChwb3B1cF8wNGE4MzRjYTM4Yzk0ZGVkYTczYWM4M2Q1ZTI2NDNjZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82OWM0ZjkyMzYyOWQ0ZmEzYTFkNzIyMTgxYTkwZmIyNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjU3ODMzMywxOS4yMTM4ODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fM2Y4ZWM0NGE2Y2UzNDAxNzg0ZWQzY2E2YjAyMGE3YTYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82OWM0ZjkyMzYyOWQ0ZmEzYTFkNzIyMTgxYTkwZmIyNy5zZXRJY29uKGljb25fM2Y4ZWM0NGE2Y2UzNDAxNzg0ZWQzY2E2YjAyMGE3YTYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzI0NDE3N2NjODU0NDNiNjk2OTBjYjk5NzM0MzQ2ZjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjE4NDZmNjE0Mjg0NDRkOTk5NTE3M2UyMTM4MDQwM2UgPSAkKCc8ZGl2IGlkPSJodG1sX2YxODQ2ZjYxNDI4NDQ0ZDk5OTUxNzNlMjEzODA0MDNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDcwIEfDs3Jza2EgU3RhY2phIFR1cnlzdHljem5hIFPFgm93aWFua2E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyNDQxNzdjYzg1NDQzYjY5NjkwY2I5OTczNDM0NmY0LnNldENvbnRlbnQoaHRtbF9mMTg0NmY2MTQyODQ0NGQ5OTk1MTczZTIxMzgwNDAzZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY5YzRmOTIzNjI5ZDRmYTNhMWQ3MjIxODFhOTBmYjI3LmJpbmRQb3B1cChwb3B1cF8zMjQ0MTc3Y2M4NTQ0M2I2OTY5MGNiOTk3MzQzNDZmNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MmFlNTcyYjU0ZTY0MDNkOWY1MjBiYTgxNGQ2ZjFkOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjQxOTIzNywxOS4wOTc2NzJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYWMzZTZhOGRmMGJjNDE3Y2E3NTY3N2I1NjliN2QyOWUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81MmFlNTcyYjU0ZTY0MDNkOWY1MjBiYTgxNGQ2ZjFkOC5zZXRJY29uKGljb25fYWMzZTZhOGRmMGJjNDE3Y2E3NTY3N2I1NjliN2QyOWUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzA2ODY3MjUyNzZjNDU1YjkzN2M3NTQyZWEzOGVkZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzhmN2ZhMTQ1OWE1NDY4ZGFhZTkyNWI0MDQ4Y2JmNzAgPSAkKCc8ZGl2IGlkPSJodG1sXzM4ZjdmYTE0NTlhNTQ2OGRhYWU5MjViNDA0OGNiZjcwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDcxIFNjaHJvbmlza28gUFRUSyBuYSBSeWNlcnpvd2VqICA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwNjg2NzI1Mjc2YzQ1NWI5MzdjNzU0MmVhMzhlZGY1LnNldENvbnRlbnQoaHRtbF8zOGY3ZmExNDU5YTU0NjhkYWFlOTI1YjQwNDhjYmY3MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUyYWU1NzJiNTRlNjQwM2Q5ZjUyMGJhODE0ZDZmMWQ4LmJpbmRQb3B1cChwb3B1cF8zMDY4NjcyNTI3NmM0NTViOTM3Yzc1NDJlYTM4ZWRmNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNDUyNzI4OGJlNWU0ZmZlYWEzMjY5YmVmNmY4NmY3ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY2MjM1OSwxOC4yNjc1NzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMTkzOTMxMmFkYWE5NDliMjllMDRlMDAzZWM4NzJlYjggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yNDUyNzI4OGJlNWU0ZmZlYWEzMjY5YmVmNmY4NmY3ZS5zZXRJY29uKGljb25fMTkzOTMxMmFkYWE5NDliMjllMDRlMDAzZWM4NzJlYjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWMxZTk3NTBkNDNjNDM5NGEzMjFhNDBlZWFmNGQwZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDMwZWZiZDM0ZmMyNDA2NDhkNzE1MDAyN2NiZjY2YjYgPSAkKCc8ZGl2IGlkPSJodG1sX2QzMGVmYmQzNGZjMjQwNjQ4ZDcxNTAwMjdjYmY2NmI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTY4IFBhcmsgTmF1a2kgaSBSb3pyeXdraSB3IEtyYXNpZWpvd2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYzFlOTc1MGQ0M2M0Mzk0YTMyMWE0MGVlYWY0ZDBkMS5zZXRDb250ZW50KGh0bWxfZDMwZWZiZDM0ZmMyNDA2NDhkNzE1MDAyN2NiZjY2YjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNDUyNzI4OGJlNWU0ZmZlYWEzMjY5YmVmNmY4NmY3ZS5iaW5kUG9wdXAocG9wdXBfYWMxZTk3NTBkNDNjNDM5NGEzMjFhNDBlZWFmNGQwZDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWZkOWEzZDg1MDY3NGY3ZTgxNjJmMjRlOTY3YTAyYmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4wODkyOTIsMTguMjIwMDc2MDAwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2Q1NGM0NzdlM2ZhMjQ4Yjc5YmZjODU5NmZmNzdhMWQ2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNWZkOWEzZDg1MDY3NGY3ZTgxNjJmMjRlOTY3YTAyYmMuc2V0SWNvbihpY29uX2Q1NGM0NzdlM2ZhMjQ4Yjc5YmZjODU5NmZmNzdhMWQ2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzOWIwODcwZTU3ZjQ0ZjM4OGZjNjhlMjEzYzMzMzBmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ViMjA5ZTAxMmUzYjQ1NDA5NWIzYTUyM2NjNWNhZWRhID0gJCgnPGRpdiBpZD0iaHRtbF9lYjIwOWUwMTJlM2I0NTQwOTViM2E1MjNjYzVjYWVkYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE3MCBCYXN6dGEgdyBSYWNpYm9yenU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzOWIwODcwZTU3ZjQ0ZjM4OGZjNjhlMjEzYzMzMzBmLnNldENvbnRlbnQoaHRtbF9lYjIwOWUwMTJlM2I0NTQwOTViM2E1MjNjYzVjYWVkYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVmZDlhM2Q4NTA2NzRmN2U4MTYyZjI0ZTk2N2EwMmJjLmJpbmRQb3B1cChwb3B1cF81MzliMDg3MGU1N2Y0NGYzODhmYzY4ZTIxM2MzMzMwZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81YzdjNGJmYTE3ZDk0NGMzYWYxMmY4YTIxNzdkMjUyNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjA5NjAzOCwxOC4yMjEyMDE5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNzY2MjAzMzQ2YzJlNGNlNzk2ZDExYTE2NDI2M2M0YjEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81YzdjNGJmYTE3ZDk0NGMzYWYxMmY4YTIxNzdkMjUyNy5zZXRJY29uKGljb25fNzY2MjAzMzQ2YzJlNGNlNzk2ZDExYTE2NDI2M2M0YjEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjUwMDg3OTg0YWMyNGQ5MWFjYmFiYTNhMjFhN2M5MDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZThlZDZkNTQ3NDllNDgwMzk1MjlhMDg1ZTViMDQxNzUgPSAkKCc8ZGl2IGlkPSJodG1sX2U4ZWQ2ZDU0NzQ5ZTQ4MDM5NTI5YTA4NWU1YjA0MTc1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTcxIFphbWVrIFBpYXN0b3dza2kgdyBSYWNpYm9yenU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1MDA4Nzk4NGFjMjRkOTFhY2JhYmEzYTIxYTdjOTA5LnNldENvbnRlbnQoaHRtbF9lOGVkNmQ1NDc0OWU0ODAzOTUyOWEwODVlNWIwNDE3NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVjN2M0YmZhMTdkOTQ0YzNhZjEyZjhhMjE3N2QyNTI3LmJpbmRQb3B1cChwb3B1cF9iNTAwODc5ODRhYzI0ZDkxYWNiYWJhM2EyMWE3YzkwOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yODVkYTEyZjM3ZDk0OWI2YWYzODg0NGZiODNhYWY3NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5Ljc0ODM4NCwxOC42MzA4OTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZjU5OWE1OGVkYzY2NDcyMWE2NmYwMzQ4ODUzOWYxNzMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yODVkYTEyZjM3ZDk0OWI2YWYzODg0NGZiODNhYWY3NC5zZXRJY29uKGljb25fZjU5OWE1OGVkYzY2NDcyMWE2NmYwMzQ4ODUzOWYxNzMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjM5ZGZlNzY3ZTk5NGQzYjk2MTMzMDMzNzkzMWFhMWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzczNWI5MmRkMTlmNDg1Zjk0NWE4ZTViZmM0M2Q3NTMgPSAkKCc8ZGl2IGlkPSJodG1sX2M3MzViOTJkZDE5ZjQ4NWY5NDVhOGU1YmZjNDNkNzUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTcyIFN0dWRuaWEgVHJ6ZWNoIEJyYWNpIHcgQ2llc3p5bmllPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMzlkZmU3NjdlOTk0ZDNiOTYxMzMwMzM3OTMxYWExZS5zZXRDb250ZW50KGh0bWxfYzczNWI5MmRkMTlmNDg1Zjk0NWE4ZTViZmM0M2Q3NTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yODVkYTEyZjM3ZDk0OWI2YWYzODg0NGZiODNhYWY3NC5iaW5kUG9wdXAocG9wdXBfZjM5ZGZlNzY3ZTk5NGQzYjk2MTMzMDMzNzkzMWFhMWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODcwNWM0NzkxMjQzNGFmYmEwMjNhNTMyODdiNTlhYmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS43NTEzNDEsMTguNjI1ODk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzkwNWEyOWMxMzc4YzRiNTVhNTlmYTBhM2QyMDJhZDlmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODcwNWM0NzkxMjQzNGFmYmEwMjNhNTMyODdiNTlhYmIuc2V0SWNvbihpY29uXzkwNWEyOWMxMzc4YzRiNTVhNTlmYTBhM2QyMDJhZDlmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg0ZjY0YjdhMmI0YzRkMjRiYjMzOGRjMmRhYTQ4OTA0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBjYzdmM2I1MDY4YzQ1Yzg5YjczZjc2MTExNTA5ZDRiID0gJCgnPGRpdiBpZD0iaHRtbF8wY2M3ZjNiNTA2OGM0NWM4OWI3M2Y3NjExMTUwOWQ0YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE3MyBSb3R1bmRhIMWady4gTWlrb8WCYWphIGkgV2llxbxhIFBpYXN0b3dza2EgdyBDaWVzenluaWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg0ZjY0YjdhMmI0YzRkMjRiYjMzOGRjMmRhYTQ4OTA0LnNldENvbnRlbnQoaHRtbF8wY2M3ZjNiNTA2OGM0NWM4OWI3M2Y3NjExMTUwOWQ0Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg3MDVjNDc5MTI0MzRhZmJhMDIzYTUzMjg3YjU5YWJiLmJpbmRQb3B1cChwb3B1cF84NGY2NGI3YTJiNGM0ZDI0YmIzMzhkYzJkYWE0ODkwNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83NjQ0ZmI1NGQ5MTQ0NzI2ODE1Y2Y1ZjVjZjZhYTNhMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5Ljc0ODIxMywxOC42MzMxOTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZmIxOWE3YzdkN2Q0NGFmYzlmMDBmMjA3MWJhYmVjYTEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83NjQ0ZmI1NGQ5MTQ0NzI2ODE1Y2Y1ZjVjZjZhYTNhMC5zZXRJY29uKGljb25fZmIxOWE3YzdkN2Q0NGFmYzlmMDBmMjA3MWJhYmVjYTEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTg5MmJkN2ZhMTA3NGMzOWFmZDUwYjIyMWEyYmM2YjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzZkOTYwYjBhNGM5NGM4NGEwMDQ5NjlkYWQ3YjRkZDAgPSAkKCc8ZGl2IGlkPSJodG1sXzc2ZDk2MGIwYTRjOTRjODRhMDA0OTY5ZGFkN2I0ZGQwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTc0IFJhdHVzeiB3IENpZXN6eW5pZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTg5MmJkN2ZhMTA3NGMzOWFmZDUwYjIyMWEyYmM2Yjkuc2V0Q29udGVudChodG1sXzc2ZDk2MGIwYTRjOTRjODRhMDA0OTY5ZGFkN2I0ZGQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzY0NGZiNTRkOTE0NDcyNjgxNWNmNWY1Y2Y2YWEzYTAuYmluZFBvcHVwKHBvcHVwX2U4OTJiZDdmYTEwNzRjMzlhZmQ1MGIyMjFhMmJjNmI5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQxODVkMGIzNGI5NzRhNmZiZjAxYmE5MGE5NjMzNTYxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNjc4MDgzLDE4Ljk0NjQzNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82M2Q0M2NiMzRjZGU0NGIzYTk5YTBlODliNWRmYjc4NiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzQxODVkMGIzNGI5NzRhNmZiZjAxYmE5MGE5NjMzNTYxLnNldEljb24oaWNvbl82M2Q0M2NiMzRjZGU0NGIzYTk5YTBlODliNWRmYjc4Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMGJiNDYyMTAzZjE0ZjNjYjc1MjY0Mjk5OTBmZTA4OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YjJjYWRkMDM1NDc0NDU2ODQ5ODczMzY4MzQ3OGE5OSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2IyY2FkZDAzNTQ3NDQ1Njg0OTg3MzM2ODM0NzhhOTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxNzUgU2Nocm9uaXNrbyBDaGF0YSBHcmFib3dhIOKAkyBCcmVubmE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwYmI0NjIxMDNmMTRmM2NiNzUyNjQyOTk5MGZlMDg4LnNldENvbnRlbnQoaHRtbF83YjJjYWRkMDM1NDc0NDU2ODQ5ODczMzY4MzQ3OGE5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQxODVkMGIzNGI5NzRhNmZiZjAxYmE5MGE5NjMzNTYxLmJpbmRQb3B1cChwb3B1cF8wMGJiNDYyMTAzZjE0ZjNjYjc1MjY0Mjk5OTBmZTA4OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MzI4N2IxZGQzMzU0ZGQ2YTIyMWRhOWEzMzRhOGE3ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjY3NzgwMSwxOC45NDYxNjcwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOTUxNWFiZTJiNGJlNDI5YmI1NzUwNzk4MzY2MDBhNzMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80MzI4N2IxZGQzMzU0ZGQ2YTIyMWRhOWEzMzRhOGE3ZS5zZXRJY29uKGljb25fOTUxNWFiZTJiNGJlNDI5YmI1NzUwNzk4MzY2MDBhNzMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzk0NmU1NTk3YTQ1NGQyNzlkNGM3NDcyMTkzZDFjNzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2I0YmNkODcwYTFkNDkxNjlmYmNkZTFjMjBjNzU3NWIgPSAkKCc8ZGl2IGlkPSJodG1sX2NiNGJjZDg3MGExZDQ5MTY5ZmJjZGUxYzIwYzc1NzViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTc2IE9ncsOzZCBCYWplayAtIENoYXRhIEdyYWJvd2Eg4oCTIEJyZW5uYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzk0NmU1NTk3YTQ1NGQyNzlkNGM3NDcyMTkzZDFjNzIuc2V0Q29udGVudChodG1sX2NiNGJjZDg3MGExZDQ5MTY5ZmJjZGUxYzIwYzc1NzViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDMyODdiMWRkMzM1NGRkNmEyMjFkYTlhMzM0YThhN2UuYmluZFBvcHVwKHBvcHVwXzc5NDZlNTU5N2E0NTRkMjc5ZDRjNzQ3MjE5M2QxYzcyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZiMzU4MjZmOTI0NzRjMjg5ZDFlNDAwZmU4ZDZjMWNjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuODIxMjkyLDE5LjA0MjU1MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8xZjE2NTJlYTA1ZjE0Yzc5OTkwYjVmYjQ1Mjk0NjVjOSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2ZiMzU4MjZmOTI0NzRjMjg5ZDFlNDAwZmU4ZDZjMWNjLnNldEljb24oaWNvbl8xZjE2NTJlYTA1ZjE0Yzc5OTkwYjVmYjQ1Mjk0NjVjOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YTlkMmQ3ZjliMmE0NmMxYjRkMjA0ZDgyOWQwNTA2NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MjM3N2E5YzNjNWI0ZDc3OWYzNDg3ZjRlOTBlOWY0NCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTIzNzdhOWMzYzViNGQ3NzlmMzQ4N2Y0ZTkwZTlmNDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxNzcgUnluZWsgU3RhcmVnbyBNaWFzdGEgdyBCaWVsc2t1IOKAkyBCaWHFgmVqPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YTlkMmQ3ZjliMmE0NmMxYjRkMjA0ZDgyOWQwNTA2NS5zZXRDb250ZW50KGh0bWxfNTIzNzdhOWMzYzViNGQ3NzlmMzQ4N2Y0ZTkwZTlmNDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mYjM1ODI2ZjkyNDc0YzI4OWQxZTQwMGZlOGQ2YzFjYy5iaW5kUG9wdXAocG9wdXBfOWE5ZDJkN2Y5YjJhNDZjMWI0ZDIwNGQ4MjlkMDUwNjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTg5ZTk2MWJhNTQyNGI2MmEyNDJjMDFjMDg4N2U3OGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS44MjAyNDIsMTkuMDQzMTMyOTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2EyOTRmYjRhN2Y0ZTRjY2M4YWMyMzM3MDk4MWFiMTM1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTg5ZTk2MWJhNTQyNGI2MmEyNDJjMDFjMDg4N2U3OGIuc2V0SWNvbihpY29uX2EyOTRmYjRhN2Y0ZTRjY2M4YWMyMzM3MDk4MWFiMTM1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0NWZhNDZkMzZiOTRhMmRhNGNjNTA5MGNiYTY0NDMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RiOWVjNmM0YTVmODQyZjM5ZmNhNTEyZTI2MGJkNDU1ID0gJCgnPGRpdiBpZD0iaHRtbF9kYjllYzZjNGE1Zjg0MmYzOWZjYTUxMmUyNjBiZDQ1NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE3OCBLYXRlZHJhIMWbdy4gTWlrb8WCYWphIHcgQmllbHNrdS1CaWHFgmU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y0NWZhNDZkMzZiOTRhMmRhNGNjNTA5MGNiYTY0NDMxLnNldENvbnRlbnQoaHRtbF9kYjllYzZjNGE1Zjg0MmYzOWZjYTUxMmUyNjBiZDQ1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U4OWU5NjFiYTU0MjRiNjJhMjQyYzAxYzA4ODdlNzhiLmJpbmRQb3B1cChwb3B1cF9mNDVmYTQ2ZDM2Yjk0YTJkYTRjYzUwOTBjYmE2NDQzMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jMzk3OWFmYjQ2M2Q0MGEyYjc2ZDI2NDc1NjcxZDIzMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjY2NDYzNiwxOC45MDcxMjZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTdkYzFmYzY2NTAwNDMxNDk1MzVlMzIzMWJhMjNmZGEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jMzk3OWFmYjQ2M2Q0MGEyYjc2ZDI2NDc1NjcxZDIzMC5zZXRJY29uKGljb25fYTdkYzFmYzY2NTAwNDMxNDk1MzVlMzIzMWJhMjNmZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjc5YzdhYzUyMWFiNDQxZTkyYThlZjM0ZTZkNGNkOTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWVhN2ZmNzUyZmNhNDk3ODk2MjRkYzEyOTU4NmNjZGYgPSAkKCc8ZGl2IGlkPSJodG1sXzVlYTdmZjc1MmZjYTQ5Nzg5NjI0ZGMxMjk1ODZjY2RmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTc5IFRyenkgS29wY2UgV2nFm2xhxYRza2llIOKAkyBCZXNraWQgxZpsxIVza2k8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY3OWM3YWM1MjFhYjQ0MWU5MmE4ZWYzNGU2ZDRjZDk3LnNldENvbnRlbnQoaHRtbF81ZWE3ZmY3NTJmY2E0OTc4OTYyNGRjMTI5NTg2Y2NkZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2MzOTc5YWZiNDYzZDQwYTJiNzZkMjY0NzU2NzFkMjMwLmJpbmRQb3B1cChwb3B1cF82NzljN2FjNTIxYWI0NDFlOTJhOGVmMzRlNmQ0Y2Q5Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zZTE5MzRiOGQzMGI0OGM4YWI5ZWY3YmM4Y2EyNDNhMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjYzOTMwMiwxOC44MTM3NjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMGRhNjNiOTJiNzg3NDIyMWE2YjAyMzk3NTE4YWNhMmMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zZTE5MzRiOGQzMGI0OGM4YWI5ZWY3YmM4Y2EyNDNhMy5zZXRJY29uKGljb25fMGRhNjNiOTJiNzg3NDIyMWE2YjAyMzk3NTE4YWNhMmMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWI5NDU4OTJjODBmNDRkY2IzYjg1Zjc1MmQ5OGI0YTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWJjMjBiZjI1MWI0NDUyMzg0NTUxZjMxYzNiY2JjZjcgPSAkKCc8ZGl2IGlkPSJodG1sX2ViYzIwYmYyNTFiNDQ1MjM4NDU1MWYzMWMzYmNiY2Y3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTgwIFNjaHJvbmlza28g4oCeU29zesOzd+KAnSAtIFdpc8WCYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWI5NDU4OTJjODBmNDRkY2IzYjg1Zjc1MmQ5OGI0YTAuc2V0Q29udGVudChodG1sX2ViYzIwYmYyNTFiNDQ1MjM4NDU1MWYzMWMzYmNiY2Y3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2UxOTM0YjhkMzBiNDhjOGFiOWVmN2JjOGNhMjQzYTMuYmluZFBvcHVwKHBvcHVwX2FiOTQ1ODkyYzgwZjQ0ZGNiM2I4NWY3NTJkOThiNGEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NjMzM1YzhkYTg5NjRkZjlhY2VjZmZiZGNmMjhkZDRmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNTE3NDQ0LDE4Ljg1MTM5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iMTNiOWQyYmUwM2Y0ZDc1YTk1OTVhZTgzNmJmZDg2ZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2NjMzM1YzhkYTg5NjRkZjlhY2VjZmZiZGNmMjhkZDRmLnNldEljb24oaWNvbl9iMTNiOWQyYmUwM2Y0ZDc1YTk1OTVhZTgzNmJmZDg2ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZDhiMWZmNTE1MTk0YWQ4OTMwMWMwMzUwYjEyZmZjNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NGE4NmU0YjU5MDg0ODFiODI1NWQ1MTZhOGNiNGRhMCA9ICQoJzxkaXYgaWQ9Imh0bWxfOTRhODZlNGI1OTA4NDgxYjgyNTVkNTE2YThjYjRkYTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxODEgVHLDs2pzdHlrIGdyYW5pYywgUG9sc2thIC0gU8WCb3dhY2phIOKAkyBDemVjaHk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NkOGIxZmY1MTUxOTRhZDg5MzAxYzAzNTBiMTJmZmM2LnNldENvbnRlbnQoaHRtbF85NGE4NmU0YjU5MDg0ODFiODI1NWQ1MTZhOGNiNGRhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NjMzM1YzhkYTg5NjRkZjlhY2VjZmZiZGNmMjhkZDRmLmJpbmRQb3B1cChwb3B1cF9jZDhiMWZmNTE1MTk0YWQ4OTMwMWMwMzUwYjEyZmZjNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jMWI0MzA4MGU3ZjQ0OGE0YjA2NzQyNzNkZGZmZTgxNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjQyODI2MSwxOS42NzQzMzI5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNDQ0ZGJiYjNlM2NiNDkzZmE4NzQ1YTZkOWRhMmFkMWUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jMWI0MzA4MGU3ZjQ0OGE0YjA2NzQyNzNkZGZmZTgxNC5zZXRJY29uKGljb25fNDQ0ZGJiYjNlM2NiNDkzZmE4NzQ1YTZkOWRhMmFkMWUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGNiMmRmNmFkZjM5NGMyMGJkZGUyNGU2ZTllNzFiMmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTQ2ZWZkZjE1MWFhNDE3YThiNGNhNjRlOWUyNDUzNzMgPSAkKCc8ZGl2IGlkPSJodG1sXzE0NmVmZGYxNTFhYTQxN2E4YjRjYTY0ZTllMjQ1MzczIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjA4IERvbGluYSBXb2TEhWNlaiDigJMgSnVyYSBLcmFrb3dza28g4oCTIEN6xJlzdG9jaG93c2thPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wY2IyZGY2YWRmMzk0YzIwYmRkZTI0ZTZlOWU3MWIyZC5zZXRDb250ZW50KGh0bWxfMTQ2ZWZkZjE1MWFhNDE3YThiNGNhNjRlOWUyNDUzNzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMWI0MzA4MGU3ZjQ0OGE0YjA2NzQyNzNkZGZmZTgxNC5iaW5kUG9wdXAocG9wdXBfMGNiMmRmNmFkZjM5NGMyMGJkZGUyNGU2ZTllNzFiMmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzA3YWY2ZDYyZmUwNDE5Njg2Yjg0MGI2MzU2OWRkY2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4xMDI3OTksMTkuNTc4OTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYWU5MDU2NWVkMTJjNDM4MDliMDllNzRhYzJkMjQ5NmIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83MDdhZjZkNjJmZTA0MTk2ODZiODQwYjYzNTY5ZGRjZi5zZXRJY29uKGljb25fYWU5MDU2NWVkMTJjNDM4MDliMDllNzRhYzJkMjQ5NmIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGM3YmNmNTQzNzgyNGY5OTg0OTY5ZmZiMGNiNzg2ZjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTNjMWI4NmRmOTE3NDk5NWFiMDk3YTUyNTI5MzI5ZmMgPSAkKCc8ZGl2IGlkPSJodG1sXzUzYzFiODZkZjkxNzQ5OTVhYjA5N2E1MjUyOTMyOWZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjA5IFphbWVrIFRlbmN6eW4gdyBSdWRuaWUgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YzdiY2Y1NDM3ODI0Zjk5ODQ5NjlmZmIwY2I3ODZmOS5zZXRDb250ZW50KGh0bWxfNTNjMWI4NmRmOTE3NDk5NWFiMDk3YTUyNTI5MzI5ZmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83MDdhZjZkNjJmZTA0MTk2ODZiODQwYjYzNTY5ZGRjZi5iaW5kUG9wdXAocG9wdXBfOGM3YmNmNTQzNzgyNGY5OTg0OTY5ZmZiMGNiNzg2ZjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWFhZDM2NjQyNTkyNGY4OGFkMzQzMzU2YTI0NzI1MmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42MTQ4OCwxOS40Njc3NjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTU0MDRhYTgyOTIyNDZiNGIxOWRjN2ViMTg0MDYzNmEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85YWFkMzY2NDI1OTI0Zjg4YWQzNDMzNTZhMjQ3MjUyZC5zZXRJY29uKGljb25fYTU0MDRhYTgyOTIyNDZiNGIxOWRjN2ViMTg0MDYzNmEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDk1NDA1YTQxMDdjNDE2YWE3YjhhNDkzMTdkOWUxOTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWIzN2M3MTg4NDYyNGEzY2I2YjJlMDg2ZThkNGNlNzcgPSAkKCc8ZGl2IGlkPSJodG1sXzFiMzdjNzE4ODQ2MjRhM2NiNmIyZTA4NmU4ZDRjZTc3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjIxIFphbWVrIE1pcsOzdyA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q5NTQwNWE0MTA3YzQxNmFhN2I4YTQ5MzE3ZDllMTk2LnNldENvbnRlbnQoaHRtbF8xYjM3YzcxODg0NjI0YTNjYjZiMmUwODZlOGQ0Y2U3Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlhYWQzNjY0MjU5MjRmODhhZDM0MzM1NmEyNDcyNTJkLmJpbmRQb3B1cChwb3B1cF9kOTU0MDVhNDEwN2M0MTZhYTdiOGE0OTMxN2Q5ZTE5Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lYTJjNDA4YmJjZDg0ODgyOGE3MTk5M2UxMmQ4YmYyYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjMxODM5MSwxOS4wNzM2NzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNDY3MzAzZWQ5NTI2NGIzZGI5MGI4MzJlMGUzOWQ0YjEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lYTJjNDA4YmJjZDg0ODgyOGE3MTk5M2UxMmQ4YmYyYy5zZXRJY29uKGljb25fNDY3MzAzZWQ5NTI2NGIzZGI5MGI4MzJlMGUzOWQ0YjEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDg1YzE1OTJiNmZlNDkxNWE0YzQzMjUxOTE0YmQ5MjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzQwMDU3MmQyNDMxNGM3MmFkYzczNDM0YWNlY2M5NzkgPSAkKCc8ZGl2IGlkPSJodG1sXzM0MDA1NzJkMjQzMTRjNzJhZGM3MzQzNGFjZWNjOTc5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzA2IEN6ZWxhZMW6LVJ5bmVrIE1pYXN0YSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q4NWMxNTkyYjZmZTQ5MTVhNGM0MzI1MTkxNGJkOTIwLnNldENvbnRlbnQoaHRtbF8zNDAwNTcyZDI0MzE0YzcyYWRjNzM0MzRhY2VjYzk3OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2VhMmM0MDhiYmNkODQ4ODI4YTcxOTkzZTEyZDhiZjJjLmJpbmRQb3B1cChwb3B1cF9kODVjMTU5MmI2ZmU0OTE1YTRjNDMyNTE5MTRiZDkyMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mN2M3NGY2NWJiYTk0MTBmYWM4NDRlMTk0YWRkMDc3ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5Ljc4ODY5OCwxOS4yMjk0MzJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMmQ4YzY1NDRjMmE1NDdjN2JjYzA2OGZiNTYzMjZmZjMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mN2M3NGY2NWJiYTk0MTBmYWM4NDRlMTk0YWRkMDc3Zi5zZXRJY29uKGljb25fMmQ4YzY1NDRjMmE1NDdjN2JjYzA2OGZiNTYzMjZmZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWQ2MjkwYTQ2YzA3NDBkODhmMzBlODA4M2Q3ZTdmMWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjg0ZTA4NmU5MzBlNGQ4ODhmMzgxZDA3ODA4YTJkM2YgPSAkKCc8ZGl2IGlkPSJodG1sX2I4NGUwODZlOTMwZTRkODg4ZjM4MWQwNzgwOGEyZDNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDQxIMW7YXIgLSBzemN6eXQgdyBCZXNraWR6aWUgTWHFgnltPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZDYyOTBhNDZjMDc0MGQ4OGYzMGU4MDgzZDdlN2YxZS5zZXRDb250ZW50KGh0bWxfYjg0ZTA4NmU5MzBlNGQ4ODhmMzgxZDA3ODA4YTJkM2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mN2M3NGY2NWJiYTk0MTBmYWM4NDRlMTk0YWRkMDc3Zi5iaW5kUG9wdXAocG9wdXBfZWQ2MjkwYTQ2YzA3NDBkODhmMzBlODA4M2Q3ZTdmMWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjAyNDRiM2E4OTY0NDI3MTgwNzcwMjk2YWQxY2VmODEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS43NzU1OTIsMTkuMjIxOTc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2NjZDk2OGIzMjU5OTQ3NTE4MTMzZTIzNDdhYmNkMTVmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjAyNDRiM2E4OTY0NDI3MTgwNzcwMjk2YWQxY2VmODEuc2V0SWNvbihpY29uX2NjZDk2OGIzMjU5OTQ3NTE4MTMzZTIzNDdhYmNkMTVmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYzNjkwMjRiYjExNjQxNDM5NzlkNTg1NDNiMWRkN2E2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJlMGYzMTAxMGY2YTQzYzI5OGUzZjA3OTY2NzVkN2RiID0gJCgnPGRpdiBpZD0iaHRtbF8yZTBmMzEwMTBmNmE0M2MyOThlM2YwNzk2Njc1ZDdkYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQ0MiBLb2xlaiBuYSBHw7NyxJkgxbthciDigJMgTWnEmWR6eWJyb2R6aWUgxbt5d2llY2tpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjM2OTAyNGJiMTE2NDE0Mzk3OWQ1ODU0M2IxZGQ3YTYuc2V0Q29udGVudChodG1sXzJlMGYzMTAxMGY2YTQzYzI5OGUzZjA3OTY2NzVkN2RiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjAyNDRiM2E4OTY0NDI3MTgwNzcwMjk2YWQxY2VmODEuYmluZFBvcHVwKHBvcHVwXzYzNjkwMjRiYjExNjQxNDM5NzlkNTg1NDNiMWRkN2E2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q4NTM1MmVkZWQ2NzQyNTE5MDk5MzdlZjg3YTJjOGI1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNzU4MzA0LDE5LjIxMzIzNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80ZTU5NTRmMGRlNDg0OWRmODJkNjU5ZWE3OGRiYWFkYSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2Q4NTM1MmVkZWQ2NzQyNTE5MDk5MzdlZjg3YTJjOGI1LnNldEljb24oaWNvbl80ZTU5NTRmMGRlNDg0OWRmODJkNjU5ZWE3OGRiYWFkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOGYwOTVlMTY0MTg0MzE4YjI0NDE1YTYzOGI2ZDQwZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYmI3NGI1YWU5NDE0ZTEzODAwYzVkYWEwMTYzMmZlNSA9ICQoJzxkaXYgaWQ9Imh0bWxfZWJiNzRiNWFlOTQxNGUxMzgwMGM1ZGFhMDE2MzJmZTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0NDMgS2FwbGljYSBpIGR6d29ubmljYSB3IEN6ZXJuaWNob3dpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjhmMDk1ZTE2NDE4NDMxOGIyNDQxNWE2MzhiNmQ0MGYuc2V0Q29udGVudChodG1sX2ViYjc0YjVhZTk0MTRlMTM4MDBjNWRhYTAxNjMyZmU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDg1MzUyZWRlZDY3NDI1MTkwOTkzN2VmODdhMmM4YjUuYmluZFBvcHVwKHBvcHVwX2Y4ZjA5NWUxNjQxODQzMThiMjQ0MTVhNjM4YjZkNDBmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FkZjQzY2YzZDYwZjQxZmZiMzliM2Q4OGUwZTU0Y2I1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNzg3MzgxLDE5LjIyNTk2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzJlNDA4YjQ5OWJmMjQzZWZiMWVkYzRjMGYzYjgyYzFmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYWRmNDNjZjNkNjBmNDFmZmIzOWIzZDg4ZTBlNTRjYjUuc2V0SWNvbihpY29uXzJlNDA4YjQ5OWJmMjQzZWZiMWVkYzRjMGYzYjgyYzFmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQyMDIzMGNhZWRjNTQ0YjViMGVkMWMwMjRkOTg3ZDIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IzM2QxNzA1MDliZDQxNzM5NjliMzhhNzkyNTNkZWU3ID0gJCgnPGRpdiBpZD0iaHRtbF9iMzNkMTcwNTA5YmQ0MTczOTY5YjM4YTc5MjUzZGVlNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQ0NCBFbGVrdHJvd25pYSBzemN6eXRvd28gcG9tcG93YSBQb3LEhWJrYSDigJMgxbthcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDIwMjMwY2FlZGM1NDRiNWIwZWQxYzAyNGQ5ODdkMjMuc2V0Q29udGVudChodG1sX2IzM2QxNzA1MDliZDQxNzM5NjliMzhhNzkyNTNkZWU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWRmNDNjZjNkNjBmNDFmZmIzOWIzZDg4ZTBlNTRjYjUuYmluZFBvcHVwKHBvcHVwXzQyMDIzMGNhZWRjNTQ0YjViMGVkMWMwMjRkOTg3ZDIzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhkZTUzNzFkZTIxMTRkMjc5NTMzOGUyNWJhNmJlOWRlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNTUwODIxLDE4Ljk0ODE0N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8yM2M0OWFjNWFlNzA0NzEzOWRkOTJmOWI5NGU2OTMyMiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzhkZTUzNzFkZTIxMTRkMjc5NTMzOGUyNWJhNmJlOWRlLnNldEljb24oaWNvbl8yM2M0OWFjNWFlNzA0NzEzOWRkOTJmOWI5NGU2OTMyMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MjU5MjgyZGFkYzU0ZWQxYjljMDk1ZjNlNDA3NjEzNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jODhmMDFhMjQ1NGM0MmQ2OGQxYzdhZGYzZGMwMmM1YiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzg4ZjAxYTI0NTRjNDJkNjhkMWM3YWRmM2RjMDJjNWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0NDUgS29yb25rYSBrb25pYWtvd3NrYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjI1OTI4MmRhZGM1NGVkMWI5YzA5NWYzZTQwNzYxMzQuc2V0Q29udGVudChodG1sX2M4OGYwMWEyNDU0YzQyZDY4ZDFjN2FkZjNkYzAyYzViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGRlNTM3MWRlMjExNGQyNzk1MzM4ZTI1YmE2YmU5ZGUuYmluZFBvcHVwKHBvcHVwXzYyNTkyODJkYWRjNTRlZDFiOWMwOTVmM2U0MDc2MTM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FiZDYxODYxMmQ0MjRjMTJhMmI1YjY5ZWMzMTIxYTk0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNTYyOTA1LDE5LjY0OTM3OTk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80NTQ5NWYwMmQ2NDY0ZGQ1YjhiMTMzMTZhYTBhMmU3MiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2FiZDYxODYxMmQ0MjRjMTJhMmI1YjY5ZWMzMTIxYTk0LnNldEljb24oaWNvbl80NTQ5NWYwMmQ2NDY0ZGQ1YjhiMTMzMTZhYTBhMmU3Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMzJiZTMwZjA4NDU0YzZmYjhhNDNlOGE2ZmIzNzNiZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMGUwNmYyNTBkYzc0NjE1YTQ4MmEzNGNkY2I1YTk5ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjBlMDZmMjUwZGM3NDYxNWE0ODJhMzRjZGNiNWE5OWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA1MDEgT3Jhd3NraSBQYXJrIEV0bm9ncmFmaWN6bnkgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMzJiZTMwZjA4NDU0YzZmYjhhNDNlOGE2ZmIzNzNiZi5zZXRDb250ZW50KGh0bWxfMjBlMDZmMjUwZGM3NDYxNWE0ODJhMzRjZGNiNWE5OWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYmQ2MTg2MTJkNDI0YzEyYTJiNWI2OWVjMzEyMWE5NC5iaW5kUG9wdXAocG9wdXBfMzMyYmUzMGYwODQ1NGM2ZmI4YTQzZThhNmZiMzczYmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzk2OGIyYmM0MjhiNDAzODhjYjYwNDA0MzA4MzU5M2IgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC43MTQzMzEsMTkuNDM5NTk4OTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2ViZGYxODEzMGE1OTRkMGViZTczZmRmMjIyZWFkMjA5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzk2OGIyYmM0MjhiNDAzODhjYjYwNDA0MzA4MzU5M2Iuc2V0SWNvbihpY29uX2ViZGYxODEzMGE1OTRkMGViZTczZmRmMjIyZWFkMjA5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ExNzY5NjE4Y2FmYzQ3NWNiZjc0NTc3YWQxNTI0ZDc5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY2YjAzYzA2MWE2MTRiOTQ4MjIyZjg4ZThmMmY1OTAzID0gJCgnPGRpdiBpZD0iaHRtbF82NmIwM2MwNjFhNjE0Yjk0ODIyMmY4OGU4ZjJmNTkwMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDUxMSBNdXpldW0gWnlnbXVudGEgS3Jhc2nFhHNraWVnbyB3IFrFgm90eW0gUG90b2t1IDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTE3Njk2MThjYWZjNDc1Y2JmNzQ1NzdhZDE1MjRkNzkuc2V0Q29udGVudChodG1sXzY2YjAzYzA2MWE2MTRiOTQ4MjIyZjg4ZThmMmY1OTAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzk2OGIyYmM0MjhiNDAzODhjYjYwNDA0MzA4MzU5M2IuYmluZFBvcHVwKHBvcHVwX2ExNzY5NjE4Y2FmYzQ3NWNiZjc0NTc3YWQxNTI0ZDc5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM0YTZlZTk1OTRkZjQ4NDNiZmQzMzc5MWJmNjc2YmY2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjkzNjg1LDE4Ljk2OTIyNjAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8yMjQ4MTllMzhiMTI0NDM3OGU0YzUwNGE0YmRmZDRjMyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzM0YTZlZTk1OTRkZjQ4NDNiZmQzMzc5MWJmNjc2YmY2LnNldEljb24oaWNvbl8yMjQ4MTllMzhiMTI0NDM3OGU0YzUwNGE0YmRmZDRjMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNDIzMzUzZjVjZTM0ZjE1YjVmOWQ4NTMwNTRiNTg5NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMGM2ZDQ4OWE3MzM0M2U0YTQzMzQ4YTcwNWVhYzdkNCA9ICQoJzxkaXYgaWQ9Imh0bWxfYzBjNmQ0ODlhNzMzNDNlNGE0MzM0OGE3MDVlYWM3ZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA1MzMgR8Ozcm5vxZtsxIVza2kgUGFyayBFdG5vZ3JhZmljem55IHcgQ2hvcnpvd2llIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjQyMzM1M2Y1Y2UzNGYxNWI1ZjlkODUzMDU0YjU4OTYuc2V0Q29udGVudChodG1sX2MwYzZkNDg5YTczMzQzZTRhNDMzNDhhNzA1ZWFjN2Q0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzRhNmVlOTU5NGRmNDg0M2JmZDMzNzkxYmY2NzZiZjYuYmluZFBvcHVwKHBvcHVwX2Y0MjMzNTNmNWNlMzRmMTViNWY5ZDg1MzA1NGI1ODk2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA3MWJhYWY5MTBjMDQ4ZGE5N2Y1ODdiMWMyZWY0YzIyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjkxMDk0LDE4Ljk4MDk4NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl84YWI1YzZmMWViYmQ0Njg3OGYxMjc0ZjViOGJlMDQ3MiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzA3MWJhYWY5MTBjMDQ4ZGE5N2Y1ODdiMWMyZWY0YzIyLnNldEljb24oaWNvbl84YWI1YzZmMWViYmQ0Njg3OGYxMjc0ZjViOGJlMDQ3Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNDUzNzJlZTkyOWI0OWZhYjk4NzExYTJjYmI4NDYzNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZWJlZDg3ZGY2ZTk0MjFjOWZlNDNkOGNkNjRkZjc3MSA9ICQoJzxkaXYgaWQ9Imh0bWxfZGViZWQ4N2RmNmU5NDIxYzlmZTQzZDhjZDY0ZGY3NzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA1MzQgR8Ozcm5vxZtsxIVza2kgUGFyayBFdG5vZ3JhZmljem55IHcgQ2hvcnpvd2llIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjQ1MzcyZWU5MjliNDlmYWI5ODcxMWEyY2JiODQ2MzQuc2V0Q29udGVudChodG1sX2RlYmVkODdkZjZlOTQyMWM5ZmU0M2Q4Y2Q2NGRmNzcxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDcxYmFhZjkxMGMwNDhkYTk3ZjU4N2IxYzJlZjRjMjIuYmluZFBvcHVwKHBvcHVwXzI0NTM3MmVlOTI5YjQ5ZmFiOTg3MTFhMmNiYjg0NjM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZjNGI2MjY5YTQ2MTQ5Yjg4YTFlMWFiZmFhMzYzMTVmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMzUxMzksMTkuMDk5MTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOGJhYjJkYzk0NmQzNGFlYjk4MDc4NTU2NDE0Yzc5MjYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82YzRiNjI2OWE0NjE0OWI4OGExZTFhYmZhYTM2MzE1Zi5zZXRJY29uKGljb25fOGJhYjJkYzk0NmQzNGFlYjk4MDc4NTU2NDE0Yzc5MjYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTgwMzRkN2Y0M2Q2NGI5NThlZWI5ZmU1ODJiZmU1YzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDFhOGRlYzExMTAwNDhiNWFmZWUwOTI4ZmVjZmQzMjcgPSAkKCc8ZGl2IGlkPSJodG1sXzAxYThkZWMxMTEwMDQ4YjVhZmVlMDkyOGZlY2ZkMzI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTQwIEtvxZtjacOzxYIgxZp3LiBEb3JvdHkgdyBCxJlkemluaWUg4oCTIEdyb2TFumN1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lODAzNGQ3ZjQzZDY0Yjk1OGVlYjlmZTU4MmJmZTVjOC5zZXRDb250ZW50KGh0bWxfMDFhOGRlYzExMTAwNDhiNWFmZWUwOTI4ZmVjZmQzMjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82YzRiNjI2OWE0NjE0OWI4OGExZTFhYmZhYTM2MzE1Zi5iaW5kUG9wdXAocG9wdXBfZTgwMzRkN2Y0M2Q2NGI5NThlZWI5ZmU1ODJiZmU1YzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODQ1YTIwNTE1OTQ1NGQwZWIzMTYxOTA4NmNhMTk2YmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS45NzgwNTMsMTguOTQwNzQ2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzAxN2I5NGQxYzY0ZTQxZDc4Zjk0ZjA5NmI4YWNhMGM3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODQ1YTIwNTE1OTQ1NGQwZWIzMTYxOTA4NmNhMTk2YmQuc2V0SWNvbihpY29uXzAxN2I5NGQxYzY0ZTQxZDc4Zjk0ZjA5NmI4YWNhMGM3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlkNmZkNzc3MGYxZTQxMDk4ZmEyYjM2ZThmZWM4ZTFiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYwYTZiY2M2MmNkYjQ2ODNhODM5NzdhZWMxZjE3YWE3ID0gJCgnPGRpdiBpZD0iaHRtbF82MGE2YmNjNjJjZGI0NjgzYTgzOTc3YWVjMWYxN2FhNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDU0NCBNdXpldW0gWmFta293ZSB3IFBzemN6eW5pZSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlkNmZkNzc3MGYxZTQxMDk4ZmEyYjM2ZThmZWM4ZTFiLnNldENvbnRlbnQoaHRtbF82MGE2YmNjNjJjZGI0NjgzYTgzOTc3YWVjMWYxN2FhNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg0NWEyMDUxNTk0NTRkMGViMzE2MTkwODZjYTE5NmJkLmJpbmRQb3B1cChwb3B1cF85ZDZmZDc3NzBmMWU0MTA5OGZhMmIzNmU4ZmVjOGUxYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83MWEwMjY0ODk5OWM0ODllYmRkZDJmZDljYmVjZmNiZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5Ljk3OTY3NywxOC45MzE3OTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzEwMmViMzc5OGUxNGI4MDlhNjhiODU3MjZhNzhiMTcgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83MWEwMjY0ODk5OWM0ODllYmRkZDJmZDljYmVjZmNiZC5zZXRJY29uKGljb25fYzEwMmViMzc5OGUxNGI4MDlhNjhiODU3MjZhNzhiMTcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2RkOTY0OTk3NGFjNGQyOGI3ODlmZTM3NGFhNzU1MjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTM5YmI1MTE1ZmVmNGNiMjhkMzc0MGRlNTBjYWI1OTUgPSAkKCc8ZGl2IGlkPSJodG1sXzEzOWJiNTExNWZlZjRjYjI4ZDM3NDBkZTUwY2FiNTk1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTQ3IFBva2F6b3dhIFphZ3JvZGEgxbt1YnLDs3cgdyBQc3pjenluaWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNkZDk2NDk5NzRhYzRkMjhiNzg5ZmUzNzRhYTc1NTI3LnNldENvbnRlbnQoaHRtbF8xMzliYjUxMTVmZWY0Y2IyOGQzNzQwZGU1MGNhYjU5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcxYTAyNjQ4OTk5YzQ4OWViZGRkMmZkOWNiZWNmY2JkLmJpbmRQb3B1cChwb3B1cF8zZGQ5NjQ5OTc0YWM0ZDI4Yjc4OWZlMzc0YWE3NTUyNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wOGE3NmUwZWFkNmI0ZWI1OTExNTJkYmViYjcyNGFlZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjI5Mjg0OSwxOC45OTI2MTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZGU5NDkzYjY4MmYxNGFlZDgzNTllNmUzMjM2NjM3MjggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wOGE3NmUwZWFkNmI0ZWI1OTExNTJkYmViYjcyNGFlZi5zZXRJY29uKGljb25fZGU5NDkzYjY4MmYxNGFlZDgzNTllNmUzMjM2NjM3MjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjQxNWVmYzkzYjI1NDM2NGEzNTExYjc3YTA2M2ZlNjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzg2YTgxYzBkMGU4NDdlZDlkZjIzYzliMDk4M2JmMDMgPSAkKCc8ZGl2IGlkPSJodG1sX2M4NmE4MWMwZDBlODQ3ZWQ5ZGYyM2M5YjA5ODNiZjAzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTUwIMWabMSFc2tpIE9ncsOzZCBab29sb2dpY3pueSB3IENob3J6b3dpZSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0MTVlZmM5M2IyNTQzNjRhMzUxMWI3N2EwNjNmZTY1LnNldENvbnRlbnQoaHRtbF9jODZhODFjMGQwZTg0N2VkOWRmMjNjOWIwOTgzYmYwMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA4YTc2ZTBlYWQ2YjRlYjU5MTE1MmRiZWJiNzI0YWVmLmJpbmRQb3B1cChwb3B1cF82NDE1ZWZjOTNiMjU0MzY0YTM1MTFiNzdhMDYzZmU2NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yOGZiNzU1MTA3NDQ0ZWZhOTNkOGMyZmNiY2ZkMzNjMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjc0OTU5MSwxOS4yNzM4NzMwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzY1NTQ2ZTQyYjRlNDk0MDgxNTMyYTQ5NDY4MTkzMDYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yOGZiNzU1MTA3NDQ0ZWZhOTNkOGMyZmNiY2ZkMzNjMS5zZXRJY29uKGljb25fYzY1NTQ2ZTQyYjRlNDk0MDgxNTMyYTQ5NDY4MTkzMDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmNiNThmMzAzMzFjNDI3ZGI4MjUxMTIxOGVlNjc1MjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjQ1OGVmODExMDc5NGE0ZWE5YzYzZjlkMmFkZDViMGIgPSAkKCc8ZGl2IGlkPSJodG1sX2Y0NThlZjgxMTA3OTRhNGVhOWM2M2Y5ZDJhZGQ1YjBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTgwIFphbWVrIEtyw7NsZXdza2kgdyBPbHN6dHluaWUgay4gQ3rEmXN0b2Nob3d5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mY2I1OGYzMDMzMWM0MjdkYjgyNTExMjE4ZWU2NzUyMC5zZXRDb250ZW50KGh0bWxfZjQ1OGVmODExMDc5NGE0ZWE5YzYzZjlkMmFkZDViMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yOGZiNzU1MTA3NDQ0ZWZhOTNkOGMyZmNiY2ZkMzNjMS5iaW5kUG9wdXAocG9wdXBfZmNiNThmMzAzMzFjNDI3ZGI4MjUxMTIxOGVlNjc1MjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzdhNzk3NWIwNDk3NGQ0ZTgwZTY1NTlhMDIyNDg3ZDkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4zMDA3NDEsMTkuNTk2MTc2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2E0OTI3MTliOWZkNjQ4MzY5OWJhODUzZDA0NTEyZGJkID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYzdhNzk3NWIwNDk3NGQ0ZTgwZTY1NTlhMDIyNDg3ZDkuc2V0SWNvbihpY29uX2E0OTI3MTliOWZkNjQ4MzY5OWJhODUzZDA0NTEyZGJkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RiNjk1M2UyMjcxNTQ4ZmRiZDQ0MWQ2MzFhMDZkYTUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY0NGZlYmU3YWM1NzRlYjA4NzM5ZTIyNWU3ZTY1YzMwID0gJCgnPGRpdiBpZD0iaHRtbF82NDRmZWJlN2FjNTc0ZWIwODczOWUyMjVlN2U2NWMzMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDU4MSBDaGF0YSBLb2NqYW5hIHcgUmFic3p0eW5pZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGI2OTUzZTIyNzE1NDhmZGJkNDQxZDYzMWEwNmRhNTMuc2V0Q29udGVudChodG1sXzY0NGZlYmU3YWM1NzRlYjA4NzM5ZTIyNWU3ZTY1YzMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzdhNzk3NWIwNDk3NGQ0ZTgwZTY1NTlhMDIyNDg3ZDkuYmluZFBvcHVwKHBvcHVwX2RiNjk1M2UyMjcxNTQ4ZmRiZDQ0MWQ2MzFhMDZkYTUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg0YzA0ZDhiMTU3NzRhMWU4NTg0YThlMWE2ZjQ0NmQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMDE4OTYzLDE5LjgwMjU0Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81OGFiNTc2NzNjMTA0MzQyOWYzNTMwMTE0YTExNGRiYyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzg0YzA0ZDhiMTU3NzRhMWU4NTg0YThlMWE2ZjQ0NmQ1LnNldEljb24oaWNvbl81OGFiNTc2NzNjMTA0MzQyOWYzNTMwMTE0YTExNGRiYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMjU0OTA1ZjI5Zjc0ZDAyYmM3YmQ1Nzg3OTYzNzhkNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYTJjYWZjNmI3ZWE0ZmE3YmUyZjM0YzYzYjUzMWQ1YiA9ICQoJzxkaXYgaWQ9Imh0bWxfZGEyY2FmYzZiN2VhNGZhN2JlMmYzNGM2M2I1MzFkNWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA1ODIgT3BhY3R3byBCZW5lZHlrdHluw7N3IHcgVHnFhGN1IOKAkyBLcmFrw7N3PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMjU0OTA1ZjI5Zjc0ZDAyYmM3YmQ1Nzg3OTYzNzhkNi5zZXRDb250ZW50KGh0bWxfZGEyY2FmYzZiN2VhNGZhN2JlMmYzNGM2M2I1MzFkNWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NGMwNGQ4YjE1Nzc0YTFlODU4NGE4ZTFhNmY0NDZkNS5iaW5kUG9wdXAocG9wdXBfMDI1NDkwNWYyOWY3NGQwMmJjN2JkNTc4Nzk2Mzc4ZDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzAwMDc2NzU5YjMxNDYyNjg1ZmQ4YjA4YzAxYTE3NGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4yNzc1MSwxOS41NjE1NTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fN2M0NjIwZTAxMTA5NDFjY2IyNmUzZDMzMmM5Zjg5NGYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83MDAwNzY3NTliMzE0NjI2ODVmZDhiMDhjMDFhMTc0Yi5zZXRJY29uKGljb25fN2M0NjIwZTAxMTA5NDFjY2IyNmUzZDMzMmM5Zjg5NGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDYyYjkwNWFjN2M4NDc3MzgwYzIyYjBmMTAyY2VlYTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTA2MDBkZTMwOWUyNDlkNzhkYWFkNDk3YWJmZWNlNDYgPSAkKCc8ZGl2IGlkPSJodG1sXzkwNjAwZGUzMDllMjQ5ZDc4ZGFhZDQ5N2FiZmVjZTQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTg1IE11emV1bSBBZnJ5a2FuaXN0eWN6bmUgdyBPbGt1c3p1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NjJiOTA1YWM3Yzg0NzczODBjMjJiMGYxMDJjZWVhMi5zZXRDb250ZW50KGh0bWxfOTA2MDBkZTMwOWUyNDlkNzhkYWFkNDk3YWJmZWNlNDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83MDAwNzY3NTliMzE0NjI2ODVmZDhiMDhjMDFhMTc0Yi5iaW5kUG9wdXAocG9wdXBfNDYyYjkwNWFjN2M4NDc3MzgwYzIyYjBmMTAyY2VlYTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2RiYTI3NmMyYTljNDNkNjg1ZTRkMmI5MmRkN2EyM2MgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4yOTk3MTYsMTkuNTkyNTgyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzc2ZmU0NzY0MWRkNzRlYmI4ZjhiMDg4OGFjOTI4MTA0ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfM2RiYTI3NmMyYTljNDNkNjg1ZTRkMmI5MmRkN2EyM2Muc2V0SWNvbihpY29uXzc2ZmU0NzY0MWRkNzRlYmI4ZjhiMDg4OGFjOTI4MTA0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiMDJlMTYwM2VjOTQxNmE5MzFhYzFmODM2NjkzNjRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZlZjNmZDUwZGIxYjQ5MWE4ODA2N2ZiZjM2ZjIyMGFmID0gJCgnPGRpdiBpZD0iaHRtbF82ZWYzZmQ1MGRiMWI0OTFhODgwNjdmYmYzNmYyMjBhZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDU4NiBaYW1layBSYWJzenR5bjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmIwMmUxNjAzZWM5NDE2YTkzMWFjMWY4MzY2OTM2NGIuc2V0Q29udGVudChodG1sXzZlZjNmZDUwZGIxYjQ5MWE4ODA2N2ZiZjM2ZjIyMGFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2RiYTI3NmMyYTljNDNkNjg1ZTRkMmI5MmRkN2EyM2MuYmluZFBvcHVwKHBvcHVwX2JiMDJlMTYwM2VjOTQxNmE5MzFhYzFmODM2NjkzNjRiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdlYWU0OWNhYTE1YzRjM2RhNzI0MzliOWM2OTQwMGY1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjc3NDc1LDE5LjU2MTI3M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lOTQ1ZjE0MDkwZmM0MDU4YWM5ODcwZDgwYWI4YWZmYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzdlYWU0OWNhYTE1YzRjM2RhNzI0MzliOWM2OTQwMGY1LnNldEljb24oaWNvbl9lOTQ1ZjE0MDkwZmM0MDU4YWM5ODcwZDgwYWI4YWZmYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYWFmZDg0NWNiNDc0NGM2YTM4Y2U4MTY3YTFiMjY0MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NjI5ZThhYjgzZjg0NjU0YjhjMDI1ZmEzNTViNDI2MCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzYyOWU4YWI4M2Y4NDY1NGI4YzAyNWZhMzU1YjQyNjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA1ODcgS29sZWtjamEgbWluZXJhxYLDs3cgWmllbWkgT2xrdXNraWVqIGkgU2thbWllbmlhxYJvxZtjaSBKdXJ5IEtyYWtvd3Nrby1DesSZc3RvY2hvd3NraWVqPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYWFmZDg0NWNiNDc0NGM2YTM4Y2U4MTY3YTFiMjY0MS5zZXRDb250ZW50KGh0bWxfNzYyOWU4YWI4M2Y4NDY1NGI4YzAyNWZhMzU1YjQyNjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83ZWFlNDljYWExNWM0YzNkYTcyNDM5YjljNjk0MDBmNS5iaW5kUG9wdXAocG9wdXBfM2FhZmQ4NDVjYjQ3NDRjNmEzOGNlODE2N2ExYjI2NDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDE4Njc3NGZjZGQwNGNiZGE2ZjU3ZTczNDY0MmNhYTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4zMzI4MTYsMTkuNjIyOTA0MDAwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzlkZWM1NDIyM2Y4MzQyMWI5YWZmMGIzMzVlZWY3ZWNmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDE4Njc3NGZjZGQwNGNiZGE2ZjU3ZTczNDY0MmNhYTMuc2V0SWNvbihpY29uXzlkZWM1NDIyM2Y4MzQyMWI5YWZmMGIzMzVlZWY3ZWNmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzczZjVkZmQ4YjIyZDRmZjZiMGJhMmM3YmMzMmM0ZmE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUyM2MwMmNlNGNjYzQ4NDY4NmNkNTFmNDFiZGZjZGRhID0gJCgnPGRpdiBpZD0iaHRtbF81MjNjMDJjZTRjY2M0ODQ2ODZjZDUxZjQxYmRmY2RkYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDU4OCBSZXplcndhdCBQcnp5cm9keSBQYXp1cmVrIGsuIE9sa3VzemE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzczZjVkZmQ4YjIyZDRmZjZiMGJhMmM3YmMzMmM0ZmE4LnNldENvbnRlbnQoaHRtbF81MjNjMDJjZTRjY2M0ODQ2ODZjZDUxZjQxYmRmY2RkYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAxODY3NzRmY2RkMDRjYmRhNmY1N2U3MzQ2NDJjYWEzLmJpbmRQb3B1cChwb3B1cF83M2Y1ZGZkOGIyMmQ0ZmY2YjBiYTJjN2JjMzJjNGZhOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mOGY5ZWY5MzY0NTA0NThhODUyMmNiNTM2NDNjMzMxMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjExNjgyNywxOC45NzgwMjM5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNThlYTMyOTc3NWVmNDFjN2FiZDVhODUwODQ1Y2FiNzcgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mOGY5ZWY5MzY0NTA0NThhODUyMmNiNTM2NDNjMzMxMi5zZXRJY29uKGljb25fNThlYTMyOTc3NWVmNDFjN2FiZDVhODUwODQ1Y2FiNzcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTVlZjUwNjIzODdjNGMwNDkxMzM1OGUwYzBkZTI0OGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODI0NzZlZmY2MmJmNDUwYTk3NGJjOTNlM2JhMTI1YTggPSAkKCc8ZGl2IGlkPSJodG1sXzgyNDc2ZWZmNjJiZjQ1MGE5NzRiYzkzZTNiYTEyNWE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTg5IE11emV1bSBNaW5pYXR1cm93ZWogU3p0dWtpIFByb2Zlc2pvbmFsbmVqIEguSi4gRG9taW5pYWs8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE1ZWY1MDYyMzg3YzRjMDQ5MTMzNThlMGMwZGUyNDhlLnNldENvbnRlbnQoaHRtbF84MjQ3NmVmZjYyYmY0NTBhOTc0YmM5M2UzYmExMjVhOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y4ZjllZjkzNjQ1MDQ1OGE4NTIyY2I1MzY0M2MzMzEyLmJpbmRQb3B1cChwb3B1cF8xNWVmNTA2MjM4N2M0YzA0OTEzMzU4ZTBjMGRlMjQ4ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hYjgwZjRjYTE3YTA0ZmVkYjdhNDFjN2FlMWViMTQyZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjI4ODMxNywxOC45MjUzNTQwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOGRlYmJlMzhiYWU5NDI3NGJhOWVkODhmMjEwMzVkMGUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hYjgwZjRjYTE3YTA0ZmVkYjdhNDFjN2FlMWViMTQyZi5zZXRJY29uKGljb25fOGRlYmJlMzhiYWU5NDI3NGJhOWVkODhmMjEwMzVkMGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2I0OGZjYjE0ZWZjNDNmOThkYTc5NzQxYmYwYjIxN2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDVmYjdjZTA5NjVmNDQ1YzkzMjE0ZDE3OGMyMWZmNzMgPSAkKCc8ZGl2IGlkPSJodG1sX2Q1ZmI3Y2UwOTY1ZjQ0NWM5MzIxNGQxNzhjMjFmZjczIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTkwIE11emV1bSBQb3dzdGHFhCDFmmzEhXNraWNoIHcgxZp3acSZdG9jaMWCb3dpY2FjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2I0OGZjYjE0ZWZjNDNmOThkYTc5NzQxYmYwYjIxN2Iuc2V0Q29udGVudChodG1sX2Q1ZmI3Y2UwOTY1ZjQ0NWM5MzIxNGQxNzhjMjFmZjczKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWI4MGY0Y2ExN2EwNGZlZGI3YTQxYzdhZTFlYjE0MmYuYmluZFBvcHVwKHBvcHVwXzNiNDhmY2IxNGVmYzQzZjk4ZGE3OTc0MWJmMGIyMTdiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q4MTUwNDQ1Y2Q1OTQ4N2RhYWI1ZmJhMDFjNTM5NjJhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDM4ODA1LDE4LjkwMDcyMjAwMDAwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82NTM3ZGU0NjY3NDQ0M2RkOTNjNTA5MjM4YWM1NjYwMiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2Q4MTUwNDQ1Y2Q1OTQ4N2RhYWI1ZmJhMDFjNTM5NjJhLnNldEljb24oaWNvbl82NTM3ZGU0NjY3NDQ0M2RkOTNjNTA5MjM4YWM1NjYwMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZjM5ZGQ0MDlhMjA0NDc3YmUxZjQ5MWFkNjE2OGEwNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YTIzOGQzNDJhZjY0YWIyODMwMTQ2YTc4MzRhM2I4ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNmEyMzhkMzQyYWY2NGFiMjgzMDE0NmE3ODM0YTNiOGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA1OTEgQ2VudHJ1bSBLdWx0dXJ5IMWabMSFc2tpZWogdyBOYWtsZSDFmmzEhXNraW08L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmMzlkZDQwOWEyMDQ0NzdiZTFmNDkxYWQ2MTY4YTA1LnNldENvbnRlbnQoaHRtbF82YTIzOGQzNDJhZjY0YWIyODMwMTQ2YTc4MzRhM2I4ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q4MTUwNDQ1Y2Q1OTQ4N2RhYWI1ZmJhMDFjNTM5NjJhLmJpbmRQb3B1cChwb3B1cF9kZjM5ZGQ0MDlhMjA0NDc3YmUxZjQ5MWFkNjE2OGEwNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83YWNlZGFiODQ1YTE0MmZjODBkOGFkZTg4YmM4ZWYwNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjEzMjQ2OCwxOC44NDE4MzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZGE1NDI4ZDE0ZGVkNDA2ZGJhMTYzNmU2OTFlMjY1MWMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83YWNlZGFiODQ1YTE0MmZjODBkOGFkZTg4YmM4ZWYwNS5zZXRJY29uKGljb25fZGE1NDI4ZDE0ZGVkNDA2ZGJhMTYzNmU2OTFlMjY1MWMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzM2MDE1ZjFkZjA5NDJlN2FiZWE1NGQ3YTM2YTUwZmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmMwNDcyODllODhjNDA5ZmJlNjhjNTc5NTY3NTVjMjYgPSAkKCc8ZGl2IGlkPSJodG1sX2ZjMDQ3Mjg5ZTg4YzQwOWZiZTY4YzU3OTU2NzU1YzI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTkyIE11emV1bSBFbmVyZ2V0eWtpIHcgxYFhemlza2FjaCBHw7NybnljaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzM2MDE1ZjFkZjA5NDJlN2FiZWE1NGQ3YTM2YTUwZmMuc2V0Q29udGVudChodG1sX2ZjMDQ3Mjg5ZTg4YzQwOWZiZTY4YzU3OTU2NzU1YzI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2FjZWRhYjg0NWExNDJmYzgwZDhhZGU4OGJjOGVmMDUuYmluZFBvcHVwKHBvcHVwXzMzNjAxNWYxZGYwOTQyZTdhYmVhNTRkN2EzNmE1MGZjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA4NmVhYjIwMWI5NzRjZWY4NzY1M2RkMTgwMTIyM2E2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjkwNDg2LDE4Ljk5MTgwM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80M2NiMmZmZjZjYjc0NGNjOGIxYTRiNjg0M2YzOGZkNCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzA4NmVhYjIwMWI5NzRjZWY4NzY1M2RkMTgwMTIyM2E2LnNldEljb24oaWNvbl80M2NiMmZmZjZjYjc0NGNjOGIxYTRiNjg0M2YzOGZkNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NWM4YTcxNDQxMDU0NjMwOTFiYWQzZTBlZGU5MjM1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMWMzYzc2N2FhYjg0NzcwYTMxOGViNWRlYjkwMzkyZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZjFjM2M3NjdhYWI4NDc3MGEzMThlYjVkZWI5MDM5MmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA1OTMgUGxhbmV0YXJpdW0gaSBPYnNlcndhdG9yaXVtIEFzdHJvbm9taWN6bmUgdyBDaG9yem93aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY1YzhhNzE0NDEwNTQ2MzA5MWJhZDNlMGVkZTkyMzU3LnNldENvbnRlbnQoaHRtbF9mMWMzYzc2N2FhYjg0NzcwYTMxOGViNWRlYjkwMzkyZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA4NmVhYjIwMWI5NzRjZWY4NzY1M2RkMTgwMTIyM2E2LmJpbmRQb3B1cChwb3B1cF82NWM4YTcxNDQxMDU0NjMwOTFiYWQzZTBlZGU5MjM1Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wOWRkZTllNTllM2I0YmFkODgxZWJjNDQ0ZjA5ZTVjZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjIyOTY5MSwxOS4xNTc0NzRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjBkNjYzMjM0ZWFjNDExMmIyYWFlNmIyZGY2ZjA1ZGQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wOWRkZTllNTllM2I0YmFkODgxZWJjNDQ0ZjA5ZTVjZS5zZXRJY29uKGljb25fNjBkNjYzMjM0ZWFjNDExMmIyYWFlNmIyZGY2ZjA1ZGQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjY5MDJiNGNkZjBlNGNjYWI4YjhkNjFjYjI4NjA1ZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTY1MjAzYmIzMDcyNDcxYmFlMTJkYjEyYWZkODk1MjkgPSAkKCc8ZGl2IGlkPSJodG1sX2E2NTIwM2JiMzA3MjQ3MWJhZTEyZGIxMmFmZDg5NTI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTk0IE15c8WCb3dpY2Ug4oCTIFRyw7Nqa8SFdCBUcnplY2ggQ2VzYXJ6eTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjY5MDJiNGNkZjBlNGNjYWI4YjhkNjFjYjI4NjA1ZjAuc2V0Q29udGVudChodG1sX2E2NTIwM2JiMzA3MjQ3MWJhZTEyZGIxMmFmZDg5NTI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDlkZGU5ZTU5ZTNiNGJhZDg4MWViYzQ0NGYwOWU1Y2UuYmluZFBvcHVwKHBvcHVwX2Y2OTAyYjRjZGYwZTRjY2FiOGI4ZDYxY2IyODYwNWYwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJiNzVkNzE4NDhkOTQ4NmE5YjdjMzliYjM4YmNiYTdkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjUzMDU4LDE5LjAyMzQ3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzRmNjdkZDkwMTRkNTQzZWE5ZmExN2NkMWI2ZTZhNmQ2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMmI3NWQ3MTg0OGQ5NDg2YTliN2MzOWJiMzhiY2JhN2Quc2V0SWNvbihpY29uXzRmNjdkZDkwMTRkNTQzZWE5ZmExN2NkMWI2ZTZhNmQ2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU4ZDZjZTkyODE1ODRkOGM5MWU5ODViOTY2MTA2YTkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZhYjE0YzMyODIzZjQ3Y2RhMzViZWYzNTBlZDU0YjU1ID0gJCgnPGRpdiBpZD0iaHRtbF82YWIxNGMzMjgyM2Y0N2NkYTM1YmVmMzUwZWQ1NGI1NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDU5NSBNdXpldW0gSGlzdG9yaWkgS29tcHV0ZXLDs3cgaSBJbmZvcm1hdHlraSB3IEthdG93aWNhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU4ZDZjZTkyODE1ODRkOGM5MWU5ODViOTY2MTA2YTkxLnNldENvbnRlbnQoaHRtbF82YWIxNGMzMjgyM2Y0N2NkYTM1YmVmMzUwZWQ1NGI1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJiNzVkNzE4NDhkOTQ4NmE5YjdjMzliYjM4YmNiYTdkLmJpbmRQb3B1cChwb3B1cF81OGQ2Y2U5MjgxNTg0ZDhjOTFlOTg1Yjk2NjEwNmE5MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jNTA1NTliZTk1OTI0MWJhOTk2NGNmZjRiMDc3MDVjYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjI1MzE0MiwxOS4wMjEzNzY5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYWE3MDIzMTUwODc0NDY3OTk4ZGIyMWQ2MzRmMjI1MWUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jNTA1NTliZTk1OTI0MWJhOTk2NGNmZjRiMDc3MDVjYS5zZXRJY29uKGljb25fYWE3MDIzMTUwODc0NDY3OTk4ZGIyMWQ2MzRmMjI1MWUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODVlMzRhNDAwNTk2NGZmYWJjZTExZDdjYjAxYTM2NjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDhmOWIxODY3MTg5NDZiNmIxYTQ3NTU2YzBiMzJkNmEgPSAkKCc8ZGl2IGlkPSJodG1sXzQ4ZjliMTg2NzE4OTQ2YjZiMWE0NzU1NmMwYjMyZDZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTk2IFJvemfFgm/Fm25pYSBQb2xza2llZ28gUmFkaWEgdyBLYXRvd2ljYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NWUzNGE0MDA1OTY0ZmZhYmNlMTFkN2NiMDFhMzY2OC5zZXRDb250ZW50KGh0bWxfNDhmOWIxODY3MTg5NDZiNmIxYTQ3NTU2YzBiMzJkNmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jNTA1NTliZTk1OTI0MWJhOTk2NGNmZjRiMDc3MDVjYS5iaW5kUG9wdXAocG9wdXBfODVlMzRhNDAwNTk2NGZmYWJjZTExZDdjYjAxYTM2NjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTI4MDM3ZjRhMDhmNDJjZmEyMTFlNGJkN2UxZDUyNjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4zMjM2NjQsMTkuMTMyNTQxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzRjOWU2NzNjNzE3MzQ1OTc5MTU0ZDliMThjYWFjZTYzID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTI4MDM3ZjRhMDhmNDJjZmEyMTFlNGJkN2UxZDUyNjguc2V0SWNvbihpY29uXzRjOWU2NzNjNzE3MzQ1OTc5MTU0ZDliMThjYWFjZTYzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MzYWI0ZTg2YTNiNzQyNzVhZWJjMThmNTllNGU0NjkzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUwNDZiYmZmYmI4YjRlMzg5YmU3NzNjYjY5YjcxNDNlID0gJCgnPGRpdiBpZD0iaHRtbF81MDQ2YmJmZmJiOGI0ZTM4OWJlNzczY2I2OWI3MTQzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDU5NyBEb20gTW9kbGl0d3kg4oCeTWl6cmFjaGnigJ0gdyBCxJlkemluaWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MzYWI0ZTg2YTNiNzQyNzVhZWJjMThmNTllNGU0NjkzLnNldENvbnRlbnQoaHRtbF81MDQ2YmJmZmJiOGI0ZTM4OWJlNzczY2I2OWI3MTQzZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2UyODAzN2Y0YTA4ZjQyY2ZhMjExZTRiZDdlMWQ1MjY4LmJpbmRQb3B1cChwb3B1cF9jM2FiNGU4NmEzYjc0Mjc1YWViYzE4ZjU5ZTRlNDY5Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80YzI1ZjYxMjU3MDk0YzQyYTM4MWMwYjc1ZTUyOWZjMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjMyNTgwOCwxOS4xMzM3MTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMWNmNjQzNGVjOWFmNDU3YzlkYWY1MzFmZjZmOTk3NjEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80YzI1ZjYxMjU3MDk0YzQyYTM4MWMwYjc1ZTUyOWZjMy5zZXRJY29uKGljb25fMWNmNjQzNGVjOWFmNDU3YzlkYWY1MzFmZjZmOTk3NjEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWU3N2RjMjU2YjhmNDBkM2I2NWExOGYwNTQxNDU4ODcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjUxMzk0ODEzMmFiNDk0NTkzYWI2MjFhYjhiNDhkNDkgPSAkKCc8ZGl2IGlkPSJodG1sX2I1MTM5NDgxMzJhYjQ5NDU5M2FiNjIxYWI4YjQ4ZDQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTk4IFBvZHppZW1pYSBCxJlkemnFhHNraWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFlNzdkYzI1NmI4ZjQwZDNiNjVhMThmMDU0MTQ1ODg3LnNldENvbnRlbnQoaHRtbF9iNTEzOTQ4MTMyYWI0OTQ1OTNhYjYyMWFiOGI0OGQ0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRjMjVmNjEyNTcwOTRjNDJhMzgxYzBiNzVlNTI5ZmMzLmJpbmRQb3B1cChwb3B1cF8xZTc3ZGMyNTZiOGY0MGQzYjY1YTE4ZjA1NDE0NTg4Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNmNiNjVlNTcyZDk0ZWJmODA0OGExMWFkOTE0YjM0OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjMyODc0NSwxOS4xMjM5MjRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZjBhMmNjY2RiODM3NGZhYWE4ZWQ3ODkxMjYzNTc1YmUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yNmNiNjVlNTcyZDk0ZWJmODA0OGExMWFkOTE0YjM0OS5zZXRJY29uKGljb25fZjBhMmNjY2RiODM3NGZhYWE4ZWQ3ODkxMjYzNTc1YmUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTAwOGVmODBhYjFkNDI0MGI4OTQ2Y2YwMjZiOWJiYzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTkxYTQ2ZTcwZWU3NGViNTkxY2FkYjVmNDFlOGRjZjQgPSAkKCc8ZGl2IGlkPSJodG1sX2E5MWE0NmU3MGVlNzRlYjU5MWNhZGI1ZjQxZThkY2Y0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNTk5IFBhxYJhYyBNaWVyb3N6ZXdza2ljaCB3IELEmWR6aW5pZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTAwOGVmODBhYjFkNDI0MGI4OTQ2Y2YwMjZiOWJiYzMuc2V0Q29udGVudChodG1sX2E5MWE0NmU3MGVlNzRlYjU5MWNhZGI1ZjQxZThkY2Y0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjZjYjY1ZTU3MmQ5NGViZjgwNDhhMTFhZDkxNGIzNDkuYmluZFBvcHVwKHBvcHVwX2EwMDhlZjgwYWIxZDQyNDBiODk0NmNmMDI2YjliYmMzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y5MDc1MzdkODQxNTRlMjViYTNhMmNhMzAwNmU3NTgxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMzI3MTcsMTkuMTI5MDU0OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzNlMGI4ZjY3MmFlZTRlMzI5ZmQ4OWIyOTBmZDU5YjdiID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZjkwNzUzN2Q4NDE1NGUyNWJhM2EyY2EzMDA2ZTc1ODEuc2V0SWNvbihpY29uXzNlMGI4ZjY3MmFlZTRlMzI5ZmQ4OWIyOTBmZDU5YjdiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA3NjIzN2FjZGRjOTQxOGNiNmYwZjIwMDFjMGIwNDkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0MjlmMjBlOWM2ZjQ1MmE4YWMyMWJiNjZlMGIwMDE4ID0gJCgnPGRpdiBpZD0iaHRtbF9iNDI5ZjIwZTljNmY0NTJhOGFjMjFiYjY2ZTBiMDAxOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDYwMCBaYW1layB3IELEmWR6aW5pZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDc2MjM3YWNkZGM5NDE4Y2I2ZjBmMjAwMWMwYjA0OTEuc2V0Q29udGVudChodG1sX2I0MjlmMjBlOWM2ZjQ1MmE4YWMyMWJiNjZlMGIwMDE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjkwNzUzN2Q4NDE1NGUyNWJhM2EyY2EzMDA2ZTc1ODEuYmluZFBvcHVwKHBvcHVwXzA3NjIzN2FjZGRjOTQxOGNiNmYwZjIwMDFjMGIwNDkxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE0NTJmZjdlZWI5MTQ1ZTg5ZTEzZjQzZjU3ZGRkNjVhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjg5MTM3LDE4Ljc5MTgwM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9mNWY4M2FhNGM4Zjc0MzY5YTRkODA3ODJkZDNkZGE4ZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzE0NTJmZjdlZWI5MTQ1ZTg5ZTEzZjQzZjU3ZGRkNjVhLnNldEljb24oaWNvbl9mNWY4M2FhNGM4Zjc0MzY5YTRkODA3ODJkZDNkZGE4Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMGQwYjM1MWE5MzU0ZmU1OTBiZWRiZGViYjU4Zjc4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZjFlZmRjZTgwYjQ0ZWNiOTdmYzNlMjhmNGUwYjY1MCA9ICQoJzxkaXYgaWQ9Imh0bWxfZGYxZWZkY2U4MGI0NGVjYjk3ZmMzZTI4ZjRlMGI2NTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2MDEgWmFieXRrb3dhIEtvcGFsbmlhIFfEmWdsYSBLYW1pZW5uZWdvIEd1aWRvIHcgWmFicnp1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMGQwYjM1MWE5MzU0ZmU1OTBiZWRiZGViYjU4Zjc4MC5zZXRDb250ZW50KGh0bWxfZGYxZWZkY2U4MGI0NGVjYjk3ZmMzZTI4ZjRlMGI2NTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xNDUyZmY3ZWViOTE0NWU4OWUxM2Y0M2Y1N2RkZDY1YS5iaW5kUG9wdXAocG9wdXBfZjBkMGIzNTFhOTM1NGZlNTkwYmVkYmRlYmI1OGY3ODApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjQ1ZmFiNDI1NTUzNGE4NmE2Yzc1MTFkZWFhMjM4NmUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC40MjU1OTUsMTguODQ5OTcwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2UxNDYyNmQ2OWJkMzRiYWE5M2NlMGU4YWEwZTA2OGY3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjQ1ZmFiNDI1NTUzNGE4NmE2Yzc1MTFkZWFhMjM4NmUuc2V0SWNvbihpY29uX2UxNDYyNmQ2OWJkMzRiYWE5M2NlMGU4YWEwZTA2OGY3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI2ODY0NzI3NzA2ZjRlZjk4N2I4MWRmMzcyYzkwOTg3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc2NzkxNGY3NDM4YjRjZWVhNjVhMDk0NzY1Y2YwYWNlID0gJCgnPGRpdiBpZD0iaHRtbF83Njc5MTRmNzQzOGI0Y2VlYTY1YTA5NDc2NWNmMGFjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDYwMiBaYWJ5dGtvd2EgS29wYWxuaWEgU3JlYnJhIHcgVGFybm93c2tpY2ggR8OzcmFjaCAgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNjg2NDcyNzcwNmY0ZWY5ODdiODFkZjM3MmM5MDk4Ny5zZXRDb250ZW50KGh0bWxfNzY3OTE0Zjc0MzhiNGNlZWE2NWEwOTQ3NjVjZjBhY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NDVmYWI0MjU1NTM0YTg2YTZjNzUxMWRlYWEyMzg2ZS5iaW5kUG9wdXAocG9wdXBfMjY4NjQ3Mjc3MDZmNGVmOTg3YjgxZGYzNzJjOTA5ODcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDkzNTY2YWY1MzQ3NDVmMGE5MWI5N2Y2MjIxNWM4ODAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC40Mjk5OSwxOC43OTk5NjQwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNDI3NGZkZWJlNDMwNDg3ZTg0YzBjODZjZmZlYmUwZGMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wOTM1NjZhZjUzNDc0NWYwYTkxYjk3ZjYyMjE1Yzg4MC5zZXRJY29uKGljb25fNDI3NGZkZWJlNDMwNDg3ZTg0YzBjODZjZmZlYmUwZGMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzA2YzhkNmYzNjEwNGY3Mzk3NGE0NGIxOTcwZDc1NmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDg3OThhYWU3YjdkNGQ2ZGI3Njk0MDhhY2U1YmVkNDQgPSAkKCc8ZGl2IGlkPSJodG1sX2Q4Nzk4YWFlN2I3ZDRkNmRiNzY5NDA4YWNlNWJlZDQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjAzIFN6dG9sbmlhIEN6YXJuZWdvIFBzdHLEhWdhIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzA2YzhkNmYzNjEwNGY3Mzk3NGE0NGIxOTcwZDc1NmUuc2V0Q29udGVudChodG1sX2Q4Nzk4YWFlN2I3ZDRkNmRiNzY5NDA4YWNlNWJlZDQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDkzNTY2YWY1MzQ3NDVmMGE5MWI5N2Y2MjIxNWM4ODAuYmluZFBvcHVwKHBvcHVwXzMwNmM4ZDZmMzYxMDRmNzM5NzRhNDRiMTk3MGQ3NTZlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU5YmJlMTYxNmRmNjRiZmRhMTU2ZWRiMTc0ZWQ1Y2ExID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMzA3NjM1LDE5LjA2NzE2OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zMGExODNhZDNmNzA0MGJjOGE5ODFlZmQ3NTc4MjJkOCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzU5YmJlMTYxNmRmNjRiZmRhMTU2ZWRiMTc0ZWQ1Y2ExLnNldEljb24oaWNvbl8zMGExODNhZDNmNzA0MGJjOGE5ODFlZmQ3NTc4MjJkOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYzUzMjFjMGU5MjA0Mzg2OGJkM2UwYTgyMGFjNTgxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZWM3NGQyZjg3M2I0ZGZlOWI0NGIzNGU5OTI0ZjI0MCA9ICQoJzxkaXYgaWQ9Imh0bWxfNmVjNzRkMmY4NzNiNGRmZTliNDRiMzRlOTkyNGYyNDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2MDUgR2FsZXJpYSBTenR1a2kgV3Nww7PFgmN6ZXNuZWog4oCeRWxla3Ryb3duaWHigJ0gdyBDemVsYWR6aTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2M1MzIxYzBlOTIwNDM4NjhiZDNlMGE4MjBhYzU4MTYuc2V0Q29udGVudChodG1sXzZlYzc0ZDJmODczYjRkZmU5YjQ0YjM0ZTk5MjRmMjQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTliYmUxNjE2ZGY2NGJmZGExNTZlZGIxNzRlZDVjYTEuYmluZFBvcHVwKHBvcHVwXzNjNTMyMWMwZTkyMDQzODY4YmQzZTBhODIwYWM1ODE2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzIyZWY1ZDQyNTc0ZDQ3NzI5NGU0ZTBjN2E0NTljNjNhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjI4MDc1LDE5LjE0NDgyMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl83NTAyZmFhNTYyODA0YzIxOTk0NDFjYWIwODNmYTQxZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzIyZWY1ZDQyNTc0ZDQ3NzI5NGU0ZTBjN2E0NTljNjNhLnNldEljb24oaWNvbl83NTAyZmFhNTYyODA0YzIxOTk0NDFjYWIwODNmYTQxZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZTQ1YWViOWVmZDY0Y2U4ODIwM2NkOGZiY2IzMWExOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ODhlYWU4ZTJhZmQ0ZmRjYjIxNjEzMTZkNzMxM2E2YSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzg4ZWFlOGUyYWZkNGZkY2IyMTYxMzE2ZDczMTNhNmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2MDcgTXV6ZXVtIE1pYXN0YSBNeXPFgm93aWNlIOKAkyBNeXPFgm93aWNraSBaZWdhciBTdHJlZm93eTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmU0NWFlYjllZmQ2NGNlODgyMDNjZDhmYmNiMzFhMTkuc2V0Q29udGVudChodG1sXzc4OGVhZThlMmFmZDRmZGNiMjE2MTMxNmQ3MzEzYTZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjJlZjVkNDI1NzRkNDc3Mjk0ZTRlMGM3YTQ1OWM2M2EuYmluZFBvcHVwKHBvcHVwXzJlNDVhZWI5ZWZkNjRjZTg4MjAzY2Q4ZmJjYjMxYTE5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRkMTJmNTVkZGZlZjQxZjRhMWI5N2E0MmM5MDg3OWU1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjM2ODk0LDE5LjE0MzgwNzAwMDAwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82YWFlZDkxZDA0ODk0YjFmYjQ4NGIzMTgxN2E4YWZjYyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzRkMTJmNTVkZGZlZjQxZjRhMWI5N2E0MmM5MDg3OWU1LnNldEljb24oaWNvbl82YWFlZDkxZDA0ODk0YjFmYjQ4NGIzMTgxN2E4YWZjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNTQ5MDhlYjViZjM0NGVhOTdjYmNiMDllMGU4NmVmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNGU1ZGIzZDcwNTg0NWY5OWEwMDdlNzFmNDA1MDMwMyA9ICQoJzxkaXYgaWQ9Imh0bWxfMzRlNWRiM2Q3MDU4NDVmOTlhMDA3ZTcxZjQwNTAzMDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2MDggRGF3bmEgU3RhY2phIEVtaWdyYWN5am5hIHcgTXlzxYJvd2ljYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNTQ5MDhlYjViZjM0NGVhOTdjYmNiMDllMGU4NmVmNy5zZXRDb250ZW50KGh0bWxfMzRlNWRiM2Q3MDU4NDVmOTlhMDA3ZTcxZjQwNTAzMDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80ZDEyZjU1ZGRmZWY0MWY0YTFiOTdhNDJjOTA4NzllNS5iaW5kUG9wdXAocG9wdXBfYjU0OTA4ZWI1YmYzNDRlYTk3Y2JjYjA5ZTBlODZlZjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjI0Yzc4NjRjNmFmNDcyYjkyNjNiODM2Mjk0MGFiMzMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4yNDI0NTYsMTkuMTQxMjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZWY4MDU0ODljYWE2NDFlZGJiYzI2NzUwOGRjMzc3ODAgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iMjRjNzg2NGM2YWY0NzJiOTI2M2I4MzYyOTQwYWIzMy5zZXRJY29uKGljb25fZWY4MDU0ODljYWE2NDFlZGJiYzI2NzUwOGRjMzc3ODApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTFmZDZiMzE1NTc5NGQ1NWJjM2I4YzUxYmU0ZTcxNjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjQzNzRmYmFlYzA2NGM2ZGEwNjA1YzVkOTBkNzQ2MDMgPSAkKCc8ZGl2IGlkPSJodG1sX2I0Mzc0ZmJhZWMwNjRjNmRhMDYwNWM1ZDkwZDc0NjAzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjA5IEthcGxpY3prYSDFm3cuIEphbmEgQ2hyemNpY2llbGEgdyBNeXPFgm93aWNhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkxZmQ2YjMxNTU3OTRkNTViYzNiOGM1MWJlNGU3MTY2LnNldENvbnRlbnQoaHRtbF9iNDM3NGZiYWVjMDY0YzZkYTA2MDVjNWQ5MGQ3NDYwMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IyNGM3ODY0YzZhZjQ3MmI5MjYzYjgzNjI5NDBhYjMzLmJpbmRQb3B1cChwb3B1cF85MWZkNmIzMTU1Nzk0ZDU1YmMzYjhjNTFiZTRlNzE2Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYjMwMTYxMWJjZWM0YTViOGY5ZWFmOWJmMjY4MWM2OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjIyNzM3MywxOS4xNDUxMzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMjIxZmRlY2MxNzk2NDgzMDg5OGRlYzQ4OTdjNDFjNmEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kYjMwMTYxMWJjZWM0YTViOGY5ZWFmOWJmMjY4MWM2OS5zZXRJY29uKGljb25fMjIxZmRlY2MxNzk2NDgzMDg5OGRlYzQ4OTdjNDFjNmEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTJiNjk1ZWNiOWIxNDY2MmIwZTE3OTY0ZGRjNTZhODIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWRjYzdmODU0MzkwNDViMDhiOGY0YjdlNmMxZWIwZTMgPSAkKCc8ZGl2IGlkPSJodG1sXzlkY2M3Zjg1NDM5MDQ1YjA4YjhmNGI3ZTZjMWViMGUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjEwIENlbnRyYWxuZSBNdXpldW0gUG/FvGFybmljdHdhIHcgTXlzxYJvd2ljYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MmI2OTVlY2I5YjE0NjYyYjBlMTc5NjRkZGM1NmE4Mi5zZXRDb250ZW50KGh0bWxfOWRjYzdmODU0MzkwNDViMDhiOGY0YjdlNmMxZWIwZTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kYjMwMTYxMWJjZWM0YTViOGY5ZWFmOWJmMjY4MWM2OS5iaW5kUG9wdXAocG9wdXBfOTJiNjk1ZWNiOWIxNDY2MmIwZTE3OTY0ZGRjNTZhODIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTUxOWNkZmZlMzBjNDFhOGIyN2FkYzU3ZWM1MDYxMjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4yNDM4NDQsMTguOTg5NTgzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2I4MzhkNThjN2FiYjQ0MzI5YzkzNTE2YmY2MzE4ZGFiID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOTUxOWNkZmZlMzBjNDFhOGIyN2FkYzU3ZWM1MDYxMjIuc2V0SWNvbihpY29uX2I4MzhkNThjN2FiYjQ0MzI5YzkzNTE2YmY2MzE4ZGFiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg0ODlmMTA1M2QyZDQyMDFiZTU0NThlMmViMjIwMThiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZiMmQ4ZThlZDFjMzQzZWVhYTdjNWM2YjFjMDdkMTY1ID0gJCgnPGRpdiBpZD0iaHRtbF9mYjJkOGU4ZWQxYzM0M2VlYWE3YzVjNmIxYzA3ZDE2NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDYxMSBLcnp5xbwgUG9tbmlrIEfDs3JuaWvDs3cgS29wYWxuaSBXdWplayB3IEthdG93aWNhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg0ODlmMTA1M2QyZDQyMDFiZTU0NThlMmViMjIwMThiLnNldENvbnRlbnQoaHRtbF9mYjJkOGU4ZWQxYzM0M2VlYWE3YzVjNmIxYzA3ZDE2NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk1MTljZGZmZTMwYzQxYThiMjdhZGM1N2VjNTA2MTIyLmJpbmRQb3B1cChwb3B1cF84NDg5ZjEwNTNkMmQ0MjAxYmU1NDU4ZTJlYjIyMDE4Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MGRhYzc3YjEyOTE0ZGMxYWY5MzllNzI5ODM2ZWIyOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjI0NDIzOSwxOC45OTAxNjldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNTYxZTAwM2Q0MWNhNGNlOWJlYWYyMWM3YmM2MWY0YmEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80MGRhYzc3YjEyOTE0ZGMxYWY5MzllNzI5ODM2ZWIyOS5zZXRJY29uKGljb25fNTYxZTAwM2Q0MWNhNGNlOWJlYWYyMWM3YmM2MWY0YmEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGVhMDhkODM3N2I0NDA2YWJiNTg3Nzk2MjY4MTNkNGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWUyYzMzZTE5N2M0NGE4ZjljOTE4ZDQ4NzhjOGQ0NWMgPSAkKCc8ZGl2IGlkPSJodG1sXzFlMmMzM2UxOTdjNDRhOGY5YzkxOGQ0ODc4YzhkNDVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjEyIE11emV1bSBJemJhIFBhbWnEmWNpIEtvcGFsbmkgV3VqZWsgdyBLYXRvd2ljYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZWEwOGQ4Mzc3YjQ0MDZhYmI1ODc3OTYyNjgxM2Q0ZC5zZXRDb250ZW50KGh0bWxfMWUyYzMzZTE5N2M0NGE4ZjljOTE4ZDQ4NzhjOGQ0NWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MGRhYzc3YjEyOTE0ZGMxYWY5MzllNzI5ODM2ZWIyOS5iaW5kUG9wdXAocG9wdXBfZGVhMDhkODM3N2I0NDA2YWJiNTg3Nzk2MjY4MTNkNGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTQ4NjNhMDRlZTg3NDc3NjgzNWJmNjAzYjEwYTEzMjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4zODM4MDIsMTguOTQ0NDYxOTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2Y4NzU5MTY0NTRmYzRjNzNiYjA0N2VlNzBkNGNjYmU5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMTQ4NjNhMDRlZTg3NDc3NjgzNWJmNjAzYjEwYTEzMjIuc2V0SWNvbihpY29uX2Y4NzU5MTY0NTRmYzRjNzNiYjA0N2VlNzBkNGNjYmU5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgyYTBlOWM1MDcwZDQ0NTc4NDg5NjhhOWI3YjViNzE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3YmNjOTg0Mjc1NTQwNmI5NGUxMmZlYWVmYWIyYzAyID0gJCgnPGRpdiBpZD0iaHRtbF9hN2JjYzk4NDI3NTU0MDZiOTRlMTJmZWFlZmFiMmMwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDYxMyBCYXp5bGlrYSBOYWrFm3dpxJl0c3plaiBNYXJ5aSBQYW5ueSB3IFBpZWthcmFjaCDFmmzEhXNraWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MmEwZTljNTA3MGQ0NDU3ODQ4OTY4YTliN2I1YjcxOC5zZXRDb250ZW50KGh0bWxfYTdiY2M5ODQyNzU1NDA2Yjk0ZTEyZmVhZWZhYjJjMDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xNDg2M2EwNGVlODc0Nzc2ODM1YmY2MDNiMTBhMTMyMi5iaW5kUG9wdXAocG9wdXBfODJhMGU5YzUwNzBkNDQ1Nzg0ODk2OGE5YjdiNWI3MTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjU5MGFhOGNlNzhkNGVlMmE0MWQyZjgyODQyNDIxYjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4zODE1MDMsMTguOTQ3MzI5OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2Q0NWZjNDNmNDY0YzQ4OWFiOTJmNThkMzQxNjU1MzY2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjU5MGFhOGNlNzhkNGVlMmE0MWQyZjgyODQyNDIxYjUuc2V0SWNvbihpY29uX2Q0NWZjNDNmNDY0YzQ4OWFiOTJmNThkMzQxNjU1MzY2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk0Yzg5YWY0MzIzZTQ3NWI4ZGQxZmViMDc4NGY4OTAxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzNDk0ODQyN2JlNTQxNDNiMmQ4M2NiN2U2NDE2OGVhID0gJCgnPGRpdiBpZD0iaHRtbF80MzQ5NDg0MjdiZTU0MTQzYjJkODNjYjdlNjQxNjhlYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDYxNCBLYWx3YXJpYSB3IFBpZWthcmFjaCDFmmzEhXNraWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NGM4OWFmNDMyM2U0NzViOGRkMWZlYjA3ODRmODkwMS5zZXRDb250ZW50KGh0bWxfNDM0OTQ4NDI3YmU1NDE0M2IyZDgzY2I3ZTY0MTY4ZWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNTkwYWE4Y2U3OGQ0ZWUyYTQxZDJmODI4NDI0MjFiNS5iaW5kUG9wdXAocG9wdXBfOTRjODlhZjQzMjNlNDc1YjhkZDFmZWIwNzg0Zjg5MDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2YwYmIxMjE4NzY3NGYwZmJlYWUwNGZlZDk0MmZkYWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4zOTEwNTgsMTguOTMwNzcyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzMyZGMxMzU4ODg2ZTRmOWQ5OGI1YjU2M2JkNWFhOTllID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfY2YwYmIxMjE4NzY3NGYwZmJlYWUwNGZlZDk0MmZkYWQuc2V0SWNvbihpY29uXzMyZGMxMzU4ODg2ZTRmOWQ5OGI1YjU2M2JkNWFhOTllKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ExNTZkMDM2NzE3MDQ0YmY5NWFlMWQ2NTY5NjA0NjI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBjODMyZDMwOTYwNTRiZTE4MmUyZTcwNWU4ZjcwYTc5ID0gJCgnPGRpdiBpZD0iaHRtbF8wYzgzMmQzMDk2MDU0YmUxODJlMmU3MDVlOGY3MGE3OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDYxNSBLb3BpZWMgV3l6d29sZW5pYSB3IFBpZWthcmFjaCDFmmzEhXNraWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMTU2ZDAzNjcxNzA0NGJmOTVhZTFkNjU2OTYwNDYyNS5zZXRDb250ZW50KGh0bWxfMGM4MzJkMzA5NjA1NGJlMTgyZTJlNzA1ZThmNzBhNzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZjBiYjEyMTg3Njc0ZjBmYmVhZTA0ZmVkOTQyZmRhZC5iaW5kUG9wdXAocG9wdXBfYTE1NmQwMzY3MTcwNDRiZjk1YWUxZDY1Njk2MDQ2MjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGMyMzRmNWQ5NDIwNDMxOThlNTZkZTA4M2E5N2VjNjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4yNDU5MjUsMTkuMTA5Mzk4MDAwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2NhZmEyOTA0ZDI1NzQ4Zjk5MzY5ZGI4OThiYmM1Zjc1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMGMyMzRmNWQ5NDIwNDMxOThlNTZkZTA4M2E5N2VjNjMuc2V0SWNvbihpY29uX2NhZmEyOTA0ZDI1NzQ4Zjk5MzY5ZGI4OThiYmM1Zjc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YxYzBlMTZlMTQxMzQzNDE4ZDUwMzZkYTIyMTA3YTc3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2ZWUwOWU4MWU4MDRmODNiZDMyZmVlM2Q3NzBiYjZlID0gJCgnPGRpdiBpZD0iaHRtbF9mNmVlMDllODFlODA0ZjgzYmQzMmZlZTNkNzcwYmI2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDYxNiBTenliIEJvxYRjenlrIHcgTXlzxYJvd2ljYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMWMwZTE2ZTE0MTM0MzQxOGQ1MDM2ZGEyMjEwN2E3Ny5zZXRDb250ZW50KGh0bWxfZjZlZTA5ZTgxZTgwNGY4M2JkMzJmZWUzZDc3MGJiNmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wYzIzNGY1ZDk0MjA0MzE5OGU1NmRlMDgzYTk3ZWM2My5iaW5kUG9wdXAocG9wdXBfZjFjMGUxNmUxNDEzNDM0MThkNTAzNmRhMjIxMDdhNzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGNkM2M0OWQzZWQ1NDVkNmE1YjgwZmZiNTE0ZDM0NTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4xOTAwMzgsMTguNDY0NDY4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzVkYjFiNjc3ZTQ1YTRhOTdhNmNmMzRiZDBlN2FiNGNkID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOGNkM2M0OWQzZWQ1NDVkNmE1YjgwZmZiNTE0ZDM0NTMuc2V0SWNvbihpY29uXzVkYjFiNjc3ZTQ1YTRhOTdhNmNmMzRiZDBlN2FiNGNkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI2ZDM5MGE2ZTI5MTQzMTQ5NjMxNzk3ZGNiYTJjMmMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzliOTY2YTU0MmM4MDQxZDE5MjI3NjkzYzY4MTIyMjc0ID0gJCgnPGRpdiBpZD0iaHRtbF85Yjk2NmE1NDJjODA0MWQxOTIyNzY5M2M2ODEyMjI3NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDYxNyBLb2xlaiBXxIVza290b3Jvd2EgdyBSdWRhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2ZDM5MGE2ZTI5MTQzMTQ5NjMxNzk3ZGNiYTJjMmMyLnNldENvbnRlbnQoaHRtbF85Yjk2NmE1NDJjODA0MWQxOTIyNzY5M2M2ODEyMjI3NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhjZDNjNDlkM2VkNTQ1ZDZhNWI4MGZmYjUxNGQzNDUzLmJpbmRQb3B1cChwb3B1cF8yNmQzOTBhNmUyOTE0MzE0OTYzMTc5N2RjYmEyYzJjMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iYjg4N2M1MzExYzg0OTlkYTgwNjFiZmE3YTk0OGQwNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjE5NDkzNCwxOC40NDg5NjE5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOWZlNzg5ZWM3YTUxNGI1Mjg3ZjMzYzVmOTRmYzEyNDAgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iYjg4N2M1MzExYzg0OTlkYTgwNjFiZmE3YTk0OGQwNi5zZXRJY29uKGljb25fOWZlNzg5ZWM3YTUxNGI1Mjg3ZjMzYzVmOTRmYzEyNDApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDQxZjUzZTI5NmVjNDcwNWI3MGI1OTEyMzQ5MGNlOGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDdiNWRjZDVkMTI1NGQ4ZWJlNzNjMzZiNzI3OTQ0OWIgPSAkKCc8ZGl2IGlkPSJodG1sXzA3YjVkY2Q1ZDEyNTRkOGViZTczYzM2YjcyNzk0NDliIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjE4IFplc3DDs8WCIEtsYXN6dG9ybm8g4oCTIFBhxYJhY293eSB3IFJ1ZGFjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDQxZjUzZTI5NmVjNDcwNWI3MGI1OTEyMzQ5MGNlOGIuc2V0Q29udGVudChodG1sXzA3YjVkY2Q1ZDEyNTRkOGViZTczYzM2YjcyNzk0NDliKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmI4ODdjNTMxMWM4NDk5ZGE4MDYxYmZhN2E5NDhkMDYuYmluZFBvcHVwKHBvcHVwXzA0MWY1M2UyOTZlYzQ3MDViNzBiNTkxMjM0OTBjZThiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFlMTVmMGI2YjAxOTRlMmY4MmI4ODA0OTNkNTYzM2M2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuOTUwNTkyLDE4LjU2ODM3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85NDViYWFjNTJkNTY0ZjgxYTJiYjQyZjJhZDVhMmIzYSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzFlMTVmMGI2YjAxOTRlMmY4MmI4ODA0OTNkNTYzM2M2LnNldEljb24oaWNvbl85NDViYWFjNTJkNTY0ZjgxYTJiYjQyZjJhZDVhMmIzYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kOWFjNzcxZGExOWE0YWI0YTYwMjg2MzQ4ZTZkM2JiZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYWJlNjViODVlNzk0MGI0YTUwMGRiZTFmZGI5MTA1ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYWFiZTY1Yjg1ZTc5NDBiNGE1MDBkYmUxZmRiOTEwNWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2MTkgRG9tIFpkcm9qb3d5IHcgSmFzdHJ6xJliaXUtWmRyb2p1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOWFjNzcxZGExOWE0YWI0YTYwMjg2MzQ4ZTZkM2JiZi5zZXRDb250ZW50KGh0bWxfYWFiZTY1Yjg1ZTc5NDBiNGE1MDBkYmUxZmRiOTEwNWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xZTE1ZjBiNmIwMTk0ZTJmODJiODgwNDkzZDU2MzNjNi5iaW5kUG9wdXAocG9wdXBfZDlhYzc3MWRhMTlhNGFiNGE2MDI4NjM0OGU2ZDNiYmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjk4MTczOGE0MTc2NDIyYmJkMzIwZjEyN2U0YmExYmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4yNjM4NDUsMTkuMDgwNTM4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzIyZGE3NjFhY2EyMzQxOGNhZjFhNjljNDI5MGViMWI4ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMjk4MTczOGE0MTc2NDIyYmJkMzIwZjEyN2U0YmExYmEuc2V0SWNvbihpY29uXzIyZGE3NjFhY2EyMzQxOGNhZjFhNjljNDI5MGViMWI4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzViN2IwMjQ3ZjBhYzQzZWViZmNkN2JmNzcwOTI3NjgzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE4NzkzNjM3NTRlYjRhZjJiOTQ4OWM3YTcxOTZhNmYyID0gJCgnPGRpdiBpZD0iaHRtbF8xODc5MzYzNzU0ZWI0YWYyYjk0ODljN2E3MTk2YTZmMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDYyMCBNdXpldW0gSHV0bmljdHdhIEN5bmt1IFdhbGNvd25pYSB3IEthdG93aWNhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViN2IwMjQ3ZjBhYzQzZWViZmNkN2JmNzcwOTI3NjgzLnNldENvbnRlbnQoaHRtbF8xODc5MzYzNzU0ZWI0YWYyYjk0ODljN2E3MTk2YTZmMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI5ODE3MzhhNDE3NjQyMmJiZDMyMGYxMjdlNGJhMWJhLmJpbmRQb3B1cChwb3B1cF81YjdiMDI0N2YwYWM0M2VlYmZjZDdiZjc3MDkyNzY4Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81YTZlY2Q1MDgyMzA0MWE3OGQ4ODcxNjIyN2UxMjgzZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjM4ODc0MSwxOS42NDMwMTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fM2NiZTMwOTQwYTRjNGJmNWE4ZTJhNjcxZTY4ZDhhN2EgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81YTZlY2Q1MDgyMzA0MWE3OGQ4ODcxNjIyN2UxMjgzZi5zZXRJY29uKGljb25fM2NiZTMwOTQwYTRjNGJmNWE4ZTJhNjcxZTY4ZDhhN2EpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGVhNzRkMTllOTM1NDc0MjhkMDNmNDY2YTU3MjNlN2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQ4ODA0OTJlZGU2NDQwMWI4ODYzOGZlNDQ4MDNiZmIgPSAkKCc8ZGl2IGlkPSJodG1sXzRkODgwNDkyZWRlNjQ0MDFiODg2MzhmZTQ0ODAzYmZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjIxIFJ1aW55IFphbWt1IHcgQnlkbGluaWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlYTc0ZDE5ZTkzNTQ3NDI4ZDAzZjQ2NmE1NzIzZTdlLnNldENvbnRlbnQoaHRtbF80ZDg4MDQ5MmVkZTY0NDAxYjg4NjM4ZmU0NDgwM2JmYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVhNmVjZDUwODIzMDQxYTc4ZDg4NzE2MjI3ZTEyODNmLmJpbmRQb3B1cChwb3B1cF8wZWE3NGQxOWU5MzU0NzQyOGQwM2Y0NjZhNTcyM2U3ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80M2IwNmI3MjQ0MzY0NzUxOWU1ODE5ZjdkNDVhNTI5MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjM4NzgyOSwxOS42NDYyNjQwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYmI1YjRjYjEyMmQ4NGMzNmEwOGE2MzMyMGZiOWI2YjIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80M2IwNmI3MjQ0MzY0NzUxOWU1ODE5ZjdkNDVhNTI5My5zZXRJY29uKGljb25fYmI1YjRjYjEyMmQ4NGMzNmEwOGE2MzMyMGZiOWI2YjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTI0ZDRmZjg1YzJmNDk0Mjg1YzQ2ZTkzMjU3M2UyYTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDk0YThjNjZhYWQ1NDJiZDkxMjU1NjU3YTFlOTQ1ODQgPSAkKCc8ZGl2IGlkPSJodG1sXzA5NGE4YzY2YWFkNTQyYmQ5MTI1NTY1N2ExZTk0NTg0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjIyIEJ5ZGxpbiDigJMgS3J6eXdvcMWCb2NraWUgTGVnaW9ub3dlIFRlcm1vcGlsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTI0ZDRmZjg1YzJmNDk0Mjg1YzQ2ZTkzMjU3M2UyYTQuc2V0Q29udGVudChodG1sXzA5NGE4YzY2YWFkNTQyYmQ5MTI1NTY1N2ExZTk0NTg0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDNiMDZiNzI0NDM2NDc1MTllNTgxOWY3ZDQ1YTUyOTMuYmluZFBvcHVwKHBvcHVwX2EyNGQ0ZmY4NWMyZjQ5NDI4NWM0NmU5MzI1NzNlMmE0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZjN2FjODc4ODliNDQzZDI5ODM4MTM4MmYyM2Y1ZjYxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMTkzOTE2LDE4LjQ0ODczOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8wNzUyYmFkMzJiYzg0NTBjYTMyN2I2NmQ3NGZiYjMwYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzZjN2FjODc4ODliNDQzZDI5ODM4MTM4MmYyM2Y1ZjYxLnNldEljb24oaWNvbl8wNzUyYmFkMzJiYzg0NTBjYTMyN2I2NmQ3NGZiYjMwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMmFlYWI4NGJjNTA0YzM2OTRkOGJmM2NiZTc1NDBmYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mODNkZGY4ZTRkZTY0YTIzOWMxMTVlYjc0MDgyMzA0NCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjgzZGRmOGU0ZGU2NGEyMzljMTE1ZWI3NDA4MjMwNDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2MjMgU2Fua3R1YXJpdW0gTWF0a2kgQm/FvGVqIFBva29ybmVqIHcgUnVkYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMmFlYWI4NGJjNTA0YzM2OTRkOGJmM2NiZTc1NDBmYi5zZXRDb250ZW50KGh0bWxfZjgzZGRmOGU0ZGU2NGEyMzljMTE1ZWI3NDA4MjMwNDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82YzdhYzg3ODg5YjQ0M2QyOTgzODEzODJmMjNmNWY2MS5iaW5kUG9wdXAocG9wdXBfZDJhZWFiODRiYzUwNGMzNjk0ZDhiZjNjYmU3NTQwZmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjE1NWQ5NmZlNDc2NDgyYmIwOTdjNDZhODgxNmNiNGMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4yMTE2NjMsMTkuODMwMDk1OTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzE0NGU5ZmIwMzY4ZjRkN2JiOTQzYmYwNjI4MGMzNTE4ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMjE1NWQ5NmZlNDc2NDgyYmIwOTdjNDZhODgxNmNiNGMuc2V0SWNvbihpY29uXzE0NGU5ZmIwMzY4ZjRkN2JiOTQzYmYwNjI4MGMzNTE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y4NWZkZGIwY2U2ZjRmMjFhZTFhMjVmNjQ5Y2E2MjRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E5NzVlNGE0YzcyNTRiZjE4NDkxYWFlZjUwOTZmOGEzID0gJCgnPGRpdiBpZD0iaHRtbF9hOTc1ZTRhNGM3MjU0YmYxODQ5MWFhZWY1MDk2ZjhhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDYyNCBSdWlueSBaYW1rdSBLYXppbWllcnpvd3NraWVnbyB3IE9qY293aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y4NWZkZGIwY2U2ZjRmMjFhZTFhMjVmNjQ5Y2E2MjRmLnNldENvbnRlbnQoaHRtbF9hOTc1ZTRhNGM3MjU0YmYxODQ5MWFhZWY1MDk2ZjhhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzIxNTVkOTZmZTQ3NjQ4MmJiMDk3YzQ2YTg4MTZjYjRjLmJpbmRQb3B1cChwb3B1cF9mODVmZGRiMGNlNmY0ZjIxYWUxYTI1ZjY0OWNhNjI0Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xMTk1MTkxYTI4YjQ0YmZlOGRkNTE3YjdmNGE4NTA5MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjIwMTk3LDE5LjgxNzc3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzUyMDZmMTE2Y2JjODQ4ZDE5MjVmODgyYWQ0NDIyZWQ2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMTE5NTE5MWEyOGI0NGJmZThkZDUxN2I3ZjRhODUwOTIuc2V0SWNvbihpY29uXzUyMDZmMTE2Y2JjODQ4ZDE5MjVmODgyYWQ0NDIyZWQ2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JkNGViOWMwYjYyYzRiZTM4NWRkOGVkNmM0ZmE4ZmU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgzM2Q4YWU0MTRlZjQ1YWViNGMzOWVjNmEzMGE5OGFjID0gJCgnPGRpdiBpZD0iaHRtbF84MzNkOGFlNDE0ZWY0NWFlYjRjMzllYzZhMzBhOThhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDYyNSBKYXNraW5pYSDFgW9raWV0a2EgdyBPamNvd2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZDRlYjljMGI2MmM0YmUzODVkZDhlZDZjNGZhOGZlNy5zZXRDb250ZW50KGh0bWxfODMzZDhhZTQxNGVmNDVhZWI0YzM5ZWM2YTMwYTk4YWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMTk1MTkxYTI4YjQ0YmZlOGRkNTE3YjdmNGE4NTA5Mi5iaW5kUG9wdXAocG9wdXBfYmQ0ZWI5YzBiNjJjNGJlMzg1ZGQ4ZWQ2YzRmYThmZTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjE0ZDRjN2RhY2MxNDY3OWIyMDA0MzY3Y2JkNjY4YWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4yNDI5MywxOS43ODMwMzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNzIyM2U2NjAxOTYyNGVkYzkwNjBiMzE3YmQzN2UxZWEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82MTRkNGM3ZGFjYzE0Njc5YjIwMDQzNjdjYmQ2NjhhYy5zZXRJY29uKGljb25fNzIyM2U2NjAxOTYyNGVkYzkwNjBiMzE3YmQzN2UxZWEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmNlOTU3ZjgzNzMwNDM4OGFlMmJmOWQyZjRkNzU5NWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmRlYzU4ZDlkZmJjNGEzYjhkMWY3MjZkMzg1N2I1MzcgPSAkKCc8ZGl2IGlkPSJodG1sXzJkZWM1OGQ5ZGZiYzRhM2I4ZDFmNzI2ZDM4NTdiNTM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjI2IE1hY3p1Z2EgSGVya3VsZXNhIHcgUGllc2tvd2VqIFNrYWxlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mY2U5NTdmODM3MzA0Mzg4YWUyYmY5ZDJmNGQ3NTk1Yi5zZXRDb250ZW50KGh0bWxfMmRlYzU4ZDlkZmJjNGEzYjhkMWY3MjZkMzg1N2I1MzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82MTRkNGM3ZGFjYzE0Njc5YjIwMDQzNjdjYmQ2NjhhYy5iaW5kUG9wdXAocG9wdXBfZmNlOTU3ZjgzNzMwNDM4OGFlMmJmOWQyZjRkNzU5NWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTA4Yjk2NDEwNjJiNDkxYWFmODFlNjQ0N2U1YjNmZTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4yOTU3MjMsMTguODA2MTkyMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2I4N2IyMTRhYWMzMzRiZWU5YTQzZmI2NjZjYzUyZDQ5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMTA4Yjk2NDEwNjJiNDkxYWFmODFlNjQ0N2U1YjNmZTAuc2V0SWNvbihpY29uX2I4N2IyMTRhYWMzMzRiZWU5YTQzZmI2NjZjYzUyZDQ5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFjNWNlNjBkYWM3NzQ2OTViNTU0YTA0NzdhZjI4NWI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY0OWQyN2E0NmU2NzQxY2JiZDZkYzkwNjg4MjU5NDI4ID0gJCgnPGRpdiBpZD0iaHRtbF82NDlkMjdhNDZlNjc0MWNiYmQ2ZGM5MDY4ODI1OTQyOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDYzMiBTenRvbG5pYSBLcsOzbG93YSBMdWl6YSB3IFphYnJ6dTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWM1Y2U2MGRhYzc3NDY5NWI1NTRhMDQ3N2FmMjg1YjYuc2V0Q29udGVudChodG1sXzY0OWQyN2E0NmU2NzQxY2JiZDZkYzkwNjg4MjU5NDI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTA4Yjk2NDEwNjJiNDkxYWFmODFlNjQ0N2U1YjNmZTAuYmluZFBvcHVwKHBvcHVwXzFjNWNlNjBkYWM3NzQ2OTViNTU0YTA0NzdhZjI4NWI2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE4ZDY1NzAxM2Y5ZDRhYzY4MmU0NTdmOGIyNzIzZTk4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNzQ2NDc1LDE5LjYwMTUyNjk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl83YjIyM2VkNWE3MDQ0MGZmOWViNWI1YWQ3ZTE3NDgyOCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzE4ZDY1NzAxM2Y5ZDRhYzY4MmU0NTdmOGIyNzIzZTk4LnNldEljb24oaWNvbl83YjIyM2VkNWE3MDQ0MGZmOWViNWI1YWQ3ZTE3NDgyOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NjNhMjhlOGQ0MzQ0OTRjYTRlNWU4ZjkwZGRlNTM0MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZjZiNmY2MzEyODY0NDQzYWYzYjkyYjE0ODk1ZDc3ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMGY2YjZmNjMxMjg2NDQ0M2FmM2I5MmIxNDg5NWQ3N2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2NDggWmFtZWsgdyBTdWNoZWogQmVza2lkemtpZWo8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ2M2EyOGU4ZDQzNDQ5NGNhNGU1ZThmOTBkZGU1MzQxLnNldENvbnRlbnQoaHRtbF8wZjZiNmY2MzEyODY0NDQzYWYzYjkyYjE0ODk1ZDc3ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE4ZDY1NzAxM2Y5ZDRhYzY4MmU0NTdmOGIyNzIzZTk4LmJpbmRQb3B1cChwb3B1cF80NjNhMjhlOGQ0MzQ0OTRjYTRlNWU4ZjkwZGRlNTM0MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85MWI1MGI2NDIyMDk0ODAzODJmNmVjZjMxZjQxODRlNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5Ljc0MjQxNSwxOS42MDE1NzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNmJlYzk2ZTcwNWZkNGM0NDgzMWZkMTYzZjRlZTRjYzIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85MWI1MGI2NDIyMDk0ODAzODJmNmVjZjMxZjQxODRlNi5zZXRJY29uKGljb25fNmJlYzk2ZTcwNWZkNGM0NDgzMWZkMTYzZjRlZTRjYzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjZmZDQxNDU5NThiNDI3ODhkZjIyNjhlNmZiNWFhM2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWYwMjRhNTdjNDhjNDAwMGJjYWM4NDNlNGQ5ZjNjYTggPSAkKCc8ZGl2IGlkPSJodG1sXzVmMDI0YTU3YzQ4YzQwMDBiY2FjODQzZTRkOWYzY2E4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjQ5IEthcmN6bWEg4oCeUnp5beKAnSB3IFN1Y2hlaiBCZXNraWR6a2llajwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjZmZDQxNDU5NThiNDI3ODhkZjIyNjhlNmZiNWFhM2Yuc2V0Q29udGVudChodG1sXzVmMDI0YTU3YzQ4YzQwMDBiY2FjODQzZTRkOWYzY2E4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTFiNTBiNjQyMjA5NDgwMzgyZjZlY2YzMWY0MTg0ZTYuYmluZFBvcHVwKHBvcHVwX2Y2ZmQ0MTQ1OTU4YjQyNzg4ZGYyMjY4ZTZmYjVhYTNmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk0Zjg2NGM2NjdiZjQ3YjBiYTgxNThkMWUzZWY0MDQ5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuOTc5MDI5LDE4Ljk1MDQyNjk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lOGM4ZTU0ZGM3N2U0NDJlYTE0YTllZjliNjA3NGQ3ZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzk0Zjg2NGM2NjdiZjQ3YjBiYTgxNThkMWUzZWY0MDQ5LnNldEljb24oaWNvbl9lOGM4ZTU0ZGM3N2U0NDJlYTE0YTllZjliNjA3NGQ3ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNTMyMmE4MTIwY2U0NGQyOTdiZGI3NWM0MjIyYmRmMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MTQ3N2MxNmQ4ZjY0Yzg2YjAzZTdiZmU3NjE4Y2E0ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjE0NzdjMTZkOGY2NGM4NmIwM2U3YmZlNzYxOGNhNGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2NTAgU2thbnNlbiBaYWdyb2RhIFdzaSBQc3pjennFhHNraWVqIHcgUHN6Y3p5bmllPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTMyMmE4MTIwY2U0NGQyOTdiZGI3NWM0MjIyYmRmMi5zZXRDb250ZW50KGh0bWxfNjE0NzdjMTZkOGY2NGM4NmIwM2U3YmZlNzYxOGNhNGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NGY4NjRjNjY3YmY0N2IwYmE4MTU4ZDFlM2VmNDA0OS5iaW5kUG9wdXAocG9wdXBfMzUzMjJhODEyMGNlNDRkMjk3YmRiNzVjNDIyMmJkZjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzk5NzQwMTI5NTk2NDY4OTg0ZThjM2RhOGVmMzZkOTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4zMTMzMjUsMTguNjg4NjgxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzVlOTRlMzllZTA3MTRkODU4YTk0NDExMWY1MTE4ZmU3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzk5NzQwMTI5NTk2NDY4OTg0ZThjM2RhOGVmMzZkOTYuc2V0SWNvbihpY29uXzVlOTRlMzllZTA3MTRkODU4YTk0NDExMWY1MTE4ZmU3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3NmYwYjM2ZTdmZjRiZThhYzQ0YTYxNDVmN2Q2ZjhiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBmNThlNDgzMTY1ODQ5OWJhNmZhNzI3OTA1M2M2MmZlID0gJCgnPGRpdiBpZD0iaHRtbF8wZjU4ZTQ4MzE2NTg0OTliYTZmYTcyNzkwNTNjNjJmZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDY1MiBSYWRpb3N0YWNqYSBHbGl3aWNlIOKAkyBQb21uaWsgSGlzdG9yaWk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3NmYwYjM2ZTdmZjRiZThhYzQ0YTYxNDVmN2Q2ZjhiLnNldENvbnRlbnQoaHRtbF8wZjU4ZTQ4MzE2NTg0OTliYTZmYTcyNzkwNTNjNjJmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc5OTc0MDEyOTU5NjQ2ODk4NGU4YzNkYThlZjM2ZDk2LmJpbmRQb3B1cChwb3B1cF9kNzZmMGIzNmU3ZmY0YmU4YWM0NGE2MTQ1ZjdkNmY4Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lOTcxYTU5NDliMDE0NjNjYTdkODg5NWY4ZDc2MWQzZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjYyODU2MywxOS4zNzMzOTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMzc4MjNjZTU4MDljNGUxMzkzNWQ5OTNhYTAyYjg1YmEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lOTcxYTU5NDliMDE0NjNjYTdkODg5NWY4ZDc2MWQzZS5zZXRJY29uKGljb25fMzc4MjNjZTU4MDljNGUxMzkzNWQ5OTNhYTAyYjg1YmEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2M1NDUyMzA0YTViNDRjMGFmZTU5ODRmNjUwMWIxY2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjdlMGM3ZGZkN2UwNDAzMDg5ODlhOGM3MGFjNzdkZWQgPSAkKCc8ZGl2IGlkPSJodG1sX2Y3ZTBjN2RmZDdlMDQwMzA4OTg5YThjNzBhYzc3ZGVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjU1IE11emV1bSBEYXdueWNoIFJ6ZW1pb3PFgiB3IFN0YXJ5bSBNxYJ5bmllIHcgxbthcmthY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNjNTQ1MjMwNGE1YjQ0YzBhZmU1OTg0ZjY1MDFiMWNiLnNldENvbnRlbnQoaHRtbF9mN2UwYzdkZmQ3ZTA0MDMwODk4OWE4YzcwYWM3N2RlZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U5NzFhNTk0OWIwMTQ2M2NhN2Q4ODk1ZjhkNzYxZDNlLmJpbmRQb3B1cChwb3B1cF8zYzU0NTIzMDRhNWI0NGMwYWZlNTk4NGY2NTAxYjFjYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81NDY0MmRkZGVlMjQ0ZWQ3OWNmYmVhZDYyZTQ3MDE4ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjYzMjcyNiwxOS4zNzY0MjYwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNmNlMzNjZjc5Yjg4NDQ1YWEyYjkwMDMzNTVkY2Q1ODMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81NDY0MmRkZGVlMjQ0ZWQ3OWNmYmVhZDYyZTQ3MDE4ZC5zZXRJY29uKGljb25fNmNlMzNjZjc5Yjg4NDQ1YWEyYjkwMDMzNTVkY2Q1ODMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODNjODAxYWE2ZmFkNDI2MzhmZDMyY2NmNTEzMTlkY2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDQxY2VlOGY1ODM0NDc0OWIwZDM4N2JmZmNhMjg5NGUgPSAkKCc8ZGl2IGlkPSJodG1sXzA0MWNlZThmNTgzNDQ3NDliMGQzODdiZmZjYTI4OTRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjU2IFNhbmt0dWFyaXVtIE1hdGtpIEJvxbxlaiBMZcWbbmlvd3NraWVqIFBhdHJvbmtpIFJvZHppbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODNjODAxYWE2ZmFkNDI2MzhmZDMyY2NmNTEzMTlkY2Yuc2V0Q29udGVudChodG1sXzA0MWNlZThmNTgzNDQ3NDliMGQzODdiZmZjYTI4OTRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTQ2NDJkZGRlZTI0NGVkNzljZmJlYWQ2MmU0NzAxOGQuYmluZFBvcHVwKHBvcHVwXzgzYzgwMWFhNmZhZDQyNjM4ZmQzMmNjZjUxMzE5ZGNmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY1ODljOTExMjA1YzQ3MTQ4M2M2ZGU0OTc1ZjBlZjViID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNDIwODAxLDE5LjA0ODE3Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jY2FjZjY4ZGE0ZGQ0MTM1OWVmNDNiMzEwNTc4YTNjYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzY1ODljOTExMjA1YzQ3MTQ4M2M2ZGU0OTc1ZjBlZjViLnNldEljb24oaWNvbl9jY2FjZjY4ZGE0ZGQ0MTM1OWVmNDNiMzEwNTc4YTNjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMGM4ZmI1MDcxZGE0NmE5YjFiMWNkYzg2OTkyYjIyZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MzQxOWJlMzc1YWM0MWYzYWI0ZGM1NjgzMjA4MGQ3NyA9ICQoJzxkaXYgaWQ9Imh0bWxfODM0MTliZTM3NWFjNDFmM2FiNGRjNTY4MzIwODBkNzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA3MjggQmVuZG9zemthIFdpZWxrYSAtIHN6Y3p5dCB3IEJlc2tpZHppZSDFu3l3aWVja2ltPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMGM4ZmI1MDcxZGE0NmE5YjFiMWNkYzg2OTkyYjIyZC5zZXRDb250ZW50KGh0bWxfODM0MTliZTM3NWFjNDFmM2FiNGRjNTY4MzIwODBkNzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NTg5YzkxMTIwNWM0NzE0ODNjNmRlNDk3NWYwZWY1Yi5iaW5kUG9wdXAocG9wdXBfZTBjOGZiNTA3MWRhNDZhOWIxYjFjZGM4Njk5MmIyMmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2NkZjU3MTM1ZWRjNDQwNWE1Mjk4NWYzY2Q5YWE1ZTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS44NjgzNiwxOS40MDkxNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85N2Y1YzllNWRjMmI0MDRlOWQ3Nzc0NTE0OWViZDBmYSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2NjZGY1NzEzNWVkYzQ0MDVhNTI5ODVmM2NkOWFhNWU2LnNldEljb24oaWNvbl85N2Y1YzllNWRjMmI0MDRlOWQ3Nzc0NTE0OWViZDBmYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNGYxOThmNzMzNWI0Nzc4YjdmNTA2YzcxM2MzYTU3ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NzkwNDJjMjg0Mjk0ZTA3OWYzOWQwYzNjYzczODY4NSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzc5MDQyYzI4NDI5NGUwNzlmMzlkMGMzY2M3Mzg2ODUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA3MjkgUGFyayBNaW5pYXR1ciB3IElud2HFgmR6aWUgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNGYxOThmNzMzNWI0Nzc4YjdmNTA2YzcxM2MzYTU3Zi5zZXRDb250ZW50KGh0bWxfNzc5MDQyYzI4NDI5NGUwNzlmMzlkMGMzY2M3Mzg2ODUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jY2RmNTcxMzVlZGM0NDA1YTUyOTg1ZjNjZDlhYTVlNi5iaW5kUG9wdXAocG9wdXBfZTRmMTk4ZjczMzViNDc3OGI3ZjUwNmM3MTNjM2E1N2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWNhZWFiMjA3YmJhNDE2MGFlMTM0MTE0NzFmODIyZjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS43ODE4NDEsMTguODI4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzg3MGVjZGMzNDNjNTQyMjRiYWUxNDI2NDA3NDQ1MzdhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMWNhZWFiMjA3YmJhNDE2MGFlMTM0MTE0NzFmODIyZjQuc2V0SWNvbihpY29uXzg3MGVjZGMzNDNjNTQyMjRiYWUxNDI2NDA3NDQ1MzdhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhjZmQ4MjljNzhmMjQ2ZTA4Yzk2NDdhOWI3ZDhmOTI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEwZTI1NzA4NWY0MDRmMDk5Zjc5MjBmOWEyZTgxMDZlID0gJCgnPGRpdiBpZD0iaHRtbF8xMGUyNTcwODVmNDA0ZjA5OWY3OTIwZjlhMmU4MTA2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDczNyBDZW50cnVtIEt1bHR1cnkgaSBTenR1a2kgRHfDs3IgS29zc2Frw7N3IC0gR8OzcmtpIFdpZWxraWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhjZmQ4MjljNzhmMjQ2ZTA4Yzk2NDdhOWI3ZDhmOTI1LnNldENvbnRlbnQoaHRtbF8xMGUyNTcwODVmNDA0ZjA5OWY3OTIwZjlhMmU4MTA2ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFjYWVhYjIwN2JiYTQxNjBhZTEzNDExNDcxZjgyMmY0LmJpbmRQb3B1cChwb3B1cF84Y2ZkODI5Yzc4ZjI0NmUwOGM5NjQ3YTliN2Q4ZjkyNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NjljYjY3YTY1Mjk0YjNhOGY3M2Q4ODM1YTI2N2Y1MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5Ljc4MjE0OSwxOC44Mjg0NTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYWY2MDVhNGU4NWU2NDRlYjhmNWQ1ZWU1OGRmYTNmYWYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82NjljYjY3YTY1Mjk0YjNhOGY3M2Q4ODM1YTI2N2Y1Mi5zZXRJY29uKGljb25fYWY2MDVhNGU4NWU2NDRlYjhmNWQ1ZWU1OGRmYTNmYWYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzBkOTQzMzYyMDkxNDg0Zjk0Mzk1MjBjNTQ5NGJhOWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2I1MTkxY2Y4NzIyNGY3ZmFjZmUwMWQzYmQzMjg5ZDcgPSAkKCc8ZGl2IGlkPSJodG1sXzdiNTE5MWNmODcyMjRmN2ZhY2ZlMDFkM2JkMzI4OWQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNzM4IFN6bGFrIEthbXlrYSAtIEfDs3JraSBXaWVsa2llIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzBkOTQzMzYyMDkxNDg0Zjk0Mzk1MjBjNTQ5NGJhOWIuc2V0Q29udGVudChodG1sXzdiNTE5MWNmODcyMjRmN2ZhY2ZlMDFkM2JkMzI4OWQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjY5Y2I2N2E2NTI5NGIzYThmNzNkODgzNWEyNjdmNTIuYmluZFBvcHVwKHBvcHVwXzMwZDk0MzM2MjA5MTQ4NGY5NDM5NTIwYzU0OTRiYTliKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVhYzcwNzM1ZTlhNDRhNzY5ZDIxMGExNTZjODZjZjliID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNzgxNzU3LDE4LjgyODU5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl84YmY0N2IwZjM2Njc0OGUwYmEyOGM1ZDI5NjMzNzgxOSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzVhYzcwNzM1ZTlhNDRhNzY5ZDIxMGExNTZjODZjZjliLnNldEljb24oaWNvbl84YmY0N2IwZjM2Njc0OGUwYmEyOGM1ZDI5NjMzNzgxOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYmJlODI4OWRkZGU0Njc0YWVjODkzMDI5ZDA2NzEwNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNjlhMTc2MjlkOTM0M2E0YmJkYmE5Mzc1NTViMjIyYiA9ICQoJzxkaXYgaWQ9Imh0bWxfMzY5YTE3NjI5ZDkzNDNhNGJiZGJhOTM3NTU1YjIyMmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA3MzkgU2Nocm9uaXNrbyBNxYJvZHppZcW8b3dlIEtvc3MgLSBHw7Nya2kgV2llbGtpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2JiZTgyODlkZGRlNDY3NGFlYzg5MzAyOWQwNjcxMDcuc2V0Q29udGVudChodG1sXzM2OWExNzYyOWQ5MzQzYTRiYmRiYTkzNzU1NWIyMjJiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWFjNzA3MzVlOWE0NGE3NjlkMjEwYTE1NmM4NmNmOWIuYmluZFBvcHVwKHBvcHVwXzNiYmU4Mjg5ZGRkZTQ2NzRhZWM4OTMwMjlkMDY3MTA3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQwZDU2ZjdjZWIyMzQyZjhhNjQ1NmI1ODE1YzEzNGJlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDk1MzM3LDE2LjMyNzE1ODk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iM2I3NjBiNDFkOGQ0YTZmYjA4MjA4MWNlZGM0ZWUxMSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80MGQ1NmY3Y2ViMjM0MmY4YTY0NTZiNTgxNWMxMzRiZS5zZXRJY29uKGljb25fYjNiNzYwYjQxZDhkNGE2ZmIwODIwODFjZWRjNGVlMTEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDM2YzM2MGNmOTZhNDc3ZmFhMmIwMzIzNTkwMTE4MWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjQyZDc1MzJhYWJlNDAzNjkwYjZkNDM2OGM4Njk5ZjggPSAkKCc8ZGl2IGlkPSJodG1sX2I0MmQ3NTMyYWFiZTQwMzY5MGI2ZDQzNjhjODY5OWY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDMwIFNjaHJvbmlza28gUGFzdGVya2EgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MzZjMzYwY2Y5NmE0NzdmYWEyYjAzMjM1OTAxMTgxZS5zZXRDb250ZW50KGh0bWxfYjQyZDc1MzJhYWJlNDAzNjkwYjZkNDM2OGM4Njk5ZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MGQ1NmY3Y2ViMjM0MmY4YTY0NTZiNTgxNWMxMzRiZS5iaW5kUG9wdXAocG9wdXBfNDM2YzM2MGNmOTZhNDc3ZmFhMmIwMzIzNTkwMTE4MWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2ZiNDM1YTRiMWJkNDZlZmFhODI4MjZhMjBhMWZlNmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC40ODUzNjQsMTYuMzM5Mzc0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzFmMzllY2E3YzBkMzQzNTZhM2Y4MWIzNzExYjBmNjE0ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzdmYjQzNWE0YjFiZDQ2ZWZhYTgyODI2YTIwYTFmZTZiLnNldEljb24oaWNvbl8xZjM5ZWNhN2MwZDM0MzU2YTNmODFiMzcxMWIwZjYxNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMWM5NWM2Yzc0YjU0NjY3YjI5ZmNiODcwMWY2NjAyMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZDg3YTZlNjUxOGE0ZjE4OTcyM2E2MTY0YTg4Y2UwMSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2Q4N2E2ZTY1MThhNGYxODk3MjNhNjE2NGE4OGNlMDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAwMzEgU2Nocm9uaXNrbyBOYSBTemN6ZWxpxYRjdSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxYzk1YzZjNzRiNTQ2NjdiMjlmY2I4NzAxZjY2MDIwLnNldENvbnRlbnQoaHRtbF83ZDg3YTZlNjUxOGE0ZjE4OTcyM2E2MTY0YTg4Y2UwMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdmYjQzNWE0YjFiZDQ2ZWZhYTgyODI2YTIwYTFmZTZiLmJpbmRQb3B1cChwb3B1cF8wMWM5NWM2Yzc0YjU0NjY3YjI5ZmNiODcwMWY2NjAyMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wOGFhYzFmNjlkOTc0NmYzODYwNjYxMDM0YTcyOThkNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY4NTUwNSwxNi4yNzc4NzYwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYjYzNWQ2Nzg0NzI0NDIzYzk0NDdiNWY2NjNkYWFjZWEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDhhYWMxZjY5ZDk3NDZmMzg2MDY2MTAzNGE3Mjk4ZDcuc2V0SWNvbihpY29uX2I2MzVkNjc4NDcyNDQyM2M5NDQ3YjVmNjYzZGFhY2VhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiN2QwNWIyYzM4NjRhNzhiMWVjYzM1YjUxOWUwMzI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg0NGU2MTNiMjI2MTRmMTRiMmFhYTg1OWRjN2YxNmVlID0gJCgnPGRpdiBpZD0iaHRtbF84NDRlNjEzYjIyNjE0ZjE0YjJhYWE4NTlkYzdmMTZlZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDAzMiBTY2hyb25pc2tvIEFuZHJ6ZWrDs3drYSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiN2QwNWIyYzM4NjRhNzhiMWVjYzM1YjUxOWUwMzI3LnNldENvbnRlbnQoaHRtbF84NDRlNjEzYjIyNjE0ZjE0YjJhYWE4NTlkYzdmMTZlZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA4YWFjMWY2OWQ5NzQ2ZjM4NjA2NjEwMzRhNzI5OGQ3LmJpbmRQb3B1cChwb3B1cF84YjdkMDViMmMzODY0YTc4YjFlY2MzNWI1MTllMDMyNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNzUxN2U3MzIwMmQ0YWM4OWE3ODg1YTcyMDE4Y2U3YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjM5MTYwNSwxNi4zOTgwNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8yMGRhNTJjMjI5NjA0MzA0OTY1NDVmYTQxNDcwMDA2YSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kNzUxN2U3MzIwMmQ0YWM4OWE3ODg1YTcyMDE4Y2U3Yi5zZXRJY29uKGljb25fMjBkYTUyYzIyOTYwNDMwNDk2NTQ1ZmE0MTQ3MDAwNmEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWY3YzA3ZDkxN2VjNGU5ZGIwYWY4ZTcyZWY1NjUzMGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTE3NjFlMGY5NzBjNGUxZjk0MjFiMDAxYTk3NGMyYzggPSAkKCc8ZGl2IGlkPSJodG1sXzkxNzYxZTBmOTcwYzRlMWY5NDIxYjAwMWE5NzRjMmM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDM3IFNjaHJvbmlza28gUG9kIE11ZmxvbmVtICA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FmN2MwN2Q5MTdlYzRlOWRiMGFmOGU3MmVmNTY1MzBmLnNldENvbnRlbnQoaHRtbF85MTc2MWUwZjk3MGM0ZTFmOTQyMWIwMDFhOTc0YzJjOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q3NTE3ZTczMjAyZDRhYzg5YTc4ODVhNzIwMThjZTdiLmJpbmRQb3B1cChwb3B1cF9hZjdjMDdkOTE3ZWM0ZTlkYjBhZjhlNzJlZjU2NTMwZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zNGNmZTVjN2U0MTc0NjU0YjhhZmQyZThjNTgwMTJjMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjkwMDE5MSwxNi43NDQyMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81MjhkMjBhMjhjNDA0OGI5YWU3YjRlZWNhM2IwZTYyZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zNGNmZTVjN2U0MTc0NjU0YjhhZmQyZThjNTgwMTJjMy5zZXRJY29uKGljb25fNTI4ZDIwYTI4YzQwNDhiOWFlN2I0ZWVjYTNiMGU2MmUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzYyMDJmMjkzNWVhNGIwMjg3MjNkMTczYTg1ZTYxMTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODE1Mjk3Njc5MmQxNDc5M2E3NWUxOGYyMTI0ZDU4ZmIgPSAkKCc8ZGl2IGlkPSJodG1sXzgxNTI5NzY3OTJkMTQ3OTNhNzVlMThmMjEyNGQ1OGZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDQzIFNvYsOzdGthIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzYyMDJmMjkzNWVhNGIwMjg3MjNkMTczYTg1ZTYxMTMuc2V0Q29udGVudChodG1sXzgxNTI5NzY3OTJkMTQ3OTNhNzVlMThmMjEyNGQ1OGZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzRjZmU1YzdlNDE3NDY1NGI4YWZkMmU4YzU4MDEyYzMuYmluZFBvcHVwKHBvcHVwXzc2MjAyZjI5MzVlYTRiMDI4NzIzZDE3M2E4NWU2MTEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E5NDgxN2Q1NDIyNzQ2NWRhZjE0NTQ0MWQ5MTk2ZDkxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjc3MDg0LDE2LjUzNzQyNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80MGIyOTNhY2M1YjY0NjYxOTM2OWM4OGU3Y2NjZWVhYyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hOTQ4MTdkNTQyMjc0NjVkYWYxNDU0NDFkOTE5NmQ5MS5zZXRJY29uKGljb25fNDBiMjkzYWNjNWI2NDY2MTkzNjljODhlN2NjY2VlYWMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTUxMjE2MTFkNGY3NGUxYzhiZTk2YjgxN2ZkYzNmMzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGRiODZkNjFiNTUzNDJmNTk0NDE3NDBhNzQxNzNhYWEgPSAkKCc8ZGl2IGlkPSJodG1sXzRkYjg2ZDYxYjU1MzQyZjU5NDQxNzQwYTc0MTczYWFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDQ1IFNjaHJvbmlza28gSmFnb2RuYSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU1MTIxNjExZDRmNzRlMWM4YmU5NmI4MTdmZGMzZjM2LnNldENvbnRlbnQoaHRtbF80ZGI4NmQ2MWI1NTM0MmY1OTQ0MTc0MGE3NDE3M2FhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E5NDgxN2Q1NDIyNzQ2NWRhZjE0NTQ0MWQ5MTk2ZDkxLmJpbmRQb3B1cChwb3B1cF81NTEyMTYxMWQ0Zjc0ZTFjOGJlOTZiODE3ZmRjM2YzNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zYTk3YmM5NDgzNDA0NGJkYmNlYTE4ZjdmMWE1OTZjOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjYzMjg1NSwxNi41MTEwMDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjkyNzNmZDA2NzFlNGM4OWI2ZGEwNmY4ODNjYjdmNDMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfM2E5N2JjOTQ4MzQwNDRiZGJjZWExOGY3ZjFhNTk2Yzguc2V0SWNvbihpY29uXzY5MjczZmQwNjcxZTRjODliNmRhMDZmODgzY2I3ZjQzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg2MTMxOWIwMTc3NDQzZjBiODJhMDcyNzljOGYyMGQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE3M2RjZDBlZTE1ZjQzODJhYTlhYWEwNmQ0MDM4ODFjID0gJCgnPGRpdiBpZD0iaHRtbF8xNzNkY2QwZWUxNWY0MzgyYWE5YWFhMDZkNDAzODgxYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA0NiBTY2hyb25pc2tvIFp5Z211bnTDs3drYSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg2MTMxOWIwMTc3NDQzZjBiODJhMDcyNzljOGYyMGQ3LnNldENvbnRlbnQoaHRtbF8xNzNkY2QwZWUxNWY0MzgyYWE5YWFhMDZkNDAzODgxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNhOTdiYzk0ODM0MDQ0YmRiY2VhMThmN2YxYTU5NmM4LmJpbmRQb3B1cChwb3B1cF84NjEzMTliMDE3NzQ0M2YwYjgyYTA3Mjc5YzhmMjBkNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iOTc2ZmU4MWRlMDE0ZmQxODNmMTU4ZDk2YWVhZjY5MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjQ4NTgzMywxNi4zMzkxNjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzZlNzBmOGFhYTM3NDYwZTgxZTY2ZTUzMjgxNTRiZjggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjk3NmZlODFkZTAxNGZkMTgzZjE1OGQ5NmFlYWY2OTMuc2V0SWNvbihpY29uX2M2ZTcwZjhhYWEzNzQ2MGU4MWU2NmU1MzI4MTU0YmY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRmMGI1ZDc2OTM3ODRiYzY4OTBiOWFlODM4OGI2NzUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJhNDUzOTcxYmU1MzQyMzU5MmJmNGE3MzQ1YWI2OTM5ID0gJCgnPGRpdiBpZD0iaHRtbF8yYTQ1Mzk3MWJlNTM0MjM1OTJiZjRhNzM0NWFiNjkzOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDA2MCBTemN6ZWxpbmllYyBXaWVsa2kgIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGYwYjVkNzY5Mzc4NGJjNjg5MGI5YWU4Mzg4YjY3NTAuc2V0Q29udGVudChodG1sXzJhNDUzOTcxYmU1MzQyMzU5MmJmNGE3MzQ1YWI2OTM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjk3NmZlODFkZTAxNGZkMTgzZjE1OGQ5NmFlYWY2OTMuYmluZFBvcHVwKHBvcHVwXzRmMGI1ZDc2OTM3ODRiYzY4OTBiOWFlODM4OGI2NzUwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI2MGZmZWEyYzdiMjRkYjU5MjZkMTc0ZmNiYzdjODUwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjY2NTc3LDE2LjA2OTA3NjAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85MzRjYWM5YThjYTg0NGNkOTg5NGQwMjc5OGYwYTg3YyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yNjBmZmVhMmM3YjI0ZGI1OTI2ZDE3NGZjYmM3Yzg1MC5zZXRJY29uKGljb25fOTM0Y2FjOWE4Y2E4NDRjZDk4OTRkMDI3OThmMGE4N2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDVkYmNhZDg2YjVhNDkzODk2ZjdkOTljMzQ0ZGRjYTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2I0NGFhNzg0MGExNDU2ZGE3YTUyMTQwZjJlZjhkMzcgPSAkKCc8ZGl2IGlkPSJodG1sXzNiNDRhYTc4NDBhMTQ1NmRhN2E1MjE0MGYyZWY4ZDM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMDk3IFJ5bmVrIHcgQ2hlxYJtc2t1IMWabMSFc2tpbSDigJMga2FtaWVuaWNlIHBvZGNpZW5pb3dlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNWRiY2FkODZiNWE0OTM4OTZmN2Q5OWMzNDRkZGNhNy5zZXRDb250ZW50KGh0bWxfM2I0NGFhNzg0MGExNDU2ZGE3YTUyMTQwZjJlZjhkMzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNjBmZmVhMmM3YjI0ZGI1OTI2ZDE3NGZjYmM3Yzg1MC5iaW5kUG9wdXAocG9wdXBfZDVkYmNhZDg2YjVhNDkzODk2ZjdkOTljMzQ0ZGRjYTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjQ5NTQyMWJiZDViNDQ4ZjkyNWVmYzFlMzhjZWFlNTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42NjYxMTcsMTYuMDcyNDc1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2IzZmVjMjMyNWZkYjQxNmE4OTEyNTJhNzlkN2QxOWFjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2I0OTU0MjFiYmQ1YjQ0OGY5MjVlZmMxZTM4Y2VhZTU2LnNldEljb24oaWNvbl9iM2ZlYzIzMjVmZGI0MTZhODkxMjUyYTc5ZDdkMTlhYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZjBmMzZiMjQ3NTk0YTg0YjIxNzMxODE5MWJiZjhmMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMDc2OWI4Mjc0YjA0NTdkOWVkY2MyZTU1OTYyMGE2NyA9ICQoJzxkaXYgaWQ9Imh0bWxfYzA3NjliODI3NGIwNDU3ZDllZGNjMmU1NTk2MjBhNjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxMDQgRG9teSBUa2FjenkgdyBDaGXFgm1za3UgxZpsxIVza2ltPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZjBmMzZiMjQ3NTk0YTg0YjIxNzMxODE5MWJiZjhmMC5zZXRDb250ZW50KGh0bWxfYzA3NjliODI3NGIwNDU3ZDllZGNjMmU1NTk2MjBhNjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNDk1NDIxYmJkNWI0NDhmOTI1ZWZjMWUzOGNlYWU1Ni5iaW5kUG9wdXAocG9wdXBfZWYwZjM2YjI0NzU5NGE4NGIyMTczMTgxOTFiYmY4ZjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzNhNjdlNmVmYmFiNDU2ZGIxZTI4MzFlNjJlNzY0YjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC41MjUyNTMsMTYuNDgzOTM1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2JlNjNmMzQ0Y2RjZjQxM2FhZTE0MWU3OGMwY2M2ZjhmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzMzYTY3ZTZlZmJhYjQ1NmRiMWUyODMxZTYyZTc2NGIyLnNldEljb24oaWNvbl9iZTYzZjM0NGNkY2Y0MTNhYWUxNDFlNzhjMGNjNmY4Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OTVhNDQ0Yzg0MTE0YThjOGRhNmExYWVmODI2NmQwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MDczMWIzNmViMjY0NDFlYmM2YjI5ZmMyYzcxYzNmMiA9ICQoJzxkaXYgaWQ9Imh0bWxfOTA3MzFiMzZlYjI2NDQxZWJjNmIyOWZjMmM3MWMzZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxMTMgWmFtZWsgS2FwaXRhbm93byB3IMWaY2luYXdjZSDFmnJlZG5pZWo8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc5NWE0NDRjODQxMTRhOGM4ZGE2YTFhZWY4MjY2ZDAyLnNldENvbnRlbnQoaHRtbF85MDczMWIzNmViMjY0NDFlYmM2YjI5ZmMyYzcxYzNmMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzMzYTY3ZTZlZmJhYjQ1NmRiMWUyODMxZTYyZTc2NGIyLmJpbmRQb3B1cChwb3B1cF83OTVhNDQ0Yzg0MTE0YThjOGRhNmExYWVmODI2NmQwMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lZTI2YzA1MWNiOGU0MzQwODU2YzE2YTY5NzIxNGI2YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjQ1MTYyLDE2LjI0MTk4MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl83ZDExNjMzZjJmMGE0ZmJiYTNlOTA4N2Q4YmJkNjliMSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lZTI2YzA1MWNiOGU0MzQwODU2YzE2YTY5NzIxNGI2Yi5zZXRJY29uKGljb25fN2QxMTYzM2YyZjBhNGZiYmEzZTkwODdkOGJiZDY5YjEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjA3OTMxMmJkYjdiNGRhNGE4NDhlYjNlMGE3NDgzOGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjMyMWMzYTAxZDNkNDVkYmEzMGZhZWMwNmUxOTdkMjIgPSAkKCc8ZGl2IGlkPSJodG1sXzYzMjFjM2EwMWQzZDQ1ZGJhMzBmYWVjMDZlMTk3ZDIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTE0IEthcGxpY2EgQ3phc3playAtIEN6ZXJtbmEgLSBTYW5rdHVhcml1bSBNaWxjemVuaWEgaSBaYWR1bXk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwNzkzMTJiZGI3YjRkYTRhODQ4ZWIzZTBhNzQ4MzhhLnNldENvbnRlbnQoaHRtbF82MzIxYzNhMDFkM2Q0NWRiYTMwZmFlYzA2ZTE5N2QyMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2VlMjZjMDUxY2I4ZTQzNDA4NTZjMTZhNjk3MjE0YjZiLmJpbmRQb3B1cChwb3B1cF9iMDc5MzEyYmRiN2I0ZGE0YTg0OGViM2UwYTc0ODM4YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MjllOTY5YWQzZjQ0OWEyODYyZjhhZDEyNjE4YWI5MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjg2NTMxNSwxNi43MDkzNzYwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZGNjZWVhNWEyMWMyNDk3YWIzZmJkZWVmNmRkOTZhODQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjI5ZTk2OWFkM2Y0NDlhMjg2MmY4YWQxMjYxOGFiOTEuc2V0SWNvbihpY29uX2RjY2VlYTVhMjFjMjQ5N2FiM2ZiZGVlZjZkZDk2YTg0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzZmE3MzA2ZjNjYTQwNTk5NTdjYTg0ZmU1OGM4MzAzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxNDViZTU3MzBhMTRmMzRhMjBiNWZkZjlkMThlZThkID0gJCgnPGRpdiBpZD0iaHRtbF9kMTQ1YmU1NzMwYTE0ZjM0YTIwYjVmZGY5ZDE4ZWU4ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDExNSBEb20gVHVyeXN0eSBQVFRLIOKAkyBHw7NyYSDFmmzEmcW8YTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTNmYTczMDZmM2NhNDA1OTk1N2NhODRmZTU4YzgzMDMuc2V0Q29udGVudChodG1sX2QxNDViZTU3MzBhMTRmMzRhMjBiNWZkZjlkMThlZThkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjI5ZTk2OWFkM2Y0NDlhMjg2MmY4YWQxMjYxOGFiOTEuYmluZFBvcHVwKHBvcHVwXzUzZmE3MzA2ZjNjYTQwNTk5NTdjYTg0ZmU1OGM4MzAzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JlMWYzNTcyNDIwYjRhMDhiYTI5ZjA0OWY3M2Q2N2Y1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMzkzODE3LDE2LjM4NDA3OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lN2IxYTNlMGMwMjk0YjdmOGNmNWMzNjhlOTY2NTg5ZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iZTFmMzU3MjQyMGI0YTA4YmEyOWYwNDlmNzNkNjdmNS5zZXRJY29uKGljb25fZTdiMWEzZTBjMDI5NGI3ZjhjZjVjMzY4ZTk2NjU4OWYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2RiN2U0NGM4NDczNDg5ZmExODU1N2M3M2Y1ZmVlMDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGIyMTUwOTU1ODkwNGI3MWJhOGQ2NDllZmU1M2IxNWQgPSAkKCc8ZGl2IGlkPSJodG1sXzRiMjE1MDk1NTg5MDRiNzFiYThkNjQ5ZWZlNTNiMTVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTE2IFRlYXRyIFpkcm9qb3d5IGltLiBGcnlkZXJ5a2EgQ2hvcGluYSB3IER1c3puaWthY2gg4oCTIFpkcm9qdTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2RiN2U0NGM4NDczNDg5ZmExODU1N2M3M2Y1ZmVlMDguc2V0Q29udGVudChodG1sXzRiMjE1MDk1NTg5MDRiNzFiYThkNjQ5ZWZlNTNiMTVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmUxZjM1NzI0MjBiNGEwOGJhMjlmMDQ5ZjczZDY3ZjUuYmluZFBvcHVwKHBvcHVwXzNkYjdlNDRjODQ3MzQ4OWZhMTg1NTdjNzNmNWZlZTA4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzMxNDdiNDE2MTViMTQyN2RiYTQwN2UwYWIwZmExYzIyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDk1NDQsMTYuNzQ4ODc5MDAwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2M5MTM3NDQzNzI2NDQ0NDU4MTg5MzI5ZjUzNWZlMjk5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzMxNDdiNDE2MTViMTQyN2RiYTQwN2UwYWIwZmExYzIyLnNldEljb24oaWNvbl9jOTEzNzQ0MzcyNjQ0NDQ1ODE4OTMyOWY1MzVmZTI5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOWRiZWZhYmJjMzU0ZjUxODhjY2E0NDQ0YjA4YTIwMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNDA5Y2U2NmExOGM0ZTg4ODhkZjIwNWZjMTk5MDU1YyA9ICQoJzxkaXYgaWQ9Imh0bWxfMzQwOWNlNjZhMThjNGU4ODg4ZGYyMDVmYzE5OTA1NWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxMTcgS2FwbGljYSBHw7Nyc2thIG5hIEfDs3J6ZSBLYWx3YXJpaSB3IEJhcmR6aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5ZGJlZmFiYmMzNTRmNTE4OGNjYTQ0NDRiMDhhMjAwLnNldENvbnRlbnQoaHRtbF8zNDA5Y2U2NmExOGM0ZTg4ODhkZjIwNWZjMTk5MDU1Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzMxNDdiNDE2MTViMTQyN2RiYTQwN2UwYWIwZmExYzIyLmJpbmRQb3B1cChwb3B1cF8zOWRiZWZhYmJjMzU0ZjUxODhjY2E0NDQ0YjA4YTIwMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NmE1YjI1ODgxYzk0ZTBlYTBkNDFiYmZjOTliYzFmMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjc2NTI2NywxNi4yNzk5MTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZmY3NmVhNTYyYjhmNDdlN2I4NmQyZTI2MjFmNzI4NzUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOTZhNWIyNTg4MWM5NGUwZWEwZDQxYmJmYzk5YmMxZjAuc2V0SWNvbihpY29uX2ZmNzZlYTU2MmI4ZjQ3ZTdiODZkMmUyNjIxZjcyODc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwZWM4YWI4ZDU2NzRhMDNiMTkyNzA3MTYzYTZjMjFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M2ZWY0MTczZjY5YTRhNDhhYTA5OGNkNTQ3MzVjMmZmID0gJCgnPGRpdiBpZD0iaHRtbF9jNmVmNDE3M2Y2OWE0YTQ4YWEwOThjZDU0NzM1YzJmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDExOCBNdXpldW0gUG9yY2VsYW55IHcgV2HFgmJyenljaHU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwZWM4YWI4ZDU2NzRhMDNiMTkyNzA3MTYzYTZjMjFhLnNldENvbnRlbnQoaHRtbF9jNmVmNDE3M2Y2OWE0YTQ4YWEwOThjZDU0NzM1YzJmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk2YTViMjU4ODFjOTRlMGVhMGQ0MWJiZmM5OWJjMWYwLmJpbmRQb3B1cChwb3B1cF81MGVjOGFiOGQ1Njc0YTAzYjE5MjcwNzE2M2E2YzIxYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kMjU0NzNlNjY3NWU0OTY5YWU1MWY3MzNmMmNiZmI1YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjkxNTM1MiwxNi40MzUyNjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNWE5MjU5M2MwNjM4NDBiNmI4YTE4NjI4OTc0MDZjNjMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZDI1NDczZTY2NzVlNDk2OWFlNTFmNzMzZjJjYmZiNWEuc2V0SWNvbihpY29uXzVhOTI1OTNjMDYzODQwYjZiOGExODYyODk3NDA2YzYzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRiOTI4N2NkNGY0OTRlODg5ZGJlYTBiNDc4ZjgwNGE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U4ZmMzZGE0YTc0YjQxN2E4ZjBkMGNlOGQ3MjRhNDcxID0gJCgnPGRpdiBpZD0iaHRtbF9lOGZjM2RhNGE3NGI0MTdhOGYwZDBjZThkNzI0YTQ3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDExOSBNdXpldW0gUHJ6ZW15c8WCdSBpIEtvbGVqbmljdHdhIG5hIMWabMSFc2t1IHcgSmF3b3J6eW5pZSDFmmzEhXNraWVqPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YjkyODdjZDRmNDk0ZTg4OWRiZWEwYjQ3OGY4MDRhOS5zZXRDb250ZW50KGh0bWxfZThmYzNkYTRhNzRiNDE3YThmMGQwY2U4ZDcyNGE0NzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMjU0NzNlNjY3NWU0OTY5YWU1MWY3MzNmMmNiZmI1YS5iaW5kUG9wdXAocG9wdXBfNGI5Mjg3Y2Q0ZjQ5NGU4ODlkYmVhMGI0NzhmODA0YTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjU0YTkzNDI3NzRjNDVjZjgzOTQ2YmExMmExZmFmYjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC40MDQ0NzUsMTYuMzk1NTUyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzkyY2YwMWEyMWRjYzQzMmE5ZDFhM2JjMmIzZTgyMjUwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzI1NGE5MzQyNzc0YzQ1Y2Y4Mzk0NmJhMTJhMWZhZmI0LnNldEljb24oaWNvbl85MmNmMDFhMjFkY2M0MzJhOWQxYTNiYzJiM2U4MjI1MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOTA2ZWMwMDg5OTM0ZjNhYTUwMmEzNzhmZWI3NTMwYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82Njg0ZjNmODYxZWU0ZWNiOTgzODk1NDBhOTkwZTNlMyA9ICQoJzxkaXYgaWQ9Imh0bWxfNjY4NGYzZjg2MWVlNGVjYjk4Mzg5NTQwYTk5MGUzZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxMjAgTXV6ZXVtIFBhcGllcm5pY3R3YSB3IER1c3puaWthY2gtWmRyb2p1IDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjkwNmVjMDA4OTkzNGYzYWE1MDJhMzc4ZmViNzUzMGIuc2V0Q29udGVudChodG1sXzY2ODRmM2Y4NjFlZTRlY2I5ODM4OTU0MGE5OTBlM2UzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjU0YTkzNDI3NzRjNDVjZjgzOTQ2YmExMmExZmFmYjQuYmluZFBvcHVwKHBvcHVwX2Y5MDZlYzAwODk5MzRmM2FhNTAyYTM3OGZlYjc1MzBiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2MzMzIwNGIwMmZmZTRmMjk5MTY5YjdjMTRlMjAzOGM4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjc5OTc4LDE2LjI3ODddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMmQyZWZjNmNlMTI0NGY4YWIzMjY0MmRjNGFkNzA5MDMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYzMzMjA0YjAyZmZlNGYyOTkxNjliN2MxNGUyMDM4Yzguc2V0SWNvbihpY29uXzJkMmVmYzZjZTEyNDRmOGFiMzI2NDJkYzRhZDcwOTAzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgyN2NhYzVjZDhlMDQzNWY4MGQ5YTBkOTIwZWM1ZGI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4MzQyOWU2OThjNjQ1ZTBhYjNkY2RhZGRjZmJmYTQ5ID0gJCgnPGRpdiBpZD0iaHRtbF9iODM0MjllNjk4YzY0NWUwYWIzZGNkYWRkY2ZiZmE0OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDEyMSBXYWxpZ8OzcmEg4oCTIG5hand5xbxzenkgc3pjenl0IEfDs3IgS2FtaWVubnljaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODI3Y2FjNWNkOGUwNDM1ZjgwZDlhMGQ5MjBlYzVkYjguc2V0Q29udGVudChodG1sX2I4MzQyOWU2OThjNjQ1ZTBhYjNkY2RhZGRjZmJmYTQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzMzMjA0YjAyZmZlNGYyOTkxNjliN2MxNGUyMDM4YzguYmluZFBvcHVwKHBvcHVwXzgyN2NhYzVjZDhlMDQzNWY4MGQ5YTBkOTIwZWM1ZGI4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzYwYzQ3Yjk0OWY1ODQwNDU5ZjQwZTU5NzVkYTBiYjliID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuODQyMzI2LDE2LjI5MTY1OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82YjVjOTljZTMwMTE0YjU2YTQyZWRjOTVmY2RkMDA3MCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82MGM0N2I5NDlmNTg0MDQ1OWY0MGU1OTc1ZGEwYmI5Yi5zZXRJY29uKGljb25fNmI1Yzk5Y2UzMDExNGI1NmE0MmVkYzk1ZmNkZDAwNzApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTc0ZDQyZWVhZDU0NDkwNjk1ODdiMmNkMGZmOGNiMDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjU5YzAyZjIyMmQ2NGNhOWI4ODQ2NGE5ZDVhYWNlMzUgPSAkKCc8ZGl2IGlkPSJodG1sXzI1OWMwMmYyMjJkNjRjYTliODg0NjRhOWQ1YWFjZTM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTIyIFphbWVrIEtzacSFxbwgdyBXYcWCYnJ6eWNodTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTc0ZDQyZWVhZDU0NDkwNjk1ODdiMmNkMGZmOGNiMDQuc2V0Q29udGVudChodG1sXzI1OWMwMmYyMjJkNjRjYTliODg0NjRhOWQ1YWFjZTM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjBjNDdiOTQ5ZjU4NDA0NTlmNDBlNTk3NWRhMGJiOWIuYmluZFBvcHVwKHBvcHVwXzE3NGQ0MmVlYWQ1NDQ5MDY5NTg3YjJjZDBmZjhjYjA0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUzOWI2YmY5OTNiNDRkMzk4ZGMzNjRkNmU0YzI3OWM3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjY0MjA3LDE2LjQ3MzE4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lYWRjOTBmZjM3OTA0ZDc2OTI2NGY0NDYwMDlmOGQ4NyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81MzliNmJmOTkzYjQ0ZDM5OGRjMzY0ZDZlNGMyNzljNy5zZXRJY29uKGljb25fZWFkYzkwZmYzNzkwNGQ3NjkyNjRmNDQ2MDA5ZjhkODcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmNkOGJmOTRjMTFiNGY0Zjg3MTRkMmVjZmYzM2FhZjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmQ5ODI4M2FiOWQzNDliMGJkMmUxNGYxNGVmOGE3NmYgPSAkKCc8ZGl2IGlkPSJodG1sX2ZkOTgyODNhYjlkMzQ5YjBiZDJlMTRmMTRlZjhhNzZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTIzIFNjaHJvbmlza28gZ8OzcnNraWUgT3J6ZcWCIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmNkOGJmOTRjMTFiNGY0Zjg3MTRkMmVjZmYzM2FhZjcuc2V0Q29udGVudChodG1sX2ZkOTgyODNhYjlkMzQ5YjBiZDJlMTRmMTRlZjhhNzZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTM5YjZiZjk5M2I0NGQzOThkYzM2NGQ2ZTRjMjc5YzcuYmluZFBvcHVwKHBvcHVwX2ZjZDhiZjk0YzExYjRmNGY4NzE0ZDJlY2ZmMzNhYWY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJhNjc5Nzg5ZmRmOTRlMzJiZTZiMDFhM2EwYmNiODY0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNTc5MjY4LDE2LjUwMTY2Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jM2NkNThkMzc0NjQ0Y2RmYjVhMTQzMWM5MzVmYmI4NSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yYTY3OTc4OWZkZjk0ZTMyYmU2YjAxYTNhMGJjYjg2NC5zZXRJY29uKGljb25fYzNjZDU4ZDM3NDY0NGNkZmI1YTE0MzFjOTM1ZmJiODUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzJhNmU0NTE0NWI5NDE0ZTgyYjAyY2FhN2RhYTdlY2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWJhZWUwYmQ1ZDVkNDg5YTk2Y2ViZGI1NDkxZDhkZTEgPSAkKCc8ZGl2IGlkPSJodG1sX2FiYWVlMGJkNWQ1ZDQ4OWE5NmNlYmRiNTQ5MWQ4ZGUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTI0IE5vd2EgUnVkYSAtIFJhdHVzeiA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyYTZlNDUxNDViOTQxNGU4MmIwMmNhYTdkYWE3ZWNjLnNldENvbnRlbnQoaHRtbF9hYmFlZTBiZDVkNWQ0ODlhOTZjZWJkYjU0OTFkOGRlMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJhNjc5Nzg5ZmRmOTRlMzJiZTZiMDFhM2EwYmNiODY0LmJpbmRQb3B1cChwb3B1cF8zMmE2ZTQ1MTQ1Yjk0MTRlODJiMDJjYWE3ZGFhN2VjYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85OGE5OGNmNTU5M2Q0MmE1YmNlMjE2YjhlYzI0NjU5NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjcxMjM0NCwxNi4zNTkyNTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMTczMWVjOGU5NzI4NDE2NWIxMjg0YmQ0NDQ0MGYyYzIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOThhOThjZjU1OTNkNDJhNWJjZTIxNmI4ZWMyNDY1OTQuc2V0SWNvbihpY29uXzE3MzFlYzhlOTcyODQxNjViMTI4NGJkNDQ0NDBmMmMyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NlMjhiMGY0ZDgxNzQxMzlhMjgxNWZjMDVkZTllNmZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VmM2NkNmYxZDVmNjRiN2FhNzVhZWE3NDZkNjYzMDBmID0gJCgnPGRpdiBpZD0iaHRtbF9lZjNjZDZmMWQ1ZjY0YjdhYTc1YWVhNzQ2ZDY2MzAwZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDEyNSBaZXNww7PFgiBQYcWCYWNvd28tSG90ZWxvd3kgdyBKZWRsaW5jZSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NlMjhiMGY0ZDgxNzQxMzlhMjgxNWZjMDVkZTllNmZjLnNldENvbnRlbnQoaHRtbF9lZjNjZDZmMWQ1ZjY0YjdhYTc1YWVhNzQ2ZDY2MzAwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk4YTk4Y2Y1NTkzZDQyYTViY2UyMTZiOGVjMjQ2NTk0LmJpbmRQb3B1cChwb3B1cF9jZTI4YjBmNGQ4MTc0MTM5YTI4MTVmYzA1ZGU5ZTZmYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wNzhmOGM0Mzg2MmE0N2Y1OTUwNzk2NDFlYWZkZDEzZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY2OTY4MSwxNi40MTgzNjQ5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZDU1MzUzNzVkNjI3NGU1MGI3ZmVkNTBlZmMxMzI0ZmQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDc4ZjhjNDM4NjJhNDdmNTk1MDc5NjQxZWFmZGQxM2Quc2V0SWNvbihpY29uX2Q1NTM1Mzc1ZDYyNzRlNTBiN2ZlZDUwZWZjMTMyNGZkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU4YjUyZGJjMzRkNjRmOTliM2JhYzY0ZTQzZTlkZWVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdkYTFlYzgzMzI0ZTQ4MjliY2FhNWZlYTQ3NzlmNzZlID0gJCgnPGRpdiBpZD0iaHRtbF83ZGExZWM4MzMyNGU0ODI5YmNhYTVmZWE0Nzc5Zjc2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDEyNiBQb2R6aWVtbmUgTWlhc3RvIE9zw7N3a2EgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81OGI1MmRiYzM0ZDY0Zjk5YjNiYWM2NGU0M2U5ZGVlZC5zZXRDb250ZW50KGh0bWxfN2RhMWVjODMzMjRlNDgyOWJjYWE1ZmVhNDc3OWY3NmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wNzhmOGM0Mzg2MmE0N2Y1OTUwNzk2NDFlYWZkZDEzZC5iaW5kUG9wdXAocG9wdXBfNThiNTJkYmMzNGQ2NGY5OWIzYmFjNjRlNDNlOWRlZWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjEyOTZjZWM4ODdlNGQzNWEwOTI1ZGQzYjNjOTVkNGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC44NDI1MzYsMTYuNDg2NzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZTg2ZmNjZDAzYTgxNDRjZWE4MTY5ZjNlMGU4ZmZiZWEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjEyOTZjZWM4ODdlNGQzNWEwOTI1ZGQzYjNjOTVkNGIuc2V0SWNvbihpY29uX2U4NmZjY2QwM2E4MTQ0Y2VhODE2OWYzZTBlOGZmYmVhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzExYWM5MGQxM2FlMjRiYmU4NjNkY2JmNGM0NmZmZDQxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFiNGY2MzkxMTFhODQwMmZhNmQ5ZjZlM2Q0OTRiNjY2ID0gJCgnPGRpdiBpZD0iaHRtbF8xYjRmNjM5MTExYTg0MDJmYTZkOWY2ZTNkNDk0YjY2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDEyNyBXaWXFvGEgUmF0dXN6b3dhIHcgxZp3aWRuaWN5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMWFjOTBkMTNhZTI0YmJlODYzZGNiZjRjNDZmZmQ0MS5zZXRDb250ZW50KGh0bWxfMWI0ZjYzOTExMWE4NDAyZmE2ZDlmNmUzZDQ5NGI2NjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82MTI5NmNlYzg4N2U0ZDM1YTA5MjVkZDNiM2M5NWQ0Yi5iaW5kUG9wdXAocG9wdXBfMTFhYzkwZDEzYWUyNGJiZTg2M2RjYmY0YzQ2ZmZkNDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWY0OTdjOWQ5ZmMxNDQyMmEwNWMyZGNmMTI2MDVkZDMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC43NDk3NDUsMTYuNDEwNzU3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzMwMTA2ZWNjMTk2NjRlYWViMmJlMjcxZmQ4ODBhMmE1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzlmNDk3YzlkOWZjMTQ0MjJhMDVjMmRjZjEyNjA1ZGQzLnNldEljb24oaWNvbl8zMDEwNmVjYzE5NjY0ZWFlYjJiZTI3MWZkODgwYTJhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNzVkNjFlMGQ3MDg0NzAwYTgxNzAzN2M4ZmExOGY2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGE2ZmNhNWU2NmY0ZDhhODBmNDlhM2UxNDEzMDZkZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjhhNmZjYTVlNjZmNGQ4YTgwZjQ5YTNlMTQxMzA2ZGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxMjggWmFtZWsgR3JvZG5vIHcgWmFnw7NyenUgxZpsxIVza2ltPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNzVkNjFlMGQ3MDg0NzAwYTgxNzAzN2M4ZmExOGY2MC5zZXRDb250ZW50KGh0bWxfNjhhNmZjYTVlNjZmNGQ4YTgwZjQ5YTNlMTQxMzA2ZGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZjQ5N2M5ZDlmYzE0NDIyYTA1YzJkY2YxMjYwNWRkMy5iaW5kUG9wdXAocG9wdXBfYTc1ZDYxZTBkNzA4NDcwMGE4MTcwMzdjOGZhMThmNjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTIwYzEyYmFiMmFhNDk1OTg2NDZjNGU0NTlmZjM1MzcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42ODkwMzYsMTYuNDQ0OTI2MDAwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzg4OWMwODFhNzE3YTQzZWI4M2Q3YTU1NGJmMGJlNjhhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2EyMGMxMmJhYjJhYTQ5NTk4NjQ2YzRlNDU5ZmYzNTM3LnNldEljb24oaWNvbl84ODljMDgxYTcxN2E0M2ViODNkN2E1NTRiZjBiZTY4YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83N2RjYjY4MzY1YWU0Y2VjYjk4YWQ2ZjUwNzQ0N2IwZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OWE2MjY4OWE2OWM0YjZjYTYzOGU4N2JiZmNjYWVlYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDlhNjI2ODlhNjljNGI2Y2E2MzhlODdiYmZjY2FlZWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxMjkgU3p0b2xuaWUgV2FsaW1za2llIHcgR8OzcmFjaCBTb3dpY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc3ZGNiNjgzNjVhZTRjZWNiOThhZDZmNTA3NDQ3YjBmLnNldENvbnRlbnQoaHRtbF80OWE2MjY4OWE2OWM0YjZjYTYzOGU4N2JiZmNjYWVlYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2EyMGMxMmJhYjJhYTQ5NTk4NjQ2YzRlNDU5ZmYzNTM3LmJpbmRQb3B1cChwb3B1cF83N2RjYjY4MzY1YWU0Y2VjYjk4YWQ2ZjUwNzQ0N2IwZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zYjI2MzJiNDljNjQ0YjlkYmQ3OTljMDY5MTZhYjIyMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY4MDMyMSwxNi40ODU2ODI5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNmM5OGEwYjM5YTBkNDMxOTkzMjI3OTBkNmE4NDQ1MGQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfM2IyNjMyYjQ5YzY0NGI5ZGJkNzk5YzA2OTE2YWIyMjMuc2V0SWNvbihpY29uXzZjOThhMGIzOWEwZDQzMTk5MzIyNzkwZDZhODQ0NTBkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3NjgyZmFhN2Y3NjQzMzVhZjNkMzhmOTUzZTdhODI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg3MTMyMGE3ZDQ5ZDQwMmJiMDE0ZmVjNWZhMTAxZmVhID0gJCgnPGRpdiBpZD0iaHRtbF84NzEzMjBhN2Q0OWQ0MDJiYjAxNGZlYzVmYTEwMWZlYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDEzMCBXaWVsa2EgU293YSAtIHdpZcW8YSB3aWRva293YSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3NjgyZmFhN2Y3NjQzMzVhZjNkMzhmOTUzZTdhODI3LnNldENvbnRlbnQoaHRtbF84NzEzMjBhN2Q0OWQ0MDJiYjAxNGZlYzVmYTEwMWZlYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNiMjYzMmI0OWM2NDRiOWRiZDc5OWMwNjkxNmFiMjIzLmJpbmRQb3B1cChwb3B1cF9jNzY4MmZhYTdmNzY0MzM1YWYzZDM4Zjk1M2U3YTgyNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lYThiYWU3MjZjNjY0ODFkOWEzNjBkYTcxMjdlMjY5OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjcyODIwNywxNi42NTExMjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMTc5ZTQ2NWNhZGYxNDc5NjgxMDZkZDg4OGRjYTBiODkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZWE4YmFlNzI2YzY2NDgxZDlhMzYwZGE3MTI3ZTI2OTkuc2V0SWNvbihpY29uXzE3OWU0NjVjYWRmMTQ3OTY4MTA2ZGQ4ODhkY2EwYjg5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzYTY3YzUwY2RkOTQxNTg5NDUzOGE2YWI4MWUzYmIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE1MjVkM2Q3OWIzMTQ0M2U5YTFlMzc4OTgyMjljOGUwID0gJCgnPGRpdiBpZD0iaHRtbF8xNTI1ZDNkNzliMzE0NDNlOWExZTM3ODk4MjI5YzhlMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDEzMSBSYXR1c3ogdyBEemllcsW8b25pb3dpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTNhNjdjNTBjZGQ5NDE1ODk0NTM4YTZhYjgxZTNiYjEuc2V0Q29udGVudChodG1sXzE1MjVkM2Q3OWIzMTQ0M2U5YTFlMzc4OTgyMjljOGUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWE4YmFlNzI2YzY2NDgxZDlhMzYwZGE3MTI3ZTI2OTkuYmluZFBvcHVwKHBvcHVwXzkzYTY3YzUwY2RkOTQxNTg5NDUzOGE2YWI4MWUzYmIxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM5YmUwNDRhNDJkYTQ2NGFiMTNkMjlkN2I0ZDA5ODc2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNTc0MDgsMTYuNjQyMzAxOTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2RhZDY2ZTVjMDVjMzQyMmM5NTI1Zjk3ZjQyNDBlMzU2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzM5YmUwNDRhNDJkYTQ2NGFiMTNkMjlkN2I0ZDA5ODc2LnNldEljb24oaWNvbl9kYWQ2NmU1YzA1YzM0MjJjOTUyNWY5N2Y0MjQwZTM1Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83Y2ViZGJjNzFiZDQ0NzI2YTAyODQ4OTkxMTk4MzdlNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOGJmNzFmYjZiMzE0N2Q1YjNkNjU3NTdmOWRjZmZmNiA9ICQoJzxkaXYgaWQ9Imh0bWxfZjhiZjcxZmI2YjMxNDdkNWIzZDY1NzU3ZjlkY2ZmZjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxMzIgVHdpZXJkemEgU3JlYnJuYSBHz4xyYSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdjZWJkYmM3MWJkNDQ3MjZhMDI4NDg5OTExOTgzN2U0LnNldENvbnRlbnQoaHRtbF9mOGJmNzFmYjZiMzE0N2Q1YjNkNjU3NTdmOWRjZmZmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM5YmUwNDRhNDJkYTQ2NGFiMTNkMjlkN2I0ZDA5ODc2LmJpbmRQb3B1cChwb3B1cF83Y2ViZGJjNzFiZDQ0NzI2YTAyODQ4OTkxMTk4MzdlNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lMDI2YjY0YjJkY2E0MzA1YjcxZDc0NTYwOTgzZGIxMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjU4ODgyOSwxNi44MDk2Mzk5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNzBhMDE3MGU1OTIwNDg2YmI3MTdjMjNhMGRkM2VhOGUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTAyNmI2NGIyZGNhNDMwNWI3MWQ3NDU2MDk4M2RiMTAuc2V0SWNvbihpY29uXzcwYTAxNzBlNTkyMDQ4NmJiNzE3YzIzYTBkZDNlYThlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRiM2I2YTQxMjdjYTRiNjY5MTY0ZmJmM2FiMTJlMWMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E4NzEyODc4NDAxMTQ0YWY5Nzk2YTQ3YjFhMDBmNTIxID0gJCgnPGRpdiBpZD0iaHRtbF9hODcxMjg3ODQwMTE0NGFmOTc5NmE0N2IxYTAwZjUyMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDEzMyBLcnp5d2EgV2llxbxhIHcgWsSFYmtvd2ljYWNoIMWabMSFc2tpY2ggPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YjNiNmE0MTI3Y2E0YjY2OTE2NGZiZjNhYjEyZTFjMi5zZXRDb250ZW50KGh0bWxfYTg3MTI4Nzg0MDExNDRhZjk3OTZhNDdiMWEwMGY1MjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMDI2YjY0YjJkY2E0MzA1YjcxZDc0NTYwOTgzZGIxMC5iaW5kUG9wdXAocG9wdXBfNGIzYjZhNDEyN2NhNGI2NjkxNjRmYmYzYWIxMmUxYzIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjE1MWVmYWNjZjRiNDNjNGFhYWQ4MzRhY2NlOWM1MDggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC41ODg4OTYsMTYuODExMzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOTFjZGRkZTIzZTEwNGQ1YWI5NTNiMDc1NTY3MjI0OWEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjE1MWVmYWNjZjRiNDNjNGFhYWQ4MzRhY2NlOWM1MDguc2V0SWNvbihpY29uXzkxY2RkZGUyM2UxMDRkNWFiOTUzYjA3NTU2NzIyNDlhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhNWVhMjZiZTdlNzQ5ZmY4NGY4NjQyNjM4NjA3YWJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxODVjNTlhYzdlODQzZWE5MzY5Njc0NzQxYjc0ZDIwID0gJCgnPGRpdiBpZD0iaHRtbF8zMTg1YzU5YWM3ZTg0M2VhOTM2OTY3NDc0MWI3NGQyMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDEzNCBaxIVia293aWNlIMWabMSFc2tpZSDigJMgUmF0dXN6PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYTVlYTI2YmU3ZTc0OWZmODRmODY0MjYzODYwN2FiZi5zZXRDb250ZW50KGh0bWxfMzE4NWM1OWFjN2U4NDNlYTkzNjk2NzQ3NDFiNzRkMjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMTUxZWZhY2NmNGI0M2M0YWFhZDgzNGFjY2U5YzUwOC5iaW5kUG9wdXAocG9wdXBfZGE1ZWEyNmJlN2U3NDlmZjg0Zjg2NDI2Mzg2MDdhYmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTY1NmEyMWNlNjk3NGE2ZThjYmMzNGQwNTAxYWE2ZjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC41MjEwNTcsMTYuODgwODQxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2QyMzQ4YmRiNzIyMTRkNzRiOTQxNjk3YmU1ZGRjZmQxID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2E2NTZhMjFjZTY5NzRhNmU4Y2JjMzRkMDUwMWFhNmYzLnNldEljb24oaWNvbl9kMjM0OGJkYjcyMjE0ZDc0Yjk0MTY5N2JlNWRkY2ZkMSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YTYzOTkwMDk0NGI0ZTk4YjY1MjMyZGVhNDE0YWE5ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMTE0NWJmOTI4Mzk0M2RmODU2ZjA4ZDRiNTRlZGIzNSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzExNDViZjkyODM5NDNkZjg1NmYwOGQ0YjU0ZWRiMzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxMzUgUGHFgmFjIHcgS2FtaWXFhGN1IFrEhWJrb3dpY2tpbTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2E2Mzk5MDA5NDRiNGU5OGI2NTIzMmRlYTQxNGFhOWQuc2V0Q29udGVudChodG1sX2MxMTQ1YmY5MjgzOTQzZGY4NTZmMDhkNGI1NGVkYjM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTY1NmEyMWNlNjk3NGE2ZThjYmMzNGQwNTAxYWE2ZjMuYmluZFBvcHVwKHBvcHVwXzdhNjM5OTAwOTQ0YjRlOThiNjUyMzJkZWE0MTRhYTlkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAxZmYyN2M0MmExNzQ0MTg4MTMxOTNiYzg4NzA2OTI1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNTA0MzUyLDE2LjczNjIwNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hNzlmYzMxZDNlMzU0NTM4YTE3MTk1MWM0ZjE3MGEwYSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wMWZmMjdjNDJhMTc0NDE4ODEzMTkzYmM4ODcwNjkyNS5zZXRJY29uKGljb25fYTc5ZmMzMWQzZTM1NDUzOGExNzE5NTFjNGYxNzBhMGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzhlOTJiZWY2YmEyNDFmNjgxODVmYTYyZmQ3OTI3ZjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzE0NWUwNWFmNDkxNDEwODg5ODgzNTc0ZjJjNzk3ZGMgPSAkKCc8ZGl2IGlkPSJodG1sX2MxNDVlMDVhZjQ5MTQxMDg4OTg4MzU3NGYyYzc5N2RjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTM2IFByemXFgm9tIEJhcmR6a2kgLSBzcMWCeXd5IHBvbnRvbm93ZSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4ZTkyYmVmNmJhMjQxZjY4MTg1ZmE2MmZkNzkyN2Y2LnNldENvbnRlbnQoaHRtbF9jMTQ1ZTA1YWY0OTE0MTA4ODk4ODM1NzRmMmM3OTdkYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAxZmYyN2M0MmExNzQ0MTg4MTMxOTNiYzg4NzA2OTI1LmJpbmRQb3B1cChwb3B1cF9jOGU5MmJlZjZiYTI0MWY2ODE4NWZhNjJmZDc5MjdmNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mOTAxNjgzNGYwZDg0MTJjYWI1ZDUwNWY2Njg1MGUyMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjUwNTY4MiwxNi43NDA0MTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOGM3YzE3NDI3OTRlNGI4YWE3ZTJmMWM4NDAzZGIzZjUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZjkwMTY4MzRmMGQ4NDEyY2FiNWQ1MDVmNjY4NTBlMjIuc2V0SWNvbihpY29uXzhjN2MxNzQyNzk0ZTRiOGFhN2UyZjFjODQwM2RiM2Y1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIyMTA2MGRkY2Y5ZDRiMGQ5NzE0NTkyZTAyOGE1NjgwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlZWYyNzM4NjcxOTQ0MDBhZGNkNjViMjQ4Nzk1YjIyID0gJCgnPGRpdiBpZD0iaHRtbF9lZWVmMjczODY3MTk0NDAwYWRjZDY1YjI0ODc5NWIyMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDEzNyBTYW5rdHVhcml1bSBTdHJhxbxuaWN6a2kgV2lhcnkgdyBCYXJkemllIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjIxMDYwZGRjZjlkNGIwZDk3MTQ1OTJlMDI4YTU2ODAuc2V0Q29udGVudChodG1sX2VlZWYyNzM4NjcxOTQ0MDBhZGNkNjViMjQ4Nzk1YjIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjkwMTY4MzRmMGQ4NDEyY2FiNWQ1MDVmNjY4NTBlMjIuYmluZFBvcHVwKHBvcHVwXzIyMTA2MGRkY2Y5ZDRiMGQ5NzE0NTkyZTAyOGE1NjgwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQxYzZiZWM5ZmVjYTQ1YmU5OGI0NjhiM2U0MzhiNTcwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDM5NzgyLDE2Ljg3NDcxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzI2Y2QxZjg0MGZlNDRiOGRiODliMDJjZWY2NzU2Yjg0ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzQxYzZiZWM5ZmVjYTQ1YmU5OGI0NjhiM2U0MzhiNTcwLnNldEljb24oaWNvbl8yNmNkMWY4NDBmZTQ0YjhkYjg5YjAyY2VmNjc1NmI4NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNDE1M2Y0NTE2YTg0YzU2ODkwMzFkOWI2OGQ2MmJjNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jODczOWZhMmYwNjA0ODYyOGJjYzhjZjMxNmNmYmZlYyA9ICQoJzxkaXYgaWQ9Imh0bWxfYzg3MzlmYTJmMDYwNDg2MjhiY2M4Y2YzMTZjZmJmZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxMzggS29wYWxuaWEgWsWCb3RhIHcgWsWCb3R5bSBTdG9rdSA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0MTUzZjQ1MTZhODRjNTY4OTAzMWQ5YjY4ZDYyYmM1LnNldENvbnRlbnQoaHRtbF9jODczOWZhMmYwNjA0ODYyOGJjYzhjZjMxNmNmYmZlYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQxYzZiZWM5ZmVjYTQ1YmU5OGI0NjhiM2U0MzhiNTcwLmJpbmRQb3B1cChwb3B1cF8zNDE1M2Y0NTE2YTg0YzU2ODkwMzFkOWI2OGQ2MmJjNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84N2ZmNzViNDE2OWM0YTg3OGI3MGZmZDdhZGQ3OWYzMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjQ0Mjk4NywxNi44NzQ0MjA5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZTBjYWViNzc5ZmZlNGU5MmI4MjExMmQwZjU3YTUyMDIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODdmZjc1YjQxNjljNGE4NzhiNzBmZmQ3YWRkNzlmMzAuc2V0SWNvbihpY29uX2UwY2FlYjc3OWZmZTRlOTJiODIxMTJkMGY1N2E1MjAyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IyNDE5M2VmZGU5NzQxOWE5NzRlMmQyOGEwMjY0NGZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcxZjdhZWM0ZTRjZDQxMGFiYzg2MDc4MzFjYTk4NGEzID0gJCgnPGRpdiBpZD0iaHRtbF83MWY3YWVjNGU0Y2Q0MTBhYmM4NjA3ODMxY2E5ODRhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDEzOSBaxYJvdHkgU3RvayDigJMgTWlhc3RvIFrFgm90ZWogUHJ6eWdvZHk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyNDE5M2VmZGU5NzQxOWE5NzRlMmQyOGEwMjY0NGZiLnNldENvbnRlbnQoaHRtbF83MWY3YWVjNGU0Y2Q0MTBhYmM4NjA3ODMxY2E5ODRhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg3ZmY3NWI0MTY5YzRhODc4YjcwZmZkN2FkZDc5ZjMwLmJpbmRQb3B1cChwb3B1cF9iMjQxOTNlZmRlOTc0MTlhOTc0ZTJkMjhhMDI2NDRmYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mMWNhMDNiNDVlZDY0YjI1YmEwZmE3YjA0MWFlN2MyMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjYwMDMxOSwxNy4wNDA2MDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fODM0Yjk1YTlkYzY0NGZiZTkzMDdhNGI3N2I1ZjM4MmEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZjFjYTAzYjQ1ZWQ2NGIyNWJhMGZhN2IwNDFhZTdjMjIuc2V0SWNvbihpY29uXzgzNGI5NWE5ZGM2NDRmYmU5MzA3YTRiNzdiNWYzODJhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhNDhkY2VlMmFjNTQwMGQ5NTYwNjZlM2Y1MWM0ZmJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RmNzljYWNjYjlkMTRlM2ZhYzFmMTdmZWJkN2U3ODQyID0gJCgnPGRpdiBpZD0iaHRtbF9kZjc5Y2FjY2I5ZDE0ZTNmYWMxZjE3ZmViZDdlNzg0MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE0MCBNdXpldW0gU3ByesSZdHUgR29zcG9kYXJzdHdhIERvbW93ZWdvIHcgWmnEmWJpY2FjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmE0OGRjZWUyYWM1NDAwZDk1NjA2NmUzZjUxYzRmYmIuc2V0Q29udGVudChodG1sX2RmNzljYWNjYjlkMTRlM2ZhYzFmMTdmZWJkN2U3ODQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjFjYTAzYjQ1ZWQ2NGIyNWJhMGZhN2IwNDFhZTdjMjIuYmluZFBvcHVwKHBvcHVwXzJhNDhkY2VlMmFjNTQwMGQ5NTYwNjZlM2Y1MWM0ZmJiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2IxMjExZmNkZDY5MTQ4MjA5OTM0NjQ3ZTJhNzZkYTEzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjQ1MzExLDE2LjYzMTc3N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zOWE0NmFjMjVkYTQ0YmM0OWM2ZGZjOWQwZTBkOWE5ZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iMTIxMWZjZGQ2OTE0ODIwOTkzNDY0N2UyYTc2ZGExMy5zZXRJY29uKGljb25fMzlhNDZhYzI1ZGE0NGJjNDljNmRmYzlkMGUwZDlhOWUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjMwNTk5OGY2MGVhNDUzOWIxMzBjNGMxOGZjZDkxODIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzVkMDI2NjUxYzZhNDhmNjliMGZhZmExZDVkYjBlZjUgPSAkKCc8ZGl2IGlkPSJodG1sXzM1ZDAyNjY1MWM2YTQ4ZjY5YjBmYWZhMWQ1ZGIwZWY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTQxIFV6ZHJvd2lza28gRMWCdWdvcG9sZSBaZHLDs2ogPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MzA1OTk4ZjYwZWE0NTM5YjEzMGM0YzE4ZmNkOTE4Mi5zZXRDb250ZW50KGh0bWxfMzVkMDI2NjUxYzZhNDhmNjliMGZhZmExZDVkYjBlZjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMTIxMWZjZGQ2OTE0ODIwOTkzNDY0N2UyYTc2ZGExMy5iaW5kUG9wdXAocG9wdXBfNjMwNTk5OGY2MGVhNDUzOWIxMzBjNGMxOGZjZDkxODIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmQxMTBjNGUyNjFlNDBmYzg0MGExYjNkOWIyMzkxN2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC43MjU5MDgsMTYuMzQwNTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNmY1ZDUyNDllNmNmNDQ2ZjkyOTc4NDlhN2Y1MGU2MjUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYmQxMTBjNGUyNjFlNDBmYzg0MGExYjNkOWIyMzkxN2Yuc2V0SWNvbihpY29uXzZmNWQ1MjQ5ZTZjZjQ0NmY5Mjk3ODQ5YTdmNTBlNjI1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkNTdiZDZkZDhlZjQzMDNiMmY1YTgyMDkwMDZhYmRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY2NmNhMDdlMzZhMDQzMDI5ZjRkNmZjZjMwNmM5MzJhID0gJCgnPGRpdiBpZD0iaHRtbF82NjZjYTA3ZTM2YTA0MzAyOWY0ZDZmY2YzMDZjOTMyYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE0MiBVemRyb3dpc2tvd2Ugd8SZZHLDs3draSB3IEplZGxpbmllIC0gWmRyb2p1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZDU3YmQ2ZGQ4ZWY0MzAzYjJmNWE4MjA5MDA2YWJkYi5zZXRDb250ZW50KGh0bWxfNjY2Y2EwN2UzNmEwNDMwMjlmNGQ2ZmNmMzA2YzkzMmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iZDExMGM0ZTI2MWU0MGZjODQwYTFiM2Q5YjIzOTE3Zi5iaW5kUG9wdXAocG9wdXBfNmQ1N2JkNmRkOGVmNDMwM2IyZjVhODIwOTAwNmFiZGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzc5YjUzN2M0Y2U3NGY4MThhZmVkMjUyOTFmNmRlNGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4zNDM4NTUsMTYuODg4NDMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2JhOWRjM2UxYzAyMTQ0YmE5Y2NkODAxYWQ4ZTY5OWQyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2M3OWI1MzdjNGNlNzRmODE4YWZlZDI1MjkxZjZkZTRiLnNldEljb24oaWNvbl9iYTlkYzNlMWMwMjE0NGJhOWNjZDgwMWFkOGU2OTlkMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wOTFlYjYxM2YwYmU0YjZiOGM3NTZiOTBjOWIyZDU4ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MGUxNTYxZDY5NTc0MjYyOTIxZTE5MzNiNzA4ODgxMiA9ICQoJzxkaXYgaWQ9Imh0bWxfOTBlMTU2MWQ2OTU3NDI2MjkyMWUxOTMzYjcwODg4MTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxNDMgTMSFZGVrIFpkcsOzaiAtIG5hanN0YXJzemUgdXpkcm93aXNrbyA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA5MWViNjEzZjBiZTRiNmI4Yzc1NmI5MGM5YjJkNThlLnNldENvbnRlbnQoaHRtbF85MGUxNTYxZDY5NTc0MjYyOTIxZTE5MzNiNzA4ODgxMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M3OWI1MzdjNGNlNzRmODE4YWZlZDI1MjkxZjZkZTRiLmJpbmRQb3B1cChwb3B1cF8wOTFlYjYxM2YwYmU0YjZiOGM3NTZiOTBjOWIyZDU4ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kODAyNzg5NzFhMzg0MTRmOWZkOGE1OGM2YmE0NjhiNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjQ0NDI1MiwxNi44Nzg2NDEwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMTUwZGZmYWE4ZWUwNDI4YzlkMTFkNjdhOTRkMDZhN2IgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZDgwMjc4OTcxYTM4NDE0ZjlmZDhhNThjNmJhNDY4YjYuc2V0SWNvbihpY29uXzE1MGRmZmFhOGVlMDQyOGM5ZDExZDY3YTk0ZDA2YTdiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5YWEzMzcwZjQwMDRhZGRhMGQ0MzNmM2Q4YTcxZjJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IwMGRlNDYzNjM5ZDRmMzZiYzUwZjlkYzE2YTU1ZjdmID0gJCgnPGRpdiBpZD0iaHRtbF9iMDBkZTQ2MzYzOWQ0ZjM2YmM1MGY5ZGMxNmE1NWY3ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE0NCDFmnJlZG5pb3dpZWN6bmEgT3NhZGEgR8Ozcm5pY3phIHcgWsWCb3R5bSBTdG9rdTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzlhYTMzNzBmNDAwNGFkZGEwZDQzM2YzZDhhNzFmMmYuc2V0Q29udGVudChodG1sX2IwMGRlNDYzNjM5ZDRmMzZiYzUwZjlkYzE2YTU1ZjdmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDgwMjc4OTcxYTM4NDE0ZjlmZDhhNThjNmJhNDY4YjYuYmluZFBvcHVwKHBvcHVwXzM5YWEzMzcwZjQwMDRhZGRhMGQ0MzNmM2Q4YTcxZjJmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y2ZmUyYjIyODg0MTRmYTM4MGExOTMwNmM2NTZjMDUzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjI5MTY4LDE2Ljc2MDgwNzk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81OTllYWI1N2M5OTg0MTljOTFiNjNmN2JjODNjOTRjYSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mNmZlMmIyMjg4NDE0ZmEzODBhMTkzMDZjNjU2YzA1My5zZXRJY29uKGljb25fNTk5ZWFiNTdjOTk4NDE5YzkxYjYzZjdiYzgzYzk0Y2EpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzRhYjIzMGYxYmZjNDIyOGJiYWM0ZTk2MWQ2NTRkNzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTFhMDQ4OGUwY2MzNDg2Zjg3MzBmNTViM2UzZjQxYjYgPSAkKCc8ZGl2IGlkPSJodG1sX2ExYTA0ODhlMGNjMzQ4NmY4NzMwZjU1YjNlM2Y0MWI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTQ1IFdvZG9zcGFkIFdpbGN6a2kgdyBNacSZZHp5Z8Ozcnp1IDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzRhYjIzMGYxYmZjNDIyOGJiYWM0ZTk2MWQ2NTRkNzIuc2V0Q29udGVudChodG1sX2ExYTA0ODhlMGNjMzQ4NmY4NzMwZjU1YjNlM2Y0MWI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjZmZTJiMjI4ODQxNGZhMzgwYTE5MzA2YzY1NmMwNTMuYmluZFBvcHVwKHBvcHVwX2M0YWIyMzBmMWJmYzQyMjhiYmFjNGU5NjFkNjU0ZDcyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I0YzU4YmU5Nzc3NjRiNWY5NTI4MTAyODE5ZmE3YWFkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjI4OTE5LDE2Ljc2MjQ3Mzk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iYjA5ZTZmMzA5Njg0YzA0OTg2OGY0ZDZlZTNjNWMzNCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iNGM1OGJlOTc3NzY0YjVmOTUyODEwMjgxOWZhN2FhZC5zZXRJY29uKGljb25fYmIwOWU2ZjMwOTY4NGMwNDk4NjhmNGQ2ZWUzYzVjMzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTRiN2JlNzQ0NmM0NDhkMjk5MTViY2IyMTI5NTIxYzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjg5NWE2ZjI3MWVmNDY1MmFhMDBkYTYwMGFkZDIwY2QgPSAkKCc8ZGl2IGlkPSJodG1sXzY4OTVhNmYyNzFlZjQ2NTJhYTAwZGE2MDBhZGQyMGNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTQ2IER3b3JlayBtecWbbGl3c2tpIEtzacSZxbxuZWogb3JhxYRza2llaiB3IE1pxJlkenlnw7NyenU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE0YjdiZTc0NDZjNDQ4ZDI5OTE1YmNiMjEyOTUyMWM2LnNldENvbnRlbnQoaHRtbF82ODk1YTZmMjcxZWY0NjUyYWEwMGRhNjAwYWRkMjBjZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I0YzU4YmU5Nzc3NjRiNWY5NTI4MTAyODE5ZmE3YWFkLmJpbmRQb3B1cChwb3B1cF8xNGI3YmU3NDQ2YzQ0OGQyOTkxNWJjYjIxMjk1MjFjNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MzBiNWNmMmY4YWY0NjllYWQyZDM3OWI3ZmRhMDkyYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjIzNDcyMywxNi43NTkzMDldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZGU2NjM2YzY2ZWJkNDA4Mjk4N2IyM2JhNjY4MGNhNTkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNTMwYjVjZjJmOGFmNDY5ZWFkMmQzNzliN2ZkYTA5MmIuc2V0SWNvbihpY29uX2RlNjYzNmM2NmViZDQwODI5ODdiMjNiYTY2ODBjYTU5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkOWUxZjNjYWU3ZTRmN2RiMTM1NmNlZjFmNjQwNGQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzllOWUwZmJhM2QxOTQzN2VhZjQ4Zjc0OWQ5ODQ3MjY1ID0gJCgnPGRpdiBpZD0iaHRtbF85ZTllMGZiYTNkMTk0MzdlYWY0OGY3NDlkOTg0NzI2NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE0NyBPZ3LDs2QgQmFqZWsgdyBNacSZZHp5Z8Ozcnp1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZDllMWYzY2FlN2U0ZjdkYjEzNTZjZWYxZjY0MDRkNy5zZXRDb250ZW50KGh0bWxfOWU5ZTBmYmEzZDE5NDM3ZWFmNDhmNzQ5ZDk4NDcyNjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MzBiNWNmMmY4YWY0NjllYWQyZDM3OWI3ZmRhMDkyYi5iaW5kUG9wdXAocG9wdXBfMmQ5ZTFmM2NhZTdlNGY3ZGIxMzU2Y2VmMWY2NDA0ZDcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTVmMzQ1YTY3YzFjNGMxNzg0ZTU3OWY1MWY1NjQzMGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4yMDc5NTIsMTYuODMyMzg1MDAwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2MwZDFkYzBmMGFlNTRhNWU4Y2ZiOGVlMjBlODVjMmFkID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2E1ZjM0NWE2N2MxYzRjMTc4NGU1NzlmNTFmNTY0MzBhLnNldEljb24oaWNvbl9jMGQxZGMwZjBhZTU0YTVlOGNmYjhlZTIwZTg1YzJhZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMDI0YjkwODA0Yjk0OGQ3OTczZDZkY2JjMmRiZGEzOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMTdlZmZmMzY5ZTY0NDFlODU0OWUyNTczMTc2ZmQxMSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzE3ZWZmZjM2OWU2NDQxZTg1NDllMjU3MzE3NmZkMTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxNDggU2Nocm9uaXNrbyBQVFRLIE5hIMWabmllxbxuaWt1IDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjAyNGI5MDgwNGI5NDhkNzk3M2Q2ZGNiYzJkYmRhMzguc2V0Q29udGVudChodG1sX2MxN2VmZmYzNjllNjQ0MWU4NTQ5ZTI1NzMxNzZmZDExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTVmMzQ1YTY3YzFjNGMxNzg0ZTU3OWY1MWY1NjQzMGEuYmluZFBvcHVwKHBvcHVwXzIwMjRiOTA4MDRiOTQ4ZDc5NzNkNmRjYmMyZGJkYTM4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ1OTA0MjE4NGNjNjRiNDY4NjMyYmY4OTliMDAzOGQyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMTQ4MTEsMTYuNjY2MjY0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzY1MDMwM2RiOGYzZDQ4ZDhhNzZmOGRiYTlhMjI4NGJjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzQ1OTA0MjE4NGNjNjRiNDY4NjMyYmY4OTliMDAzOGQyLnNldEljb24oaWNvbl82NTAzMDNkYjhmM2Q0OGQ4YTc2ZjhkYmE5YTIyODRiYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84Zjg0MzBjOGMwYWU0MTJhODNjOGFkMDdjNDFkZGFjMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NzY3YTBkNzFjNjM0ZTEzOTZmNTE2MjA3MjBlMjc2MSA9ICQoJzxkaXYgaWQ9Imh0bWxfNTc2N2EwZDcxYzYzNGUxMzk2ZjUxNjIwNzIwZTI3NjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxNDkgWmFtZWsgdyBNacSZZHp5bGVzaXU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmODQzMGM4YzBhZTQxMmE4M2M4YWQwN2M0MWRkYWMyLnNldENvbnRlbnQoaHRtbF81NzY3YTBkNzFjNjM0ZTEzOTZmNTE2MjA3MjBlMjc2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ1OTA0MjE4NGNjNjRiNDY4NjMyYmY4OTliMDAzOGQyLmJpbmRQb3B1cChwb3B1cF84Zjg0MzBjOGMwYWU0MTJhODNjOGFkMDdjNDFkZGFjMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MWUxNWNjZDNiYTM0NDcxOWEyOWQ1NThhMTJiNTNkMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjE0ODMxMiwxNi42NjY5NjRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNzUxN2UwYjNhMGU3NGUwNzg5ZTJmMGMxNTM0MzdmYzMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNTFlMTVjY2QzYmEzNDQ3MTlhMjlkNTU4YTEyYjUzZDAuc2V0SWNvbihpY29uXzc1MTdlMGIzYTBlNzRlMDc4OWUyZjBjMTUzNDM3ZmMzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhYWMxM2NhYWM1OTQ2MTU5YzQ0YTlmMzUwM2ZjMjg2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RlYjUzMzZhMWRiODRhOTg4ZGQ5MjI4YjUwMjA0NjE0ID0gJCgnPGRpdiBpZD0iaHRtbF9kZWI1MzM2YTFkYjg0YTk4OGRkOTIyOGI1MDIwNDYxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE1MCBNaWFzdG8gTWnEmWR6eWxlc2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYWFjMTNjYWFjNTk0NjE1OWM0NGE5ZjM1MDNmYzI4Ni5zZXRDb250ZW50KGh0bWxfZGViNTMzNmExZGI4NGE5ODhkZDkyMjhiNTAyMDQ2MTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MWUxNWNjZDNiYTM0NDcxOWEyOWQ1NThhMTJiNTNkMC5iaW5kUG9wdXAocG9wdXBfZGFhYzEzY2FhYzU5NDYxNTljNDRhOWYzNTAzZmMyODYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDY0N2U5NjVhYTk5NDY2Y2FjNTRlNTFiY2QwYzA3YzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4yOTcyNTksMTYuNjUzNTM1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzhjM2MwOGZkYzRlOTRmODY5YjJmZDY3YTZhYmM1ZjJmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzQ2NDdlOTY1YWE5OTQ2NmNhYzU0ZTUxYmNkMGMwN2M2LnNldEljb24oaWNvbl84YzNjMDhmZGM0ZTk0Zjg2OWIyZmQ2N2E2YWJjNWYyZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNmIxYzdhMjQ4NWM0YzE0OGUyYzIzZWRjYWQ3NWU3ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMjI0ODhkNjE0MzM0ZjE4YWYwYTI3ZTQyMWQ4NjdiMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMzIyNDg4ZDYxNDMzNGYxOGFmMGEyN2U0MjFkODY3YjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxNTEgTXV6ZXVtIEZpbHVtZW5pc3R5Y3puZSB3IEJ5c3RyenljeSBLxYJvZHpraWVqPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNmIxYzdhMjQ4NWM0YzE0OGUyYzIzZWRjYWQ3NWU3Zi5zZXRDb250ZW50KGh0bWxfMzIyNDg4ZDYxNDMzNGYxOGFmMGEyN2U0MjFkODY3YjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80NjQ3ZTk2NWFhOTk0NjZjYWM1NGU1MWJjZDBjMDdjNi5iaW5kUG9wdXAocG9wdXBfMTZiMWM3YTI0ODVjNGMxNDhlMmMyM2VkY2FkNzVlN2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmVhZjQxYWY3ZDgxNDk3NTk2MGQzZTBlNWI0YTk1YjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4yOTU5MjgsMTYuNjUxNzk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2UzZWRkM2FhOWU5MTQ0NzQ4MzQ2NGM0ODc1NzkwOWMwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzZlYWY0MWFmN2Q4MTQ5NzU5NjBkM2UwZTViNGE5NWI2LnNldEljb24oaWNvbl9lM2VkZDNhYTllOTE0NDc0ODM0NjRjNDg3NTc5MDljMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZGRlNzUyM2U2YTM0ZmQwYThmMDU2Mzk0YThkYWEyNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NzZlZjk2OWM4NjY0NmEzYTg5YWFlNjVkNjQ0YTIyZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNjc2ZWY5NjljODY2NDZhM2E4OWFhZTY1ZDY0NGEyMmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxNTIgQnlzdHJ6eWNhIEvFgm9kemthIOKAkyBNaWFzdG8gS3LDs2xld3NraWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZkZGU3NTIzZTZhMzRmZDBhOGYwNTYzOTRhOGRhYTI0LnNldENvbnRlbnQoaHRtbF82NzZlZjk2OWM4NjY0NmEzYTg5YWFlNjVkNjQ0YTIyZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZlYWY0MWFmN2Q4MTQ5NzU5NjBkM2UwZTViNGE5NWI2LmJpbmRQb3B1cChwb3B1cF9mZGRlNzUyM2U2YTM0ZmQwYThmMDU2Mzk0YThkYWEyNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZjEzYjUzN2RhNWY0ODZhOGM1YTYzZTA2YzQ1YTA5NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjMwNjYzOCwxNy4zNzM1MjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fODYxMjAwNTk4ODEwNDc1N2E2NGQzZjNiYWZhNWMxYzUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfY2YxM2I1MzdkYTVmNDg2YThjNWE2M2UwNmM0NWEwOTYuc2V0SWNvbihpY29uXzg2MTIwMDU5ODgxMDQ3NTdhNjRkM2YzYmFmYTVjMWM1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1NzU4YmFiMjk5MzQ5YjFiNzE0ODEyZjY2YzU5Yzk3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRkNmNlOWVjMDlkZTQ0YzA5Y2QzYTkxMDEwYTZmMTc1ID0gJCgnPGRpdiBpZD0iaHRtbF80ZDZjZTllYzA5ZGU0NGMwOWNkM2E5MTAxMGE2ZjE3NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE1MyBOeXNrYSBkcm9nYSDFmncuIEpha3ViYSDigJMgR8WCdWNob8WCYXp5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNTc1OGJhYjI5OTM0OWIxYjcxNDgxMmY2NmM1OWM5Ny5zZXRDb250ZW50KGh0bWxfNGQ2Y2U5ZWMwOWRlNDRjMDljZDNhOTEwMTBhNmYxNzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZjEzYjUzN2RhNWY0ODZhOGM1YTYzZTA2YzQ1YTA5Ni5iaW5kUG9wdXAocG9wdXBfZTU3NThiYWIyOTkzNDliMWI3MTQ4MTJmNjZjNTljOTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmZjMTg1MjUxYjNlNDI5ODkwYWYzM2VlOGI1NWRiMmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4zMTU0NzgsMTcuMzgzNTc1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzY3MmI5NTAxNzU1NDRjM2FhMGMyZGJjN2I5Yjg4NDkyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzZmYzE4NTI1MWIzZTQyOTg5MGFmMzNlZThiNTVkYjJiLnNldEljb24oaWNvbl82NzJiOTUwMTc1NTQ0YzNhYTBjMmRiYzdiOWI4ODQ5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYTZjYmNlZWVkMjg0ODA5ODcyOWI2ZmFmNjNhODkwYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMmY1Y2FjMTY5MjM0MzAzYmZlZGFmMWNiMGQ5ZDY3ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzJmNWNhYzE2OTIzNDMwM2JmZWRhZjFjYjBkOWQ2N2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxNTQgV2llxbxhIEJyYW15IEfDs3JuZWogdyBHxYJ1Y2hvxYJhemFjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2E2Y2JjZWVlZDI4NDgwOTg3MjliNmZhZjYzYTg5MGMuc2V0Q29udGVudChodG1sXzMyZjVjYWMxNjkyMzQzMDNiZmVkYWYxY2IwZDlkNjdlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmZjMTg1MjUxYjNlNDI5ODkwYWYzM2VlOGI1NWRiMmIuYmluZFBvcHVwKHBvcHVwXzNhNmNiY2VlZWQyODQ4MDk4NzI5YjZmYWY2M2E4OTBjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JjZjljMjI4ZDdlNzQwNjE4NjMyOWRmMTVmNzA4NzdiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjYwNTk1LDE3LjQzMDk5NTAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82YWYxNzc4M2Y4ZjQ0ZTU4YTQzNjZjY2M0MDcyMDhlOCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iY2Y5YzIyOGQ3ZTc0MDYxODYzMjlkZjE1ZjcwODc3Yi5zZXRJY29uKGljb25fNmFmMTc3ODNmOGY0NGU1OGE0MzY2Y2NjNDA3MjA4ZTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2EyM2RjOThjZGZkNGIxZWIxN2Q2NjQ5NmUzMGVkNTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODViMGNkN2JjYjIyNGY5ZmJjYWRkMTEyYjI5MTQwYWUgPSAkKCc8ZGl2IGlkPSJodG1sXzg1YjBjZDdiY2IyMjRmOWZiY2FkZDExMmIyOTE0MGFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTU1IFNjaHJvbmlza28gUFRUSyBQb2QgQmlza3VwacSFIEtvcMSFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YTIzZGM5OGNkZmQ0YjFlYjE3ZDY2NDk2ZTMwZWQ1OS5zZXRDb250ZW50KGh0bWxfODViMGNkN2JjYjIyNGY5ZmJjYWRkMTEyYjI5MTQwYWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iY2Y5YzIyOGQ3ZTc0MDYxODYzMjlkZjE1ZjcwODc3Yi5iaW5kUG9wdXAocG9wdXBfN2EyM2RjOThjZGZkNGIxZWIxN2Q2NjQ5NmUzMGVkNTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjBkN2NjOWRlMTc4NDYxOTgyYWQyZmRlMjRhYjdjZTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4zMjIwNzUsMTcuNTgyMjQ1OTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzkxMDg5NWQ0YzZhZjQ4NTM5MDA4MjBjMjIwYzViYzMxID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzIwZDdjYzlkZTE3ODQ2MTk4MmFkMmZkZTI0YWI3Y2UwLnNldEljb24oaWNvbl85MTA4OTVkNGM2YWY0ODUzOTAwODIwYzIyMGM1YmMzMSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NThmOWMwNzA4N2E0NmFhOThiOGRlNTIyMDIzYmQ2NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOGI0MGZiYjYzMzY0OWQ2YmE5NDQyMGE3ZTA4YTQxNSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjhiNDBmYmI2MzM2NDlkNmJhOTQ0MjBhN2UwOGE0MTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxNTYgQ2VudHJ1bSBUcmFkeWNqaSBUa2Fja2ljaCB3IFBydWRuaWt1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NThmOWMwNzA4N2E0NmFhOThiOGRlNTIyMDIzYmQ2Ny5zZXRDb250ZW50KGh0bWxfMjhiNDBmYmI2MzM2NDlkNmJhOTQ0MjBhN2UwOGE0MTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yMGQ3Y2M5ZGUxNzg0NjE5ODJhZDJmZGUyNGFiN2NlMC5iaW5kUG9wdXAocG9wdXBfNjU4ZjljMDcwODdhNDZhYTk4YjhkZTUyMjAyM2JkNjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODA1ODcxYWQ1NjVkNDllZWJhZjczODY2OWFiMTkyODcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4zMjI5NDEsMTcuNTc4MzIzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzAwNDk3MzZhY2EwYzRlYjk5ODM5ZWM3YjM0YjFlZDkwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzgwNTg3MWFkNTY1ZDQ5ZWViYWY3Mzg2NjlhYjE5Mjg3LnNldEljb24oaWNvbl8wMDQ5NzM2YWNhMGM0ZWI5OTgzOWVjN2IzNGIxZWQ5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MDY3ZTE5OWZkYmY0YmUxYjQ5ZGE5YTBhMzkwNzBjYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMDA5NDA3MWQ0N2M0MjVhOGQ3NGRhYWFmMmEyZTQ2ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfZTAwOTQwNzFkNDdjNDI1YThkNzRkYWFhZjJhMmU0NmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxNTcgV2llxbxhIFdva2EgdyBQcnVkbmlrdTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDA2N2UxOTlmZGJmNGJlMWI0OWRhOWEwYTM5MDcwY2Euc2V0Q29udGVudChodG1sX2UwMDk0MDcxZDQ3YzQyNWE4ZDc0ZGFhYWYyYTJlNDZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODA1ODcxYWQ1NjVkNDllZWJhZjczODY2OWFiMTkyODcuYmluZFBvcHVwKHBvcHVwXzQwNjdlMTk5ZmRiZjRiZTFiNDlkYTlhMGEzOTA3MGNhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZjZjMwNTEyZjQwMTQyY2ZhZmZjZWMzNTYyM2JkMTUxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMzIxODQ5LDE3LjU4MzA2MDk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9mYzI3ODYzNDJmNjg0NGQ3OTczN2M3NGRhNWJlMDllZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82Y2YzMDUxMmY0MDE0MmNmYWZmY2VjMzU2MjNiZDE1MS5zZXRJY29uKGljb25fZmMyNzg2MzQyZjY4NDRkNzk3MzdjNzRkYTViZTA5ZWQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTcwMmViMjkxYjdkNDRhZThhOWU2NDc4MjMyNzQ5OGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTc0OTUxZTE3MTU4NDc2ZmE0YzdiY2I0NjNmOThlMGYgPSAkKCc8ZGl2IGlkPSJodG1sXzU3NDk1MWUxNzE1ODQ3NmZhNGM3YmNiNDYzZjk4ZTBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTU4IEFyc2VuYcWCIGkgTXVyeSBNaWVqc2tpZSB3IFBydWRuaWt1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NzAyZWIyOTFiN2Q0NGFlOGE5ZTY0NzgyMzI3NDk4Yy5zZXRDb250ZW50KGh0bWxfNTc0OTUxZTE3MTU4NDc2ZmE0YzdiY2I0NjNmOThlMGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82Y2YzMDUxMmY0MDE0MmNmYWZmY2VjMzU2MjNiZDE1MS5iaW5kUG9wdXAocG9wdXBfNTcwMmViMjkxYjdkNDRhZThhOWU2NDc4MjMyNzQ5OGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGI2MDkzNjAzYTQ0NGExODlhNmFiNzYzYjVkMDRhYTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4zMTY5MTYsMTcuMzg0ODc2MDAwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2QwNDNhMTY5YTAzYzQ1YzM5YTQyZmZmYzY4MjI1ZTc5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzBiNjA5MzYwM2E0NDRhMTg5YTZhYjc2M2I1ZDA0YWExLnNldEljb24oaWNvbl9kMDQzYTE2OWEwM2M0NWMzOWE0MmZmZmM2ODIyNWU3OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZDY5YjkxMDRiOTY0ZmJmYWE1ZWMwNjA2NzFlMGUyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMzI0NWE1MWIyMmE0ZjdjOGQ5ZGY3MThiMTZkNjkwMSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzMyNDVhNTFiMjJhNGY3YzhkOWRmNzE4YjE2ZDY5MDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxNTkgS2/Fm2Npw7PFgiDFm3cuIFdhd3J6ecWEY2EgdyBHxYJ1Y2hvxYJhemFjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWQ2OWI5MTA0Yjk2NGZiZmFhNWVjMDYwNjcxZTBlMmEuc2V0Q29udGVudChodG1sXzMzMjQ1YTUxYjIyYTRmN2M4ZDlkZjcxOGIxNmQ2OTAxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGI2MDkzNjAzYTQ0NGExODlhNmFiNzYzYjVkMDRhYTEuYmluZFBvcHVwKHBvcHVwXzlkNjliOTEwNGI5NjRmYmZhYTVlYzA2MDY3MWUwZTJhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzcxNjg1N2YxMDk3NjQ1OWY4OGFiNjcyMGIyYjY1ZDRkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDY0MDU0LDE3LjAwNTY5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hOTMyOGQ3ODFhMGM0ZjFhODhjMmYwMjc3MDQ2M2E1ZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83MTY4NTdmMTA5NzY0NTlmODhhYjY3MjBiMmI2NWQ0ZC5zZXRJY29uKGljb25fYTkzMjhkNzgxYTBjNGYxYTg4YzJmMDI3NzA0NjNhNWUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWIyNjM0MGI3OGZkNDdkM2I3OTI4OGYxMjZlYTBkYzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmNlMGIyZGY1OGM4NDMyODllMDNhOWViZmJiNmE5NmUgPSAkKCc8ZGl2IGlkPSJodG1sX2JjZTBiMmRmNThjODQzMjg5ZTAzYTllYmZiYjZhOTZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTYwIFJhdHVzeiB6IHdpZcW8xIUgd2lkb2tvd8SFIHcgUGFjemtvd2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YjI2MzQwYjc4ZmQ0N2QzYjc5Mjg4ZjEyNmVhMGRjOS5zZXRDb250ZW50KGh0bWxfYmNlMGIyZGY1OGM4NDMyODllMDNhOWViZmJiNmE5NmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83MTY4NTdmMTA5NzY0NTlmODhhYjY3MjBiMmI2NWQ0ZC5iaW5kUG9wdXAocG9wdXBfOWIyNjM0MGI3OGZkNDdkM2I3OTI4OGYxMjZlYTBkYzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzIxMzI1NTNjMjExNDg3NmE5NWQyMjhjZDRhODM3N2MgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC40NjQwMiwxNy4wMDYxOTIwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTQ1OGFlNjg2ZWE0NDc5NGJjMjdlNTc0MGJmYzRhMTQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzIxMzI1NTNjMjExNDg3NmE5NWQyMjhjZDRhODM3N2Muc2V0SWNvbihpY29uX2E0NThhZTY4NmVhNDQ3OTRiYzI3ZTU3NDBiZmM0YTE0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNmYzVmYmEwOWU0NDQyZGZhZjI0M2I4MjRhYTgyOGUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I3ZDVkZGUzZWQxNzQ1ZmY4MTJhYjFkYmJlMmUzYjYyID0gJCgnPGRpdiBpZD0iaHRtbF9iN2Q1ZGRlM2VkMTc0NWZmODEyYWIxZGJiZTJlM2I2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE2MSBQYWN6a8OzdyDigJMgUG9sc2tpZSBDYXJjYXNzb25uZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2ZjNWZiYTA5ZTQ0NDJkZmFmMjQzYjgyNGFhODI4ZTAuc2V0Q29udGVudChodG1sX2I3ZDVkZGUzZWQxNzQ1ZmY4MTJhYjFkYmJlMmUzYjYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzIxMzI1NTNjMjExNDg3NmE5NWQyMjhjZDRhODM3N2MuYmluZFBvcHVwKHBvcHVwXzNmYzVmYmEwOWU0NDQyZGZhZjI0M2I4MjRhYTgyOGUwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg4NTNlYWY2ODkyZTQ0Mzc4ZDg4Mjg2NDcwNzg2MDc3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDQ1MDksMTYuODg0NzQ5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzRjNzkyNmIyZDUxMTRkZDU4MjFiN2MyMDhmMDMwYmM1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzg4NTNlYWY2ODkyZTQ0Mzc4ZDg4Mjg2NDcwNzg2MDc3LnNldEljb24oaWNvbl80Yzc5MjZiMmQ1MTE0ZGQ1ODIxYjdjMjA4ZjAzMGJjNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YTVjODdhY2Q3ZTY0YjY4YjIyNzdkYzljZTcxMWQxNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMzQ3ZTMzOGNmMTM0MDkwOGE3ZTllNmNhMTgxMjM2YiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjM0N2UzMzhjZjEzNDA5MDhhN2U5ZTZjYTE4MTIzNmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxNjIgWmVzcMOzxYIgd2FwaWVubmlrw7N3IHcgWsWCb3R5bSBTdG9rdTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2E1Yzg3YWNkN2U2NGI2OGIyMjc3ZGM5Y2U3MTFkMTcuc2V0Q29udGVudChodG1sXzIzNDdlMzM4Y2YxMzQwOTA4YTdlOWU2Y2ExODEyMzZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODg1M2VhZjY4OTJlNDQzNzhkODgyODY0NzA3ODYwNzcuYmluZFBvcHVwKHBvcHVwXzdhNWM4N2FjZDdlNjRiNjhiMjI3N2RjOWNlNzExZDE3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JhOGZkN2E1NjdhZTRkYzM5N2U2NjIwMjY3YTQ4Y2IyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDc0NTYsMTcuMzM0NDIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzBiODMwNGYzYzUxZjQzZDk4ZDRlMjU2M2QxOTNhZTk5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2JhOGZkN2E1NjdhZTRkYzM5N2U2NjIwMjY3YTQ4Y2IyLnNldEljb24oaWNvbl8wYjgzMDRmM2M1MWY0M2Q5OGQ0ZTI1NjNkMTkzYWU5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNjA5YTY2ODljMTA0MjY1YjE3OGE0NmE2NTc4NDE5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZjdlNDYxODU5OWU0Yzc2YmU2ODVlMDJmMDM1MzVjNSA9ICQoJzxkaXYgaWQ9Imh0bWxfNWY3ZTQ2MTg1OTllNGM3NmJlNjg1ZTAyZjAzNTM1YzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxNjMgQmF6eWxpa2EgxZt3LiBKYWt1YmEgQXBvc3RvxYJhIGkgxZt3LiBBZ25pZXN6a2kgdyBOeXNpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjYwOWE2Njg5YzEwNDI2NWIxNzhhNDZhNjU3ODQxOTguc2V0Q29udGVudChodG1sXzVmN2U0NjE4NTk5ZTRjNzZiZTY4NWUwMmYwMzUzNWM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmE4ZmQ3YTU2N2FlNGRjMzk3ZTY2MjAyNjdhNDhjYjIuYmluZFBvcHVwKHBvcHVwX2I2MDlhNjY4OWMxMDQyNjViMTc4YTQ2YTY1Nzg0MTk4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNmOGE3MGY2NGY0ODRhMzViM2I4ZmY4NDE5ZjE2Mjk4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDc2MSwxNy4zMzE0OTg5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNTYwNGI5NTY3MTY0NDA2Y2IxMzE0YmRjM2Q4MjhmMDQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfM2Y4YTcwZjY0ZjQ4NGEzNWIzYjhmZjg0MTlmMTYyOTguc2V0SWNvbihpY29uXzU2MDRiOTU2NzE2NDQwNmNiMTMxNGJkYzNkODI4ZjA0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNiYThkZThjMTM4ZTRkODJhYjAwZTFlMTJhMDhiNWI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjYzJjNzlkNDg4YjRhYmVhZDU0OTFiNzM2NDNhOWViID0gJCgnPGRpdiBpZD0iaHRtbF83Y2MyYzc5ZDQ4OGI0YWJlYWQ1NDkxYjczNjQzYTllYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE2NCBCYXN0aW9uIMWbdy4gSmFkd2lnaSB3IE55c2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYmE4ZGU4YzEzOGU0ZDgyYWIwMGUxZTEyYTA4YjViNC5zZXRDb250ZW50KGh0bWxfN2NjMmM3OWQ0ODhiNGFiZWFkNTQ5MWI3MzY0M2E5ZWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zZjhhNzBmNjRmNDg0YTM1YjNiOGZmODQxOWYxNjI5OC5iaW5kUG9wdXAocG9wdXBfM2JhOGRlOGMxMzhlNGQ4MmFiMDBlMWUxMmEwOGI1YjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjMxNDYyYWQ3MWRmNDZjYmE2YmNmZWRiNTc2N2Q5NjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC40NzIwMzcsMTcuMzMxNzU3OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzIxNzk5YmVmZWI1MTRmY2ZhMmZjMTk5NDI4YWVlMjdiID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2IzMTQ2MmFkNzFkZjQ2Y2JhNmJjZmVkYjU3NjdkOTYzLnNldEljb24oaWNvbl8yMTc5OWJlZmViNTE0ZmNmYTJmYzE5OTQyOGFlZTI3Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZTQ5Y2I1YmI3NGQ0MDg0ODIwYzEyMzc3ZTllOTBlNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MTgzYjQyN2NjMDA0YmE3YWM1YjMxMzZlNGYzODlkZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTE4M2I0MjdjYzAwNGJhN2FjNWIzMTM2ZTRmMzg5ZGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxNjUgS2/Fm2Npw7PFgiBQaW90cmEgaSBQYXfFgmEg4oCTIE55c2E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlNDljYjViYjc0ZDQwODQ4MjBjMTIzNzdlOWU5MGU2LnNldENvbnRlbnQoaHRtbF81MTgzYjQyN2NjMDA0YmE3YWM1YjMxMzZlNGYzODlkZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IzMTQ2MmFkNzFkZjQ2Y2JhNmJjZmVkYjU3NjdkOTYzLmJpbmRQb3B1cChwb3B1cF8wZTQ5Y2I1YmI3NGQ0MDg0ODIwYzEyMzc3ZTllOTBlNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hOTIyYzA1MDEyNGQ0NTRmYTgzMTdkNDI4ZTkwOWNiNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjQ0MDY3MSwxNy43Njc4ODk5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fODQyMTUwOWJlMjc0NDUzMGE0ZTIwNThlMzRiMGUwMzcgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYTkyMmMwNTAxMjRkNDU0ZmE4MzE3ZDQyOGU5MDljYjQuc2V0SWNvbihpY29uXzg0MjE1MDliZTI3NDQ1MzBhNGUyMDU4ZTM0YjBlMDM3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA1MWViY2NiYjgwMDQwMjk4YTFkOTkzOTY4OTViY2M5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E1ZTdhZDc0NzJkZTQ4NjA5NzhjNzhhYzczYTdmNmM1ID0gJCgnPGRpdiBpZD0iaHRtbF9hNWU3YWQ3NDcyZGU0ODYwOTc4Yzc4YWM3M2E3ZjZjNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE2NiBaYW1layB3IE1vc3puZWo8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA1MWViY2NiYjgwMDQwMjk4YTFkOTkzOTY4OTViY2M5LnNldENvbnRlbnQoaHRtbF9hNWU3YWQ3NDcyZGU0ODYwOTc4Yzc4YWM3M2E3ZjZjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E5MjJjMDUwMTI0ZDQ1NGZhODMxN2Q0MjhlOTA5Y2I0LmJpbmRQb3B1cChwb3B1cF8wNTFlYmNjYmI4MDA0MDI5OGExZDk5Mzk2ODk1YmNjOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wZmQ2Nzc2ZDZiMzg0NTc4OTM1ZDQ5YzQyYjljMzg5MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjUwNzMzMSwxNi43NDA3MjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOThlYWMxMDJlMzZlNDAxOGIyMWNiZGJlNmE2OTFkNjMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMGZkNjc3NmQ2YjM4NDU3ODkzNWQ0OWM0MmI5YzM4OTEuc2V0SWNvbihpY29uXzk4ZWFjMTAyZTM2ZTQwMThiMjFjYmRiZTZhNjkxZDYzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgzY2Y5YmJiYzcyNDQyZWM4MGJkNTc3M2U5NDdjYWMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y3Y2NjOTA2NDJiODRhYjRiMmU1M2VmOWU4OGIyNzRjID0gJCgnPGRpdiBpZD0iaHRtbF9mN2NjYzkwNjQyYjg0YWI0YjJlNTNlZjllODhiMjc0YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE4MiBSZW1pemEgc3RyYcW8YWNrYSB3IEJhcmR6aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgzY2Y5YmJiYzcyNDQyZWM4MGJkNTc3M2U5NDdjYWMyLnNldENvbnRlbnQoaHRtbF9mN2NjYzkwNjQyYjg0YWI0YjJlNTNlZjllODhiMjc0Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBmZDY3NzZkNmIzODQ1Nzg5MzVkNDljNDJiOWMzODkxLmJpbmRQb3B1cChwb3B1cF84M2NmOWJiYmM3MjQ0MmVjODBiZDU3NzNlOTQ3Y2FjMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNzYyMDliMTIwYmE0NzljYTY2OWVkNGQwYzc5NDJjZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjU4NjczMSwxNi44MDc0NjZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzUyYTYxMThkNTdlNGMxMzlmNWQxODViNTQzMDVhNzggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZjc2MjA5YjEyMGJhNDc5Y2E2NjllZDRkMGM3OTQyY2Yuc2V0SWNvbihpY29uX2M1MmE2MTE4ZDU3ZTRjMTM5ZjVkMTg1YjU0MzA1YTc4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzODY3ZWI5NDA4OTQ5ODI5OWQzNTY4OGU1MjlkMWNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg0MTgxNGQ3OTEzZTQyM2NhNTMzZmU0MTRiN2U3YjhhID0gJCgnPGRpdiBpZD0iaHRtbF84NDE4MTRkNzkxM2U0MjNjYTUzM2ZlNDE0YjdlN2I4YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE4MyBaYW1layB3IFrEhWJrb3dpY2FjaCDFmmzEhXNraWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85Mzg2N2ViOTQwODk0OTgyOTlkMzU2ODhlNTI5ZDFjYy5zZXRDb250ZW50KGh0bWxfODQxODE0ZDc5MTNlNDIzY2E1MzNmZTQxNGI3ZTdiOGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNzYyMDliMTIwYmE0NzljYTY2OWVkNGQwYzc5NDJjZi5iaW5kUG9wdXAocG9wdXBfOTM4NjdlYjk0MDg5NDk4Mjk5ZDM1Njg4ZTUyOWQxY2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2E4ODUwNGNkYmI2NDcyN2IxY2UwNDJhZDlhNjA1ZDMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC43MjgyODksMTYuODQzNTI5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzU0Y2U1ZWFmMjNlZTQwYTA4ZDM1M2I2MjM4MzU0Y2ViID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzNhODg1MDRjZGJiNjQ3MjdiMWNlMDQyYWQ5YTYwNWQzLnNldEljb24oaWNvbl81NGNlNWVhZjIzZWU0MGEwOGQzNTNiNjIzODM1NGNlYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MTY3NjRjNjQ5NmE0NzdiOTA4Nzc4OTFhNjhjZGRkYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYmUwZjFhMmEyMjc0YTk4YmVlNzlkNmJhYjE3YzFlYyA9ICQoJzxkaXYgaWQ9Imh0bWxfMWJlMGYxYTJhMjI3NGE5OGJlZTc5ZDZiYWIxN2MxZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAxODQgUGllcm5pa2FybmlhIMWabMSFc2thIHcgTmllbWN6eTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDE2NzY0YzY0OTZhNDc3YjkwODc3ODkxYTY4Y2RkZGMuc2V0Q29udGVudChodG1sXzFiZTBmMWEyYTIyNzRhOThiZWU3OWQ2YmFiMTdjMWVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2E4ODUwNGNkYmI2NDcyN2IxY2UwNDJhZDlhNjA1ZDMuYmluZFBvcHVwKHBvcHVwXzQxNjc2NGM2NDk2YTQ3N2I5MDg3Nzg5MWE2OGNkZGRjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y0MjI5ZWU0YmM2OTQ3MmJiOTc5OWEzZmVjN2U2MGUwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuOTgzMDA5LDE3LjAwMTg1M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85ZTQ0YTVkZWYyNGI0NGE1YTA0MGZlNTdhNzVhOGY5YyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mNDIyOWVlNGJjNjk0NzJiYjk3OTlhM2ZlYzdlNjBlMC5zZXRJY29uKGljb25fOWU0NGE1ZGVmMjRiNDRhNWEwNDBmZTU3YTc1YThmOWMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjFiNGZmNTNjYTNhNDI1MWE4ZjFlNGYxYTk3MmY5MzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTdlNzBkNzJhZGQzNDhhZTg0NWQxZmVmYzNmYjZhMjcgPSAkKCc8ZGl2IGlkPSJodG1sXzE3ZTcwZDcyYWRkMzQ4YWU4NDVkMWZlZmMzZmI2YTI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTg1IE11emV1bSBQb3dvesOzdyBHYWxvd2ljZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjFiNGZmNTNjYTNhNDI1MWE4ZjFlNGYxYTk3MmY5MzUuc2V0Q29udGVudChodG1sXzE3ZTcwZDcyYWRkMzQ4YWU4NDVkMWZlZmMzZmI2YTI3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjQyMjllZTRiYzY5NDcyYmI5Nzk5YTNmZWM3ZTYwZTAuYmluZFBvcHVwKHBvcHVwX2YxYjRmZjUzY2EzYTQyNTFhOGYxZTRmMWE5NzJmOTM1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QxZjMyODJjY2JiNzQxNGRiYmUwMjdlMDAxNmU0YjgxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMTA1NjM3LDE3LjA3NjE5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82YWQ1OWFkYTNkYzM0YzI3YTBiMDEzZDhhZjkwMTliNCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kMWYzMjgyY2NiYjc0MTRkYmJlMDI3ZTAwMTZlNGI4MS5zZXRJY29uKGljb25fNmFkNTlhZGEzZGMzNGMyN2EwYjAxM2Q4YWY5MDE5YjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTc0OWVhNGEwNmNlNGZkOTg0Nzg0NDRhNmYzNTI4MjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODgzOTcwNTQwNGY1NDBjYjg3ODY2NTc5ZDAzNjNjMzAgPSAkKCc8ZGl2IGlkPSJodG1sXzg4Mzk3MDU0MDRmNTQwY2I4Nzg2NjU3OWQwMzYzYzMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMTg2IFpPTyBXcm9jxYJhdyA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3NDllYTRhMDZjZTRmZDk4NDc4NDQ0YTZmMzUyODIxLnNldENvbnRlbnQoaHRtbF84ODM5NzA1NDA0ZjU0MGNiODc4NjY1NzlkMDM2M2MzMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QxZjMyODJjY2JiNzQxNGRiYmUwMjdlMDAxNmU0YjgxLmJpbmRQb3B1cChwb3B1cF9hNzQ5ZWE0YTA2Y2U0ZmQ5ODQ3ODQ0NGE2ZjM1MjgyMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xYTRjNmYwZjE1YTI0YTVhOGIzYzgwZTM3ZGY3ZjA1YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjExNjAwMywxNy4wNDczMTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fM2ZlNDc3ZTg3NzdmNDYxZmEyMzk2OTlkNzljODU5ZjQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMWE0YzZmMGYxNWEyNGE1YThiM2M4MGUzN2RmN2YwNWMuc2V0SWNvbihpY29uXzNmZTQ3N2U4Nzc3ZjQ2MWZhMjM5Njk5ZDc5Yzg1OWY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk2ZGU3MDVhNTExMTQ4YzM4ODY4MmYyNjM4NWQ5MzA0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZiZjY1MDhmOTQ0YjQ2ZDRiZGQwNDI4NWNhZTQ1N2NkID0gJCgnPGRpdiBpZD0iaHRtbF9mYmY2NTA4Zjk0NGI0NmQ0YmRkMDQyODVjYWU0NTdjZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE4NyBPZ3LDs2QgQm90YW5pY3pueSBVbml3ZXJzeXRldHUgV3JvY8WCYXdza2llZ288L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk2ZGU3MDVhNTExMTQ4YzM4ODY4MmYyNjM4NWQ5MzA0LnNldENvbnRlbnQoaHRtbF9mYmY2NTA4Zjk0NGI0NmQ0YmRkMDQyODVjYWU0NTdjZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFhNGM2ZjBmMTVhMjRhNWE4YjNjODBlMzdkZjdmMDVjLmJpbmRQb3B1cChwb3B1cF85NmRlNzA1YTUxMTE0OGMzODg2ODJmMjYzODVkOTMwNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jODJmNzMxNGNjZDI0ZGM5YWVhMTIwMTIzNDcxMjUzYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjcxMTcxMiwxNi44NTg1NTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMWMzM2UxYjE0MWMzNGI4Nzk2ZjRhZWRiYjU3MzJiOTYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYzgyZjczMTRjY2QyNGRjOWFlYTEyMDEyMzQ3MTI1M2Muc2V0SWNvbihpY29uXzFjMzNlMWIxNDFjMzRiODc5NmY0YWVkYmI1NzMyYjk2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg3MjgwMmRjOTAzNDRlZTlhMTZhMmRmOWYwMTU0NTk2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EyZGY4ZDQzZjQxMDQ4ZGQ4NmNlYmM0MzExNzgxOTc1ID0gJCgnPGRpdiBpZD0iaHRtbF9hMmRmOGQ0M2Y0MTA0OGRkODZjZWJjNDMxMTc4MTk3NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDE4OCBBcmJvcmV0dW0gdyBXb2pzxYJhd2ljYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NzI4MDJkYzkwMzQ0ZWU5YTE2YTJkZjlmMDE1NDU5Ni5zZXRDb250ZW50KGh0bWxfYTJkZjhkNDNmNDEwNDhkZDg2Y2ViYzQzMTE3ODE5NzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jODJmNzMxNGNjZDI0ZGM5YWVhMTIwMTIzNDcxMjUzYy5iaW5kUG9wdXAocG9wdXBfODcyODAyZGM5MDM0NGVlOWExNmEyZGY5ZjAxNTQ1OTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGQwZGM4ODZmNGVhNDZmMmFkMDE2NzljM2M5MDMzYWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC41MDQwMzgsMTYuNDAyNTg4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzkxZTM4YzlhYjM3MTRlN2ZhMmVlYzNkYWMyN2U5NzNiID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzBkMGRjODg2ZjRlYTQ2ZjJhZDAxNjc5YzNjOTAzM2FlLnNldEljb24oaWNvbl85MWUzOGM5YWIzNzE0ZTdmYTJlZWMzZGFjMjdlOTczYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MTU0MDI1ZGQ5YjM0MjZlYTA2Y2Q0ZGY0MmIxYjNlMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Njc1MDU3NTk1ZGQ0NGQyYjk0NmU2MWEyZGE1ZDdjNiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzY3NTA1NzU5NWRkNDRkMmI5NDZlNjFhMmRhNWQ3YzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzMTAgTWlhc3RvIFJhZGvDs3cgLSBIZXJiIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjE1NDAyNWRkOWIzNDI2ZWEwNmNkNGRmNDJiMWIzZTIuc2V0Q29udGVudChodG1sXzc2NzUwNTc1OTVkZDQ0ZDJiOTQ2ZTYxYTJkYTVkN2M2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGQwZGM4ODZmNGVhNDZmMmFkMDE2NzljM2M5MDMzYWUuYmluZFBvcHVwKHBvcHVwXzYxNTQwMjVkZDliMzQyNmVhMDZjZDRkZjQyYjFiM2UyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzkyNGI4M2MyMGNiODQyYjY5MjQ3ZDZkN2EwZjQ5NWI5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNTAzODg0LDE2LjQwMTI4NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl83YzI4NDY3MWQ1Yzc0YzM2YmVmODA0MTk2ODEzMzAxMCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85MjRiODNjMjBjYjg0MmI2OTI0N2Q2ZDdhMGY0OTViOS5zZXRJY29uKGljb25fN2MyODQ2NzFkNWM3NGMzNmJlZjgwNDE5NjgxMzMwMTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWEwZjdkMzQyZTc5NGFkZjkwYmQzNzQxYmQzNzc1YTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmU3MTY3YjllMTA3NDQwMWI0OWZlNDA3NjIzZDUxM2YgPSAkKCc8ZGl2IGlkPSJodG1sX2JlNzE2N2I5ZTEwNzQ0MDFiNDlmZTQwNzYyM2Q1MTNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzExIFJlbmVzYW5zb3d5IFJhdHVzeiB3IFJhZGtvd2llIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWEwZjdkMzQyZTc5NGFkZjkwYmQzNzQxYmQzNzc1YTAuc2V0Q29udGVudChodG1sX2JlNzE2N2I5ZTEwNzQ0MDFiNDlmZTQwNzYyM2Q1MTNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTI0YjgzYzIwY2I4NDJiNjkyNDdkNmQ3YTBmNDk1YjkuYmluZFBvcHVwKHBvcHVwX2VhMGY3ZDM0MmU3OTRhZGY5MGJkMzc0MWJkMzc3NWEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUyNDI2YWJmNjU3NDQzOGNhZmFiZjkzZWM1ODE0NDY0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDM4MDUzLDE2LjY1NTU1N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kMTIxYTFkNzgzYTM0ZTRhYWE5MDUxNTJhYmI2NTBhYSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81MjQyNmFiZjY1NzQ0MzhjYWZhYmY5M2VjNTgxNDQ2NC5zZXRJY29uKGljb25fZDEyMWExZDc4M2EzNGU0YWFhOTA1MTUyYWJiNjUwYWEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTJlMGRmNWJlOWRjNGE1MmFjMjUwMDBiNGEyZTE4ZjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjA5MmM3MDhhNjg1NGJkY2IwZDE5ZGJlN2VlMmE3NzkgPSAkKCc8ZGl2IGlkPSJodG1sXzIwOTJjNzA4YTY4NTRiZGNiMGQxOWRiZTdlZTJhNzc5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzEzIE1vc3QgxZp3LiBKYW5hIHcgS8WCb2R6a3U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkyZTBkZjViZTlkYzRhNTJhYzI1MDAwYjRhMmUxOGYxLnNldENvbnRlbnQoaHRtbF8yMDkyYzcwOGE2ODU0YmRjYjBkMTlkYmU3ZWUyYTc3OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUyNDI2YWJmNjU3NDQzOGNhZmFiZjkzZWM1ODE0NDY0LmJpbmRQb3B1cChwb3B1cF85MmUwZGY1YmU5ZGM0YTUyYWMyNTAwMGI0YTJlMThmMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZDM2ZGJmYTIzMzE0MmQ0OTI1NmZjNjk4ZjJhMzE5YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjQzOTcsMTYuNjUzMjk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzAzMjkzOWJkZjkwZjQzN2I5ZmI2OTEwNTg5YmQ5NzcwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2RkMzZkYmZhMjMzMTQyZDQ5MjU2ZmM2OThmMmEzMTlhLnNldEljb24oaWNvbl8wMzI5MzliZGY5MGY0MzdiOWZiNjkxMDU4OWJkOTc3MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNzE1MzI5ZTBkYTY0ODY0YWZmNTE5OGU5ZjgzNWI4NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNmIyMzc5OGZhOTk0ZDE3OTcxOTQ2MmUzNDA3OWE4ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfZTZiMjM3OThmYTk5NGQxNzk3MTk0NjJlMzQwNzlhOGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzMTQgVHdpZXJkemEgS8WCb2R6a28gPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNzE1MzI5ZTBkYTY0ODY0YWZmNTE5OGU5ZjgzNWI4NC5zZXRDb250ZW50KGh0bWxfZTZiMjM3OThmYTk5NGQxNzk3MTk0NjJlMzQwNzlhOGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZDM2ZGJmYTIzMzE0MmQ0OTI1NmZjNjk4ZjJhMzE5YS5iaW5kUG9wdXAocG9wdXBfYTcxNTMyOWUwZGE2NDg2NGFmZjUxOThlOWY4MzViODQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzE0ZDNhYjY1OGQwNGE5M2JhMTViMDBjZGNmNDBkZGUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC40Mzg3OTIsMTYuNjU0NTEyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2RlNjQwNjgzMjQ2ZjRiOGY4YzRiNmNiY2FmMGFiZjIwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzMxNGQzYWI2NThkMDRhOTNiYTE1YjAwY2RjZjQwZGRlLnNldEljb24oaWNvbl9kZTY0MDY4MzI0NmY0YjhmOGM0YjZjYmNhZjBhYmYyMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNjljYzY0ZDY3ODY0YzljYjgwODQ5ZmRhZTQ2YmEwZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNTBiNGFiNGMwNGM0YWJlYmY3OTI2MTk1Y2U4NmJlOSA9ICQoJzxkaXYgaWQ9Imh0bWxfYjUwYjRhYjRjMDRjNGFiZWJmNzkyNjE5NWNlODZiZTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzMTUgUmF0dXN6IHcgS8WCb2R6a3U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M2OWNjNjRkNjc4NjRjOWNiODA4NDlmZGFlNDZiYTBmLnNldENvbnRlbnQoaHRtbF9iNTBiNGFiNGMwNGM0YWJlYmY3OTI2MTk1Y2U4NmJlOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzMxNGQzYWI2NThkMDRhOTNiYTE1YjAwY2RjZjQwZGRlLmJpbmRQb3B1cChwb3B1cF9jNjljYzY0ZDY3ODY0YzljYjgwODQ5ZmRhZTQ2YmEwZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xODMyMmQ1NDM1OGY0MWQ3YTA3ZTE1N2M4OTExZWIyOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjM3MDc2NiwxNi45NjA0NjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fODFjZmIzMzQxNTllNDVlZjlkYzUyOGJiYWJmNGYxNDAgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMTgzMjJkNTQzNThmNDFkN2EwN2UxNTdjODkxMWViMjkuc2V0SWNvbihpY29uXzgxY2ZiMzM0MTU5ZTQ1ZWY5ZGM1MjhiYmFiZjRmMTQwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVhMzRlYjI4MGRiMjRmNWY5YTMzMjY1YmIwYmU0YzVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VkZTlkNTk4MGFkOTQ5Y2Q4NmVjMDNkOTRkMjhiMGM3ID0gJCgnPGRpdiBpZD0iaHRtbF9lZGU5ZDU5ODBhZDk0OWNkODZlYzAzZDk0ZDI4YjBjNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDM5OCBSYXR1c3ogbmEgcnlua3UgdyBQcnVzaWNhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVhMzRlYjI4MGRiMjRmNWY5YTMzMjY1YmIwYmU0YzVmLnNldENvbnRlbnQoaHRtbF9lZGU5ZDU5ODBhZDk0OWNkODZlYzAzZDk0ZDI4YjBjNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE4MzIyZDU0MzU4ZjQxZDdhMDdlMTU3Yzg5MTFlYjI5LmJpbmRQb3B1cChwb3B1cF81YTM0ZWIyODBkYjI0ZjVmOWEzMzI2NWJiMGJlNGM1Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83MWQ4MjdkZjg1M2Q0YzVlOTI3OTY1NmViM2ViN2E2MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjM1ODk1NiwxNy4yODIwNDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZTkzYjhjYTY4NDkyNDkxYTg5YWUxNWExY2JjZTFiYmYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzFkODI3ZGY4NTNkNGM1ZTkyNzk2NTZlYjNlYjdhNjMuc2V0SWNvbihpY29uX2U5M2I4Y2E2ODQ5MjQ5MWE4OWFlMTVhMWNiY2UxYmJmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM3NzA0ZjY3MmRkZTQ5MGJhOTAxMDdkYzU5YmZkNTdlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk0NDg1NWU2NDA2ZDRiMTZiMjdiZmIyYTNiMTYzODFmID0gJCgnPGRpdiBpZD0iaHRtbF85NDQ4NTVlNjQwNmQ0YjE2YjI3YmZiMmEzYjE2MzgxZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDM5OSBLb8WbY2nDs8WCIMWbdy4gSsOzemVmYSBPYmx1YmllxYRjYSBOTVAgdyBaxYJvdG93aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM3NzA0ZjY3MmRkZTQ5MGJhOTAxMDdkYzU5YmZkNTdlLnNldENvbnRlbnQoaHRtbF85NDQ4NTVlNjQwNmQ0YjE2YjI3YmZiMmEzYjE2MzgxZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcxZDgyN2RmODUzZDRjNWU5Mjc5NjU2ZWIzZWI3YTYzLmJpbmRQb3B1cChwb3B1cF8zNzcwNGY2NzJkZGU0OTBiYTkwMTA3ZGM1OWJmZDU3ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNDQ5NjA3OTBmODM0NmRjOTAwMzY1OWFkMjExNGE5ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjQ4MjI3MywxNi45MTcwMzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjEwOGRmNzJjMTNiNDYyYThkMGZiMTEyMDhiNmFhNzEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZDQ0OTYwNzkwZjgzNDZkYzkwMDM2NTlhZDIxMTRhOWUuc2V0SWNvbihpY29uXzYxMDhkZjcyYzEzYjQ2MmE4ZDBmYjExMjA4YjZhYTcxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBlYjdiODU3ZDRmZTRmMTZhYTY4NjQxNTlmMTYzOGMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2YzUzMjg5NDg3NzQ0YTQ5M2RmMzk4ODc0YWY3NGE2ID0gJCgnPGRpdiBpZD0iaHRtbF9mNmM1MzI4OTQ4Nzc0NGE0OTNkZjM5ODg3NGFmNzRhNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQwMCBaZXNww7PFgiBQYcWCYWNvd28tUGFya293eSB3IMW7bWlncm9kemllPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZWI3Yjg1N2Q0ZmU0ZjE2YWE2ODY0MTU5ZjE2MzhjMS5zZXRDb250ZW50KGh0bWxfZjZjNTMyODk0ODc3NDRhNDkzZGYzOTg4NzRhZjc0YTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kNDQ5NjA3OTBmODM0NmRjOTAwMzY1OWFkMjExNGE5ZS5iaW5kUG9wdXAocG9wdXBfMGViN2I4NTdkNGZlNGYxNmFhNjg2NDE1OWYxNjM4YzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjlmNjBiODdjNTg4NDc4OWI2Y2ZlNDVmMWU2ZDBhMzkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS40ODI1ODMsMTYuOTE2MDldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTRjYWNkZjg4Njg2NDIzNzllMDNmYTVlYjg2ZDA2YjkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZjlmNjBiODdjNTg4NDc4OWI2Y2ZlNDVmMWU2ZDBhMzkuc2V0SWNvbihpY29uX2E0Y2FjZGY4ODY4NjQyMzc5ZTAzZmE1ZWI4NmQwNmI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlkOTAyMzNiMDkyZTQxMDdhYmQ4ZGExZGI2Y2NjY2M3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZhNWU0ZjBlZGRlMzQyZGM4NGI1OTVjOGU5NjA5ZDA5ID0gJCgnPGRpdiBpZD0iaHRtbF82YTVlNGYwZWRkZTM0MmRjODRiNTk1YzhlOTYwOWQwOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQwMSBCYXN6dGEgdyDFu21pZ3JvZHppZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWQ5MDIzM2IwOTJlNDEwN2FiZDhkYTFkYjZjY2NjYzcuc2V0Q29udGVudChodG1sXzZhNWU0ZjBlZGRlMzQyZGM4NGI1OTVjOGU5NjA5ZDA5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjlmNjBiODdjNTg4NDc4OWI2Y2ZlNDVmMWU2ZDBhMzkuYmluZFBvcHVwKHBvcHVwXzlkOTAyMzNiMDkyZTQxMDdhYmQ4ZGExZGI2Y2NjY2M3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBmNTJjNzllMTIxMTRkNmQ4MmM1ZGU4ODU1NjU1Y2NhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMjY3MTYyLDE3LjMzNzUyOTk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zMTMyYjAzMDdiMzU0NzU1ODI0YzlkMzhmODFhMjI1OCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wZjUyYzc5ZTEyMTE0ZDZkODJjNWRlODg1NTY1NWNjYS5zZXRJY29uKGljb25fMzEzMmIwMzA3YjM1NDc1NTgyNGM5ZDM4ZjgxYTIyNTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGIzYWU4MDIwNzJhNDFmYjhkM2E2NjA4MmJjODI0YzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmU5NzM4YzE0OTNkNGU0OGE2NDE1ZmIyMTE5YjQ4YjcgPSAkKCc8ZGl2IGlkPSJodG1sX2ZlOTczOGMxNDkzZDRlNDhhNjQxNWZiMjExOWI0OGI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDA1IFphbWVrIHcgRG9icm9zenljYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YjNhZTgwMjA3MmE0MWZiOGQzYTY2MDgyYmM4MjRjMy5zZXRDb250ZW50KGh0bWxfZmU5NzM4YzE0OTNkNGU0OGE2NDE1ZmIyMTE5YjQ4YjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wZjUyYzc5ZTEyMTE0ZDZkODJjNWRlODg1NTY1NWNjYS5iaW5kUG9wdXAocG9wdXBfOGIzYWU4MDIwNzJhNDFmYjhkM2E2NjA4MmJjODI0YzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWU1Mjc2ODVhYmQwNDk0NDgyOWEyN2NhMjUwMDA0YjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4yNTYzMzUsMTcuMDQ5NTMyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzczYjlhOWQwYjhhZjRhNTdhYjdiZDk0YmYzYzM0MjI1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzVlNTI3Njg1YWJkMDQ5NDQ4MjlhMjdjYTI1MDAwNGI3LnNldEljb24oaWNvbl83M2I5YTlkMGI4YWY0YTU3YWI3YmQ5NGJmM2MzNDIyNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMDEwNTIzOGY0ODA0MmE4YjdlZDE4MmRkNmFjMDFkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kY2IzYWU0ZjgzZTE0Yzg0YWEzZTcxZDk0NDgwNWU4MiA9ICQoJzxkaXYgaWQ9Imh0bWxfZGNiM2FlNGY4M2UxNGM4NGFhM2U3MWQ5NDQ4MDVlODIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0MDYgUGHFgmFjIHcgV2lzem5pIE1hxYJlajwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDAxMDUyMzhmNDgwNDJhOGI3ZWQxODJkZDZhYzAxZGQuc2V0Q29udGVudChodG1sX2RjYjNhZTRmODNlMTRjODRhYTNlNzFkOTQ0ODA1ZTgyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWU1Mjc2ODVhYmQwNDk0NDgyOWEyN2NhMjUwMDA0YjcuYmluZFBvcHVwKHBvcHVwX2QwMTA1MjM4ZjQ4MDQyYThiN2VkMTgyZGQ2YWMwMWRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RjZTUzMGJlMTBjMjQ3MTk4ZmRkMmQzYzMyY2E0YTdmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMzA5NTY3LDE3LjA2NzExMDk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hMzI1NDkwZDNlOTk0ZGE1ODM2ZDRhZjQ4MWVkMWIzYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kY2U1MzBiZTEwYzI0NzE5OGZkZDJkM2MzMmNhNGE3Zi5zZXRJY29uKGljb25fYTMyNTQ5MGQzZTk5NGRhNTgzNmQ0YWY0ODFlZDFiM2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODRkMmNmNmE2ZjhkNDVkNmE4MWYyYmM1OGJjMzEyNjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmYzZGU1ZTQyYjY4NGFkMTlhODVlMGU5MzY0YmQ4ZWQgPSAkKCc8ZGl2IGlkPSJodG1sX2ZmM2RlNWU0MmI2ODRhZDE5YTg1ZTBlOTM2NGJkOGVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDA4IEJhenlsaWthIMWbdy4gSmFkd2lnaSDFmmzEhXNraWVqIHcgVHJ6ZWJuaWN5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NGQyY2Y2YTZmOGQ0NWQ2YTgxZjJiYzU4YmMzMTI2NC5zZXRDb250ZW50KGh0bWxfZmYzZGU1ZTQyYjY4NGFkMTlhODVlMGU5MzY0YmQ4ZWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kY2U1MzBiZTEwYzI0NzE5OGZkZDJkM2MzMmNhNGE3Zi5iaW5kUG9wdXAocG9wdXBfODRkMmNmNmE2ZjhkNDVkNmE4MWYyYmM1OGJjMzEyNjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTM3ZThhMTc5MzU5NGFiMGI1MGUzZjIzZmY4MDBhMWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC40NTEyODcsMTYuMjQyODc3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzI1NDE5YzYxYTM4MTQxNGQ4YzkwMGU5MDEwNmUyMTZmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzUzN2U4YTE3OTM1OTRhYjBiNTBlM2YyM2ZmODAwYTFmLnNldEljb24oaWNvbl8yNTQxOWM2MWEzODE0MTRkOGM5MDBlOTAxMDZlMjE2Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZTg0YTJkYjUzZGY0ZWY5YTY5NmZhZmRmMDE1ZDYyMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMzdkOTMxOGMyNzU0MzBjOTYxN2EyOTE1N2RhODczMyA9ICQoJzxkaXYgaWQ9Imh0bWxfMTM3ZDkzMThjMjc1NDMwYzk2MTdhMjkxNTdkYTg3MzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0MDkgS2/Fm2Npw7PFgiDFm3cuIEJhcnTFgm9taWVqYSBBcG9zdG/FgmEgdyBDemVybW5lajwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmU4NGEyZGI1M2RmNGVmOWE2OTZmYWZkZjAxNWQ2MjEuc2V0Q29udGVudChodG1sXzEzN2Q5MzE4YzI3NTQzMGM5NjE3YTI5MTU3ZGE4NzMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTM3ZThhMTc5MzU5NGFiMGI1MGUzZjIzZmY4MDBhMWYuYmluZFBvcHVwKHBvcHVwX2JlODRhMmRiNTNkZjRlZjlhNjk2ZmFmZGYwMTVkNjIxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAxMmViMDMwMWZiZjRiMDFiYTgzMmFhYTk5NjI3YThiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDkwMDcxLDE2LjQ1NTA0N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8wY2VhMTlhNzQ2YWU0MGExOTZiNWMxODkyNDI4Njg0NiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wMTJlYjAzMDFmYmY0YjAxYmE4MzJhYWE5OTYyN2E4Yi5zZXRJY29uKGljb25fMGNlYTE5YTc0NmFlNDBhMTk2YjVjMTg5MjQyODY4NDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjM2YWNlY2M1NGQwNDRiOWEyOTU2NDA2ZTRmYmFjZmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2E3ZjFkZmU5ZTIyNDk4NjliZTA0MDUzOTQ5ZDM2NTggPSAkKCc8ZGl2IGlkPSJodG1sXzNhN2YxZGZlOWUyMjQ5ODY5YmUwNDA1Mzk0OWQzNjU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDEwIFNhbmt0dWFyaXVtIE1hcnlqbmUgdyBXYW1iaWVyenljYWNoIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjM2YWNlY2M1NGQwNDRiOWEyOTU2NDA2ZTRmYmFjZmMuc2V0Q29udGVudChodG1sXzNhN2YxZGZlOWUyMjQ5ODY5YmUwNDA1Mzk0OWQzNjU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDEyZWIwMzAxZmJmNGIwMWJhODMyYWFhOTk2MjdhOGIuYmluZFBvcHVwKHBvcHVwX2IzNmFjZWNjNTRkMDQ0YjlhMjk1NjQwNmU0ZmJhY2ZjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzlmMzU1YTA4NWEzNTRlMzJiYWRjNTY0MWVlNjRmM2FhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNTkwNjk3LDE2LjUxNDU2OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85MmRkNzQwZmE1ODA0OTJiYmVhMWZkYWQxYjczZDlmMyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85ZjM1NWEwODVhMzU0ZTMyYmFkYzU2NDFlZTY0ZjNhYS5zZXRJY29uKGljb25fOTJkZDc0MGZhNTgwNDkyYmJlYTFmZGFkMWI3M2Q5ZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDdjODdjYTRlNzU4NDI5Mjk0YTIyZDU0ZDZhZWQ4OTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDk2ZDFmODg0ZjZlNDlmOTkwNjRiYzExYWNlY2YzMzEgPSAkKCc8ZGl2IGlkPSJodG1sXzQ5NmQxZjg4NGY2ZTQ5Zjk5MDY0YmMxMWFjZWNmMzMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDExIFR1cnlzdHljem5hIEtvcGFsbmlhIFfEmWdsYSB3IE5vd2VqIFJ1ZHppZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDdjODdjYTRlNzU4NDI5Mjk0YTIyZDU0ZDZhZWQ4OTIuc2V0Q29udGVudChodG1sXzQ5NmQxZjg4NGY2ZTQ5Zjk5MDY0YmMxMWFjZWNmMzMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWYzNTVhMDg1YTM1NGUzMmJhZGM1NjQxZWU2NGYzYWEuYmluZFBvcHVwKHBvcHVwXzQ3Yzg3Y2E0ZTc1ODQyOTI5NGEyMmQ1NGQ2YWVkODkyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM5NGEyMGRhOTBjOTRjMjRhMjJlN2FhZmJhOTg4MTIzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNTA5NTM1LDE2LjczOTgwOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kZWY4OTQ4ZDIxZGU0MjJiOWM2NGFkNWU3YzY2MDE5NSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zOTRhMjBkYTkwYzk0YzI0YTIyZTdhYWZiYTk4ODEyMy5zZXRJY29uKGljb25fZGVmODk0OGQyMWRlNDIyYjljNjRhZDVlN2M2NjAxOTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTM2YWVmYWVjNjA4NDVhYjgwMWUzMTNmMzU0ZjkwZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWMxZDlmMTgxY2Q1NDMwNmFiNWJhMjM3ODAzNjg2ZTEgPSAkKCc8ZGl2IGlkPSJodG1sX2VjMWQ5ZjE4MWNkNTQzMDZhYjViYTIzNzgwMzY4NmUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDE1IEtsYXN6dG9yIFNpw7NzdHIgTWFyeWkgTmllcG9rYWxhbmVqIHcgQmFyZHppZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTM2YWVmYWVjNjA4NDVhYjgwMWUzMTNmMzU0ZjkwZjUuc2V0Q29udGVudChodG1sX2VjMWQ5ZjE4MWNkNTQzMDZhYjViYTIzNzgwMzY4NmUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzk0YTIwZGE5MGM5NGMyNGEyMmU3YWFmYmE5ODgxMjMuYmluZFBvcHVwKHBvcHVwXzkzNmFlZmFlYzYwODQ1YWI4MDFlMzEzZjM1NGY5MGY1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzkzMmExNDVjOGJiMjQ0N2JiOTAyMGFlZmM1YmVhYTFkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDY1OTU4LDE3LjAwNDEwM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kMDNhMzNjOTE3YmE0NmE5OTBkZWI0ZjU1OTU0MzU1NiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85MzJhMTQ1YzhiYjI0NDdiYjkwMjBhZWZjNWJlYWExZC5zZXRJY29uKGljb25fZDAzYTMzYzkxN2JhNDZhOTkwZGViNGY1NTk1NDM1NTYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTgxM2NkOTI0YzJjNGRmZGIyNDYyY2I3NmNmNDRkODAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTVjNmJhODFkYmQ3NGNkMGJmMGZmZTYyM2U0NjI3NDEgPSAkKCc8ZGl2IGlkPSJodG1sXzE1YzZiYTgxZGJkNzRjZDBiZjBmZmU2MjNlNDYyNzQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDE2IE11emV1bSBHYXpvd25pY3R3YSB3IFBhY3prb3dpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTgxM2NkOTI0YzJjNGRmZGIyNDYyY2I3NmNmNDRkODAuc2V0Q29udGVudChodG1sXzE1YzZiYTgxZGJkNzRjZDBiZjBmZmU2MjNlNDYyNzQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTMyYTE0NWM4YmIyNDQ3YmI5MDIwYWVmYzViZWFhMWQuYmluZFBvcHVwKHBvcHVwX2U4MTNjZDkyNGMyYzRkZmRiMjQ2MmNiNzZjZjQ0ZDgwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2VmYWU1YzRmY2MzMDRhZmVhNmE3YThhMjhjODBiZDFiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDI3ODI2LDE2LjU0NTMzMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hNzZjMmVmYzFlMjE0NzdmYWFhMDY1Njk1ZDkyMDc0MCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lZmFlNWM0ZmNjMzA0YWZlYTZhN2E4YTI4YzgwYmQxYi5zZXRJY29uKGljb25fYTc2YzJlZmMxZTIxNDc3ZmFhYTA2NTY5NWQ5MjA3NDApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNThjY2JmNjZkMzlkNDdjY2I5NTk0MTc5ODI0NDYxNzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjlhNDI3NjhiMTNiNDMxNDhlMTg0NjMzN2MzNWRjZGMgPSAkKCc8ZGl2IGlkPSJodG1sX2Y5YTQyNzY4YjEzYjQzMTQ4ZTE4NDYzMzdjMzVkY2RjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDE3IEtvxZtjacOzxYIgxZt3LiBKZXJ6ZWdvIHcgU3phbGVqb3dpZSBHw7NybnltPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81OGNjYmY2NmQzOWQ0N2NjYjk1OTQxNzk4MjQ0NjE3OC5zZXRDb250ZW50KGh0bWxfZjlhNDI3NjhiMTNiNDMxNDhlMTg0NjMzN2MzNWRjZGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lZmFlNWM0ZmNjMzA0YWZlYTZhN2E4YTI4YzgwYmQxYi5iaW5kUG9wdXAocG9wdXBfNThjY2JmNjZkMzlkNDdjY2I5NTk0MTc5ODI0NDYxNzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGNlYzQwMzgwZjQyNGNiYzgzNzNkOWMxOGI0NWVhNjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42NjQ4NTYsMTYuMDY5MTEyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2MwN2JiNzZhMWE5YTQzMThhOWQ5ZTlmYzNhZDhmYThmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzRjZWM0MDM4MGY0MjRjYmM4MzczZDljMThiNDVlYTY2LnNldEljb24oaWNvbl9jMDdiYjc2YTFhOWE0MzE4YTlkOWU5ZmMzYWQ4ZmE4Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOTgzYzBhZjFhMmM0MzBhYjk3ODY5ZDkwNGYwNDMxNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNmI4NzIxOGQ2Y2I0YzYwOTcwMThkMjI4OWI5NmFjNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZTZiODcyMThkNmNiNGM2MDk3MDE4ZDIyODliOTZhYzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0MTggS2/Fm2Npw7PFgiDFmndpxJl0ZWogUm9kemlueSB3IENoZcWCbXNrdSDFmmzEhXNraW08L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M5ODNjMGFmMWEyYzQzMGFiOTc4NjlkOTA0ZjA0MzE1LnNldENvbnRlbnQoaHRtbF9lNmI4NzIxOGQ2Y2I0YzYwOTcwMThkMjI4OWI5NmFjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRjZWM0MDM4MGY0MjRjYmM4MzczZDljMThiNDVlYTY2LmJpbmRQb3B1cChwb3B1cF9jOTgzYzBhZjFhMmM0MzBhYjk3ODY5ZDkwNGYwNDMxNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81ZWRjMWM0MmFmNDA0ZTUzYTdkZTc0YmUzNzE2MTc0OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjkyMTg0LDE2LjA5Nzg4OTAwMDAwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iZjExYThhYTI4NWE0NTg5OTA4MWYyNWRlZDZhNWZkOSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81ZWRjMWM0MmFmNDA0ZTUzYTdkZTc0YmUzNzE2MTc0OS5zZXRJY29uKGljb25fYmYxMWE4YWEyODVhNDU4OTkwODFmMjVkZWQ2YTVmZDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmE4ZmNjNDg5ZWU4NDRlYjk1MTNjMmJiZmQ0MWFhMjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGI5NTM4ZjBmNjZmNDRjYjgxMzU3YTEwN2QzOTM3ZGUgPSAkKCc8ZGl2IGlkPSJodG1sXzBiOTUzOGYwZjY2ZjQ0Y2I4MTM1N2ExMDdkMzkzN2RlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDMzIFphbWVrIHcgQm9sa293aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJhOGZjYzQ4OWVlODQ0ZWI5NTEzYzJiYmZkNDFhYTI0LnNldENvbnRlbnQoaHRtbF8wYjk1MzhmMGY2NmY0NGNiODEzNTdhMTA3ZDM5MzdkZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVlZGMxYzQyYWY0MDRlNTNhN2RlNzRiZTM3MTYxNzQ5LmJpbmRQb3B1cChwb3B1cF8yYThmY2M0ODllZTg0NGViOTUxM2MyYmJmZDQxYWEyNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81ZDgxMTNmYzA1OWE0MTRjOTY4NWViNDhhNTA1YjcxOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjgyOTYyOCwxNi4zMDY0NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNTE0NDk4M2Y4NmU4NDJkMWIyNmJjM2Q0MDZlNGY2MWUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNWQ4MTEzZmMwNTlhNDE0Yzk2ODVlYjQ4YTUwNWI3MTkuc2V0SWNvbihpY29uXzUxNDQ5ODNmODZlODQyZDFiMjZiYzNkNDA2ZTRmNjFlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzZGNjMzllOTZhMzRiN2VhM2ZmMzFlODZhN2I0NTIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU3ZjgwNDJhNzIzYTRiNjc5YTRhMjRkOTRhYjc1MTIxID0gJCgnPGRpdiBpZD0iaHRtbF81N2Y4MDQyYTcyM2E0YjY3OWE0YTI0ZDk0YWI3NTEyMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQzNCBQYWxtaWFybmlhIHcgV2HFgmJyenljaHU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzZGNjMzllOTZhMzRiN2VhM2ZmMzFlODZhN2I0NTIxLnNldENvbnRlbnQoaHRtbF81N2Y4MDQyYTcyM2E0YjY3OWE0YTI0ZDk0YWI3NTEyMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVkODExM2ZjMDU5YTQxNGM5Njg1ZWI0OGE1MDViNzE5LmJpbmRQb3B1cChwb3B1cF81M2RjYzM5ZTk2YTM0YjdlYTNmZjMxZTg2YTdiNDUyMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wMWJiYWFkNDYyYmU0MDhjODFhNDQ2MDE3MmEwM2NmNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjkxMTE1NiwxNi4yMjUzNTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZDc1YTA0NDA4MGExNGQ1MGI2YjdkZDE4M2E2ODM1N2IgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDFiYmFhZDQ2MmJlNDA4YzgxYTQ0NjAxNzJhMDNjZjcuc2V0SWNvbihpY29uX2Q3NWEwNDQwODBhMTRkNTBiNmI3ZGQxODNhNjgzNTdiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE2ODE1ZTk2YjU2ZjQ1MGZhOTVlYWZkMjg1ZmEyNWRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MzY2U4NDgxMDIzNjRkYTE5NWMxM2EwNDEwMTk3MjIxID0gJCgnPGRpdiBpZD0iaHRtbF9jM2NlODQ4MTAyMzY0ZGExOTVjMTNhMDQxMDE5NzIyMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQzNSBXaWXFvGEgd2lkb2tvd2EgbmEgV2llcnp5Y3kg4oCTIERvYnJvbWllcno8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE2ODE1ZTk2YjU2ZjQ1MGZhOTVlYWZkMjg1ZmEyNWRlLnNldENvbnRlbnQoaHRtbF9jM2NlODQ4MTAyMzY0ZGExOTVjMTNhMDQxMDE5NzIyMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAxYmJhYWQ0NjJiZTQwOGM4MWE0NDYwMTcyYTAzY2Y3LmJpbmRQb3B1cChwb3B1cF8xNjgxNWU5NmI1NmY0NTBmYTk1ZWFmZDI4NWZhMjVkZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hMjg0OTVhZjhmZDk0MGFmOTU4NmZkMjczOGYyOTEyYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjcyMjkyMywxNi4zMDQ0NjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTQ1NmMxNDUxOWRiNDIxZWE5MDZhNjI1ODA4NzRlMzIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYTI4NDk1YWY4ZmQ5NDBhZjk1ODZmZDI3MzhmMjkxMmIuc2V0SWNvbihpY29uX2E0NTZjMTQ1MTlkYjQyMWVhOTA2YTYyNTgwODc0ZTMyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhZjg3MTY3ZGEyNzQwOGFhOTNlZDE3ZmQzMDc0NDk5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3ZWZjZTgyZjI0ZTRmY2I5NDkyYWJkYmVmNTg3MjhhID0gJCgnPGRpdiBpZD0iaHRtbF85N2VmY2U4MmYyNGU0ZmNiOTQ5MmFiZGJlZjU4NzI4YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQ1MCBXaWXFvGEgd2lkb2tvd2EgbmEgQm9yb3dlajwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWFmODcxNjdkYTI3NDA4YWE5M2VkMTdmZDMwNzQ0OTkuc2V0Q29udGVudChodG1sXzk3ZWZjZTgyZjI0ZTRmY2I5NDkyYWJkYmVmNTg3MjhhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTI4NDk1YWY4ZmQ5NDBhZjk1ODZmZDI3MzhmMjkxMmIuYmluZFBvcHVwKHBvcHVwX2FhZjg3MTY3ZGEyNzQwOGFhOTNlZDE3ZmQzMDc0NDk5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUzNjdmNWZkNGMxMTQ1ZGQ4NzE2ZTg1ZjIyZjAzN2U3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMzk5ODg4LDE2LjU2NDkyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzM1ZDM2YTVhYzViOTQ3M2Q4ZDc2ZTdkNTE0ZTY3MDM1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzUzNjdmNWZkNGMxMTQ1ZGQ4NzE2ZTg1ZjIyZjAzN2U3LnNldEljb24oaWNvbl8zNWQzNmE1YWM1Yjk0NzNkOGQ3NmU3ZDUxNGU2NzAzNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZDk0NGUxZDczZmE0NjM5YjZlM2UxZTY3NjUwZTRkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZTcwYzFhYTg4ZDg0NDY2ODcwMGE4MTYzMzcwOGY4YyA9ICQoJzxkaXYgaWQ9Imh0bWxfYmU3MGMxYWE4OGQ4NDQ2Njg3MDBhODE2MzM3MDhmOGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0NTEgU2Fua3R1YXJpdW0gTUIgdyBTdGFyeW0gV2llbGlzxYJhd2l1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZDk0NGUxZDczZmE0NjM5YjZlM2UxZTY3NjUwZTRkNS5zZXRDb250ZW50KGh0bWxfYmU3MGMxYWE4OGQ4NDQ2Njg3MDBhODE2MzM3MDhmOGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MzY3ZjVmZDRjMTE0NWRkODcxNmU4NWYyMmYwMzdlNy5iaW5kUG9wdXAocG9wdXBfY2Q5NDRlMWQ3M2ZhNDYzOWI2ZTNlMWU2NzY1MGU0ZDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODhkYTliZTFlZjA1NDlhOGIzMzRhM2JkOTE0MWRkZDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC40NjM3NDQsMTcuMTcyMDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjc2NmVhOGEzMGZlNDhhMDg2ZjA1MDc1OWZlYWNhZGUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODhkYTliZTFlZjA1NDlhOGIzMzRhM2JkOTE0MWRkZDAuc2V0SWNvbihpY29uXzY3NjZlYThhMzBmZTQ4YTA4NmYwNTA3NTlmZWFjYWRlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwMjE3OWU4YjhiNjQzYWE5MTJmOTgzYmRlZDFjMWNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkN2NjMTY2NmU0NTRjMTk4OTdmZGExZTFlNTZhZjIzID0gJCgnPGRpdiBpZD0iaHRtbF8yZDdjYzE2NjZlNDU0YzE5ODk3ZmRhMWUxZTU2YWYyMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQ1MiBaYW1layB3IE90bXVjaG93aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwMjE3OWU4YjhiNjQzYWE5MTJmOTgzYmRlZDFjMWNhLnNldENvbnRlbnQoaHRtbF8yZDdjYzE2NjZlNDU0YzE5ODk3ZmRhMWUxZTU2YWYyMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg4ZGE5YmUxZWYwNTQ5YThiMzM0YTNiZDkxNDFkZGQwLmJpbmRQb3B1cChwb3B1cF8zMDIxNzllOGI4YjY0M2FhOTEyZjk4M2JkZWQxYzFjYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZDE3ZWFhZGExZDA0Mjk4OGM3OTY1Y2UyMDVkOTBkMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjQ2NjA1LDE3LjE3Mzg2NDAwMDAwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kYmEzZTA2MTY4MmI0YjU3ODU3NWNlZTNiMWViNWU1ZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mZDE3ZWFhZGExZDA0Mjk4OGM3OTY1Y2UyMDVkOTBkMy5zZXRJY29uKGljb25fZGJhM2UwNjE2ODJiNGI1Nzg1NzVjZWUzYjFlYjVlNWYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjE2MTUwZmYyY2Y5NDJiMWEyNTViMWNhNzM4YTZjMWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDY0Yzc2NDRhN2FjNDdmODk3NDE3ZWY4YWZlNDJmN2EgPSAkKCc8ZGl2IGlkPSJodG1sXzQ2NGM3NjQ0YTdhYzQ3Zjg5NzQxN2VmOGFmZTQyZjdhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDUzIFdpZcW8YSBCcmFteSBOeXNraWVqIHcgT3RtdWNob3dpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjE2MTUwZmYyY2Y5NDJiMWEyNTViMWNhNzM4YTZjMWYuc2V0Q29udGVudChodG1sXzQ2NGM3NjQ0YTdhYzQ3Zjg5NzQxN2VmOGFmZTQyZjdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmQxN2VhYWRhMWQwNDI5ODhjNzk2NWNlMjA1ZDkwZDMuYmluZFBvcHVwKHBvcHVwXzIxNjE1MGZmMmNmOTQyYjFhMjU1YjFjYTczOGE2YzFmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2YwMzg3ZjkzMDM5NTQ5OWI4NGU4OTA3ZDI0MzMyNTkwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDY1MjQsMTcuMTcyOTE5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2MwNGJmMjEyMGIxZDQyYWViNjdhMmFiZjlkMGE1MjM2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2YwMzg3ZjkzMDM5NTQ5OWI4NGU4OTA3ZDI0MzMyNTkwLnNldEljb24oaWNvbl9jMDRiZjIxMjBiMWQ0MmFlYjY3YTJhYmY5ZDBhNTIzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iODdhM2QzZmQ1ZWI0ZjU1YjdkYmQ1N2E0MDExYWU1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMzE3MDQ0Y2M5NDA0YTJlYTIzOGFmOWFiNWQyNmZmOCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjMxNzA0NGNjOTQwNGEyZWEyMzhhZjlhYjVkMjZmZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA0NTQgUmVuZXNhbnNvd3kgcmF0dXN6IHcgT3RtdWNob3dpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjg3YTNkM2ZkNWViNGY1NWI3ZGJkNTdhNDAxMWFlNWMuc2V0Q29udGVudChodG1sX2IzMTcwNDRjYzk0MDRhMmVhMjM4YWY5YWI1ZDI2ZmY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjAzODdmOTMwMzk1NDk5Yjg0ZTg5MDdkMjQzMzI1OTAuYmluZFBvcHVwKHBvcHVwX2I4N2EzZDNmZDVlYjRmNTViN2RiZDU3YTQwMTFhZTVjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY5YzhlMWNjMDdkMTQzODhhNzJlMGQyMTFhM2Y1NzJhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDY0OTA1LDE3LjE3MDc0OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hYWIwOTYyYzQ1ODI0MDVjYWU0YmE1YTZhYTZlMWU1MiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82OWM4ZTFjYzA3ZDE0Mzg4YTcyZTBkMjExYTNmNTcyYS5zZXRJY29uKGljb25fYWFiMDk2MmM0NTgyNDA1Y2FlNGJhNWE2YWE2ZTFlNTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGNjYTQ5ZDE3MmQ2NDRiYmI3YzQyYWM0YmJhYWNkMjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTJkNTI5OWRkMjRmNDgzOGFkYWNlODFmNjM1MGY2YjYgPSAkKCc8ZGl2IGlkPSJodG1sXzkyZDUyOTlkZDI0ZjQ4MzhhZGFjZTgxZjYzNTBmNmI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDU1IEtvxZtjacOzxYIgxZt3LiBNaWtvxYJhamEgaSBGcmFuY2lzemthIEtzYXdlcmVnbyB3IE90bXVjaG93aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhjY2E0OWQxNzJkNjQ0YmJiN2M0MmFjNGJiYWFjZDI4LnNldENvbnRlbnQoaHRtbF85MmQ1Mjk5ZGQyNGY0ODM4YWRhY2U4MWY2MzUwZjZiNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY5YzhlMWNjMDdkMTQzODhhNzJlMGQyMTFhM2Y1NzJhLmJpbmRQb3B1cChwb3B1cF84Y2NhNDlkMTcyZDY0NGJiYjdjNDJhYzRiYmFhY2QyOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zZmVhYjJmNzdjNjc0Y2M3OWEzNzQyM2RmNzVlYmMzZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjMxNzY1NywxNy4zODQ4MjRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZDdkZjJjYzljMzEwNDQxMWFiMjJhZWNiZjI0YmNmMTAgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfM2ZlYWIyZjc3YzY3NGNjNzlhMzc0MjNkZjc1ZWJjM2Yuc2V0SWNvbihpY29uX2Q3ZGYyY2M5YzMxMDQ0MTFhYjIyYWVjYmYyNGJjZjEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZhOWI0NDEzMzU1ZTRmMDA4YTdiMTQ4MDhmNzg2NzIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzNTZjY2M3NzY3OTQ1MTU4ZmViNzA3YzI3YmVkMmVmID0gJCgnPGRpdiBpZD0iaHRtbF80MzU2Y2NjNzc2Nzk0NTE1OGZlYjcwN2MyN2JlZDJlZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQ1NiBNdXJ5IG9icm9ubmUgaSBzdHVkbmlhIHcgR8WCdWNob8WCYXphY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhOWI0NDEzMzU1ZTRmMDA4YTdiMTQ4MDhmNzg2NzIxLnNldENvbnRlbnQoaHRtbF80MzU2Y2NjNzc2Nzk0NTE1OGZlYjcwN2MyN2JlZDJlZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNmZWFiMmY3N2M2NzRjYzc5YTM3NDIzZGY3NWViYzNmLmJpbmRQb3B1cChwb3B1cF9mYTliNDQxMzM1NWU0ZjAwOGE3YjE0ODA4Zjc4NjcyMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xMDkwYjkzZTBhYjA0YWUwYTc2MGE4NWU2NDEzY2Y1YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjIwMDIyOSwxNy44MzAxNTc5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOTA1ZjUwYmU2OTAwNGRmNzliMWRhOTAwYTRjY2RhZGIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMTA5MGI5M2UwYWIwNGFlMGE3NjBhODVlNjQxM2NmNWMuc2V0SWNvbihpY29uXzkwNWY1MGJlNjkwMDRkZjc5YjFkYTkwMGE0Y2NkYWRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE3ODY2MjZjM2ViMzQzMDJiMWE5YzdhZGQ1YTZlNjM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczM2YxYjdlNWY3OTRiODc5YjkxOTBlYTE2YmQyNDcxID0gJCgnPGRpdiBpZD0iaHRtbF83MzNmMWI3ZTVmNzk0Yjg3OWI5MTkwZWExNmJkMjQ3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQ1NyBSYXR1c3ogbWllanNraSB3IEfFgnViY3p5Y2FjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTc4NjYyNmMzZWIzNDMwMmIxYTljN2FkZDVhNmU2MzUuc2V0Q29udGVudChodG1sXzczM2YxYjdlNWY3OTRiODc5YjkxOTBlYTE2YmQyNDcxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTA5MGI5M2UwYWIwNGFlMGE3NjBhODVlNjQxM2NmNWMuYmluZFBvcHVwKHBvcHVwXzE3ODY2MjZjM2ViMzQzMDJiMWE5YzdhZGQ1YTZlNjM1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZjNGMyNGE3MTI1MDQ0ODU4OTg4ODgzNTI5ZWIzMjU0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjAxNjc4LDE3LjgyODcxOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kNTUxZjlkMWRkMWM0MzQ4OTBjMjU2ZWE5Yzc1NTljMCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mYzRjMjRhNzEyNTA0NDg1ODk4ODg4MzUyOWViMzI1NC5zZXRJY29uKGljb25fZDU1MWY5ZDFkZDFjNDM0ODkwYzI1NmVhOWM3NTU5YzApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjQyMDg5OGFmZjhjNDI3MGI3MWRlNjdkNzgwZTI5MDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWQyODM5MzUxZjBhNDYzYThjYjExM2FhYTBlYzNmMjIgPSAkKCc8ZGl2IGlkPSJodG1sXzVkMjgzOTM1MWYwYTQ2M2E4Y2IxMTNhYWEwZWMzZjIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDU4IEtvxZtjacOzxYIgTmFyb2R6ZW5pYSBOTVAgdyBHxYJ1YmN6eWNhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0MjA4OThhZmY4YzQyNzBiNzFkZTY3ZDc4MGUyOTAxLnNldENvbnRlbnQoaHRtbF81ZDI4MzkzNTFmMGE0NjNhOGNiMTEzYWFhMGVjM2YyMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZjNGMyNGE3MTI1MDQ0ODU4OTg4ODgzNTI5ZWIzMjU0LmJpbmRQb3B1cChwb3B1cF82NDIwODk4YWZmOGM0MjcwYjcxZGU2N2Q3ODBlMjkwMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNmRjYzljZjc0YWI0MzkwOGNkYzJkNjhiNmJjY2JjNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjE5ODc5MywxNy44Mjg4MDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTNmMTA1NGRlOWUwNDZiYTlhYzEyMmU1NGNlNjkwNjIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZjZkY2M5Y2Y3NGFiNDM5MDhjZGMyZDY4YjZiY2NiYzYuc2V0SWNvbihpY29uX2EzZjEwNTRkZTllMDQ2YmE5YWMxMjJlNTRjZTY5MDYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNjYWNiNmYyNGFlNzRkYTU5YjI4MTIxOTAyMGI5MWUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZiOGY3N2UxN2Y3MTQ1NjU5YjA5M2I0MzgxODc1YWE5ID0gJCgnPGRpdiBpZD0iaHRtbF9mYjhmNzdlMTdmNzE0NTY1OWIwOTNiNDM4MTg3NWFhOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQ1OSBNdXJ5IG9icm9ubmUgdyBHxYJ1YmN6eWNhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNjYWNiNmYyNGFlNzRkYTU5YjI4MTIxOTAyMGI5MWUwLnNldENvbnRlbnQoaHRtbF9mYjhmNzdlMTdmNzE0NTY1OWIwOTNiNDM4MTg3NWFhOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y2ZGNjOWNmNzRhYjQzOTA4Y2RjMmQ2OGI2YmNjYmM2LmJpbmRQb3B1cChwb3B1cF8zY2FjYjZmMjRhZTc0ZGE1OWIyODEyMTkwMjBiOTFlMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83ZjQ5OGExNjcxNjE0YzI3YTkxYmIzZGZhMTRkYjIxNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjE5ODE4NywxNy44MjQ4NTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYjcxOGI4NGMxMzVlNDZiZGFjMDM5NjMwZmY3YmVkZmUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfN2Y0OThhMTY3MTYxNGMyN2E5MWJiM2RmYTE0ZGIyMTYuc2V0SWNvbihpY29uX2I3MThiODRjMTM1ZTQ2YmRhYzAzOTYzMGZmN2JlZGZlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMzNTdkNzQyNzczZjQxMGViZTg2ZTAyODZjNzg5NTlkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U2YjI1Yjk1Nzg4MzQ0YjZiMDljYjk3MmVkOTVjNjg5ID0gJCgnPGRpdiBpZD0iaHRtbF9lNmIyNWI5NTc4ODM0NGI2YjA5Y2I5NzJlZDk1YzY4OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDQ2MCBQYXJrIG1pZWpza2kg4oCTIHByb21lbmFkYSB3IEfFgnViY3p5Y2FjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzM1N2Q3NDI3NzNmNDEwZWJlODZlMDI4NmM3ODk1OWQuc2V0Q29udGVudChodG1sX2U2YjI1Yjk1Nzg4MzQ0YjZiMDljYjk3MmVkOTVjNjg5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2Y0OThhMTY3MTYxNGMyN2E5MWJiM2RmYTE0ZGIyMTYuYmluZFBvcHVwKHBvcHVwXzMzNTdkNzQyNzczZjQxMGViZTg2ZTAyODZjNzg5NTlkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE2YWYzNDc0N2Y0MTRlMWM5ZGU3ZWE0MTU3OTU1MGJlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDczOTM2LDE3LjMzNzE5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl84YmQxOTM5M2IwNDY0ODNhYjQyMmM4YTA4MTEzOGM5YSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xNmFmMzQ3NDdmNDE0ZTFjOWRlN2VhNDE1Nzk1NTBiZS5zZXRJY29uKGljb25fOGJkMTkzOTNiMDQ2NDgzYWI0MjJjOGEwODExMzhjOWEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODZkZGIyZTBmZjE3NDRiYmEwYjE5NDE0ZTVlYTU1OWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmIxMzNlNWViMzc4NGE1MGFlOTNkMGE5MWNmMjI1MjEgPSAkKCc8ZGl2IGlkPSJodG1sXzJiMTMzZTVlYjM3ODRhNTBhZTkzZDBhOTFjZjIyNTIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDYxIE11emV1bSBQb3dpYXRvd2UgdyBOeXNpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODZkZGIyZTBmZjE3NDRiYmEwYjE5NDE0ZTVlYTU1OWYuc2V0Q29udGVudChodG1sXzJiMTMzZTVlYjM3ODRhNTBhZTkzZDBhOTFjZjIyNTIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTZhZjM0NzQ3ZjQxNGUxYzlkZTdlYTQxNTc5NTUwYmUuYmluZFBvcHVwKHBvcHVwXzg2ZGRiMmUwZmYxNzQ0YmJhMGIxOTQxNGU1ZWE1NTlmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM5ZjcwMmExNjE3MjQ4NzZiMmJlNzNlOTA4YTQ3YWY0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNDU0MjM5LDE2LjYzMTMwM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8wYThmZjc3YmU1MGU0YmZjYjE0OTQzNWU3NGUxYTk3ZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zOWY3MDJhMTYxNzI0ODc2YjJiZTczZTkwOGE0N2FmNC5zZXRJY29uKGljb25fMGE4ZmY3N2JlNTBlNGJmY2IxNDk0MzVlNzRlMWE5N2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjAxOGQxZDRhODg3NDJhNTlkYmI5YWU5OGRlYzg1ODIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmFlOGJlOTA2MDVjNDI5ZGFkNGVhOWI1ZjZlNTYxYzkgPSAkKCc8ZGl2IGlkPSJodG1sXzZhZThiZTkwNjA1YzQyOWRhZDRlYTliNWY2ZTU2MWM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDYyIFBhcmsgTWluaWF0dXIgTWluaWV1cm9sYW5kIHcgS8WCb2R6a3U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwMThkMWQ0YTg4NzQyYTU5ZGJiOWFlOThkZWM4NTgyLnNldENvbnRlbnQoaHRtbF82YWU4YmU5MDYwNWM0MjlkYWQ0ZWE5YjVmNmU1NjFjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM5ZjcwMmExNjE3MjQ4NzZiMmJlNzNlOTA4YTQ3YWY0LmJpbmRQb3B1cChwb3B1cF9iMDE4ZDFkNGE4ODc0MmE1OWRiYjlhZTk4ZGVjODU4Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hMWZhMmI1MDJkNmY0OTliYWJjNGQ3ZDE2YmE2YzA2ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjg5ODA5LDE2Ljc1MjQxOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kOTU0MTlkZTdkZDc0MTBiYTNjNWU1ODc3YzI4YTRjZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hMWZhMmI1MDJkNmY0OTliYWJjNGQ3ZDE2YmE2YzA2ZC5zZXRJY29uKGljb25fZDk1NDE5ZGU3ZGQ3NDEwYmEzYzVlNTg3N2MyOGE0Y2YpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTIwMjE4NDM5OTAyNDkxMGIzMzY2YzYwMDVjZmRhZDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWJmNzdiNjQzMzllNDE4N2JiOWZiZGUzZjIwZjhhN2QgPSAkKCc8ZGl2IGlkPSJodG1sXzViZjc3YjY0MzM5ZTQxODdiYjlmYmRlM2YyMGY4YTdkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNDYzIFphYnl0a293YSBHYXpvd25pYSBNaWVqc2thIHcgU29iw7N0Y2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkyMDIxODQzOTkwMjQ5MTBiMzM2NmM2MDA1Y2ZkYWQwLnNldENvbnRlbnQoaHRtbF81YmY3N2I2NDMzOWU0MTg3YmI5ZmJkZTNmMjBmOGE3ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ExZmEyYjUwMmQ2ZjQ5OWJhYmM0ZDdkMTZiYTZjMDZkLmJpbmRQb3B1cChwb3B1cF85MjAyMTg0Mzk5MDI0OTEwYjMzNjZjNjAwNWNmZGFkMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yOTZkMzhlZmY4Njk0MDViOGFkZDc2ZTkzMWNkYTE2ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY4MjM1NywxNy44NjMzMDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYjNhYzNjNzZiM2M2NDlmYzhlNjViMDNkZjk1MzM3OGMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMjk2ZDM4ZWZmODY5NDA1YjhhZGQ3NmU5MzFjZGExNmUuc2V0SWNvbihpY29uX2IzYWMzYzc2YjNjNjQ5ZmM4ZTY1YjAzZGY5NTMzNzhjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5YTMwM2U2MWUwODRkYzVhZmZkOWJlNWE4MzMzMDg2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJjZTU2NWE1ODdmNDRkMDQ4NDZjYzIyMWI4MmU5ZGUxID0gJCgnPGRpdiBpZD0iaHRtbF8yY2U1NjVhNTg3ZjQ0ZDA0ODQ2Y2MyMjFiODJlOWRlMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDUxMCBNdXpldW0gV3NpIE9wb2xza2llaiB3IE9wb2x1IDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjlhMzAzZTYxZTA4NGRjNWFmZmQ5YmU1YTgzMzMwODYuc2V0Q29udGVudChodG1sXzJjZTU2NWE1ODdmNDRkMDQ4NDZjYzIyMWI4MmU5ZGUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjk2ZDM4ZWZmODY5NDA1YjhhZGQ3NmU5MzFjZGExNmUuYmluZFBvcHVwKHBvcHVwX2Y5YTMwM2U2MWUwODRkYzVhZmZkOWJlNWE4MzMzMDg2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzljNzUzZTg1OTNjNDQ1NWNiZTIwZjUyNDE3ZTgxMmUwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMTEwMTQsMTcuMDQ0NDU3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzhiMDA1NzRlMjdiNjRlNDg5NDU0NGRlMmQyY2E1M2VjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzljNzUzZTg1OTNjNDQ1NWNiZTIwZjUyNDE3ZTgxMmUwLnNldEljb24oaWNvbl84YjAwNTc0ZTI3YjY0ZTQ4OTQ1NDRkZTJkMmNhNTNlYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMWM2ZTcxOTFkNTY0OGY5OTlhYzZlODMyMmQ3MzExZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNmRkNjY4NDI4NWY0OGE0YTFiMTc1MTE2ZTljZGJiMCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDZkZDY2ODQyODVmNDhhNGExYjE3NTExNmU5Y2RiYjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA1MTQgUGFub3JhbWEgUmFjxYJhd2lja2EgV3JvY8WCYXcgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMWM2ZTcxOTFkNTY0OGY5OTlhYzZlODMyMmQ3MzExZi5zZXRDb250ZW50KGh0bWxfMDZkZDY2ODQyODVmNDhhNGExYjE3NTExNmU5Y2RiYjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85Yzc1M2U4NTkzYzQ0NTVjYmUyMGY1MjQxN2U4MTJlMC5iaW5kUG9wdXAocG9wdXBfMTFjNmU3MTkxZDU2NDhmOTk5YWM2ZTgzMjJkNzMxMWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWJmZDdkYTEyZmJiNDAzMTlkMGQ0NDZiOTg1ZTk0ZjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC4yNTAwNTksMTYuODM0ODMxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2MwMmFkZDA3YmNjNTRiMDZhYmU3OTlkMjczNTY1MDllID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzViZmQ3ZGExMmZiYjQwMzE5ZDBkNDQ2Yjk4NWU5NGY0LnNldEljb24oaWNvbl9jMDJhZGQwN2JjYzU0YjA2YWJlNzk5ZDI3MzU2NTA5ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MGZlZWVjNTYwOWE0MTIzYjZjZmU4ZGNjY2M2MTg5MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNmU1NDg1YTgyZTg0NWQzODQyMGRlOWZjODViNDRiZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMzZlNTQ4NWE4MmU4NDVkMzg0MjBkZTlmYzg1YjQ0YmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2MDQgU3RhcmEgS29wYWxuaWEgVXJhbnUgdyBLbGV0bmllIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjBmZWVlYzU2MDlhNDEyM2I2Y2ZlOGRjY2NjNjE4OTMuc2V0Q29udGVudChodG1sXzM2ZTU0ODVhODJlODQ1ZDM4NDIwZGU5ZmM4NWI0NGJkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWJmZDdkYTEyZmJiNDAzMTlkMGQ0NDZiOTg1ZTk0ZjQuYmluZFBvcHVwKHBvcHVwXzYwZmVlZWM1NjA5YTQxMjNiNmNmZThkY2NjYzYxODkzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFiMTZiYjA5Nzg5YzRmYzdiNGU0ODhkMzdlMTQ0OGQ4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMjQzMzM1LDE2Ljg1MzM0ODk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82YTVjNzBhODU5YmY0OTQwYjA4NTU2ZDRmZGE4NzMzNCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xYjE2YmIwOTc4OWM0ZmM3YjRlNDg4ZDM3ZTE0NDhkOC5zZXRJY29uKGljb25fNmE1YzcwYTg1OWJmNDk0MGIwODU1NmQ0ZmRhODczMzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTk0MWQ2ODI1MTU3NDlhOWE2ZjIxMjU3ZWYzMDQ2NGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTA4ZmQzZWMxNDc0NGEwYzhjN2E1YzY4MWIxYTdkMTYgPSAkKCc8ZGl2IGlkPSJodG1sXzEwOGZkM2VjMTQ3NDRhMGM4YzdhNWM2ODFiMWE3ZDE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjA2IEphc2tpbmlhIE5pZWTFundpZWR6aWEgdyBLbGV0bmllIDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTk0MWQ2ODI1MTU3NDlhOWE2ZjIxMjU3ZWYzMDQ2NGIuc2V0Q29udGVudChodG1sXzEwOGZkM2VjMTQ3NDRhMGM4YzdhNWM2ODFiMWE3ZDE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWIxNmJiMDk3ODljNGZjN2I0ZTQ4OGQzN2UxNDQ4ZDguYmluZFBvcHVwKHBvcHVwXzk5NDFkNjgyNTE1NzQ5YTlhNmYyMTI1N2VmMzA0NjRiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFlNzFmMDVjZWI0OTQ5ZTI5N2Q0MjQ0OGVjYjgwYjE1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMTQ0NTQ5LDE2LjI0MjA4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8xNGNkMzM3NmUyYzQ0N2RmOGFhOWRjNjE0MTdlYTQ5NSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xZTcxZjA1Y2ViNDk0OWUyOTdkNDI0NDhlY2I4MGIxNS5zZXRJY29uKGljb25fMTRjZDMzNzZlMmM0NDdkZjhhYTlkYzYxNDE3ZWE0OTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjIwMTRmZjMzM2FiNDQwMmJhMGQ1MWQyN2U4MjNiZjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzJiZmZiNDdhN2E1NDJkNThjNTc0OWMzYzY5NjQ1NzcgPSAkKCc8ZGl2IGlkPSJodG1sXzMyYmZmYjQ3YTdhNTQyZDU4YzU3NDljM2M2OTY0NTc3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjM3IE11emV1bSBCaXR3eSBMZWduaWNraWVqIHcgTGVnbmlja2ltIFBvbHU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYyMDE0ZmYzMzNhYjQ0MDJiYTBkNTFkMjdlODIzYmY2LnNldENvbnRlbnQoaHRtbF8zMmJmZmI0N2E3YTU0MmQ1OGM1NzQ5YzNjNjk2NDU3Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFlNzFmMDVjZWI0OTQ5ZTI5N2Q0MjQ0OGVjYjgwYjE1LmJpbmRQb3B1cChwb3B1cF82MjAxNGZmMzMzYWI0NDAyYmEwZDUxZDI3ZTgyM2JmNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84OTY3MzU4ODA0YWI0YzI4OTA5NjgwM2U2MGIxNjY5NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjkyMjIzMywxNi4xMDA1NTcwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNDg2NzA2ZmRkNmI1NGIwNDkxMDNlNmQwOTZlYjQxN2IgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODk2NzM1ODgwNGFiNGMyODkwOTY4MDNlNjBiMTY2OTUuc2V0SWNvbihpY29uXzQ4NjcwNmZkZDZiNTRiMDQ5MTAzZTZkMDk2ZWI0MTdiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk3Y2IzMWZiYzNkYTQ0MDM4MjJkZmNkYTIwNDMzYWEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg4ZjkwODE2MDNjYTQwNzFhZDc5ZWJjMDdlYjkyYjFkID0gJCgnPGRpdiBpZD0iaHRtbF84OGY5MDgxNjAzY2E0MDcxYWQ3OWViYzA3ZWI5MmIxZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDY0MSBSYXR1c3ogdyBCb2xrb3dpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTdjYjMxZmJjM2RhNDQwMzgyMmRmY2RhMjA0MzNhYTAuc2V0Q29udGVudChodG1sXzg4ZjkwODE2MDNjYTQwNzFhZDc5ZWJjMDdlYjkyYjFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODk2NzM1ODgwNGFiNGMyODkwOTY4MDNlNjBiMTY2OTUuYmluZFBvcHVwKHBvcHVwXzk3Y2IzMWZiYzNkYTQ0MDM4MjJkZmNkYTIwNDMzYWEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2MwYmJhMjEzNTNlNjQyYmU4NTMyOGUwYjM2OWIxYjY1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuOTIxMTA3LDE2LjEwMDQyN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jOGNiMTUwZGMxZTc0MGMyODJlMmEzZjRmMjVkNmY0OSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZGFya3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jMGJiYTIxMzUzZTY0MmJlODUzMjhlMGIzNjliMWI2NS5zZXRJY29uKGljb25fYzhjYjE1MGRjMWU3NDBjMjgyZTJhM2Y0ZjI1ZDZmNDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGRmNTY1YWMzMWEyNGNlZTk1MjkwOTU0N2ZmZWI3MTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzUzYjE5YTcwZmFkNGFjYTlkNDc5Zjg0YTYwYzFhZjkgPSAkKCc8ZGl2IGlkPSJodG1sXzM1M2IxOWE3MGZhZDRhY2E5ZDQ3OWY4NGE2MGMxYWY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gNjQyIEtvxZtjacOzxYIgxZt3LiBKYWR3aWdpIHcgQm9sa293aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhkZjU2NWFjMzFhMjRjZWU5NTI5MDk1NDdmZmViNzE2LnNldENvbnRlbnQoaHRtbF8zNTNiMTlhNzBmYWQ0YWNhOWQ0NzlmODRhNjBjMWFmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2MwYmJhMjEzNTNlNjQyYmU4NTMyOGUwYjM2OWIxYjY1LmJpbmRQb3B1cChwb3B1cF84ZGY1NjVhYzMxYTI0Y2VlOTUyOTA5NTQ3ZmZlYjcxNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yMzE0MmI2ZmM2YTQ0YTE0YjExMjZhM2YxZTg5OTdjMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjc1NjUwOCwxNi4yMDUwMTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzc4NDIzZTNjZjJmNDIyNWIyMjMyNzYyZjQ2OTc1ZWEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMjMxNDJiNmZjNmE0NGExNGIxMTI2YTNmMWU4OTk3YzMuc2V0SWNvbihpY29uX2M3ODQyM2UzY2YyZjQyMjViMjIzMjc2MmY0Njk3NWVhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFjOWJjNTBjYjZkYzQyNTJhNDhhZmMzODg1YTE2M2Y4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlNjJhMGZjZWQ2NDQ3NWZhMTRjZGFhODlmZTQ5ZGY5ID0gJCgnPGRpdiBpZD0iaHRtbF80ZTYyYTBmY2VkNjQ0NzVmYTE0Y2RhYTg5ZmU0OWRmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDY0NSBSYXR1c3ogdyBCb2d1c3pvd2llIOKAkyBHb3JjYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYzliYzUwY2I2ZGM0MjUyYTQ4YWZjMzg4NWExNjNmOC5zZXRDb250ZW50KGh0bWxfNGU2MmEwZmNlZDY0NDc1ZmExNGNkYWE4OWZlNDlkZjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yMzE0MmI2ZmM2YTQ0YTE0YjExMjZhM2YxZTg5OTdjMy5iaW5kUG9wdXAocG9wdXBfMWM5YmM1MGNiNmRjNDI1MmE0OGFmYzM4ODVhMTYzZjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjk0NWMxZDA5NzNlNGM1ZGE4ZThjMTcwY2ViMzlhMzkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC43NjM3OTQsMTYuMTY1Mjk4OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzI0Mzg4NmVkNjZkYjQ3ZDM4YTZmODVjNDVhOGY0OTg1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzI5NDVjMWQwOTczZTRjNWRhOGU4YzE3MGNlYjM5YTM5LnNldEljb24oaWNvbl8yNDM4ODZlZDY2ZGI0N2QzOGE2Zjg1YzQ1YThmNDk4NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMWUzMTBlN2RkOGU0M2Y4OGMwYzUyODM4N2RhMTg2NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YzAwZWFjMjVkMGE0YTk4OTNjMDM1MWRlYTczZDliYiA9ICQoJzxkaXYgaWQ9Imh0bWxfOGMwMGVhYzI1ZDBhNGE5ODkzYzAzNTFkZWE3M2Q5YmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2NDYgU3p5YiBXaXRvbGQgdyBCb2d1c3pvd2llIOKAkyBHb3JjYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMWUzMTBlN2RkOGU0M2Y4OGMwYzUyODM4N2RhMTg2Ni5zZXRDb250ZW50KGh0bWxfOGMwMGVhYzI1ZDBhNGE5ODkzYzAzNTFkZWE3M2Q5YmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yOTQ1YzFkMDk3M2U0YzVkYThlOGMxNzBjZWIzOWEzOS5iaW5kUG9wdXAocG9wdXBfZTFlMzEwZTdkZDhlNDNmODhjMGM1MjgzODdkYTE4NjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGExZGYyMzIyOTkyNDM1Nzk0NmFhOWRiY2FmMGFlODggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC43NjMyMzksMTYuMTgyMTMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2I5MmEyYjJhYTM3OTQ3NWRhYmM2NGRiODI2ZWZiZTA4ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzRhMWRmMjMyMjk5MjQzNTc5NDZhYTlkYmNhZjBhZTg4LnNldEljb24oaWNvbl9iOTJhMmIyYWEzNzk0NzVkYWJjNjRkYjgyNmVmYmUwOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMTQ3NDkzNmUwNzM0YzBjYmY1YjdiYWJkZTI5NWRkNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NmM4ODIxNDc4ZGM0ZWM4YmJjMmE2Mzk2Yzc4ZDc5OCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzZjODgyMTQ3OGRjNGVjOGJiYzJhNjM5NmM3OGQ3OTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2NDcgR8OzcmEgTW5pc3playBCb2d1c3rDs3cg4oCTIEdvcmNlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMTQ3NDkzNmUwNzM0YzBjYmY1YjdiYWJkZTI5NWRkNy5zZXRDb250ZW50KGh0bWxfNzZjODgyMTQ3OGRjNGVjOGJiYzJhNjM5NmM3OGQ3OTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80YTFkZjIzMjI5OTI0MzU3OTQ2YWE5ZGJjYWYwYWU4OC5iaW5kUG9wdXAocG9wdXBfMDE0NzQ5MzZlMDczNGMwY2JmNWI3YmFiZGUyOTVkZDcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGNlOWY2ZDkxYTZmNDE2Y2I1NThlMjJjMzZlYWE1NjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC44NDExNzgsMTYuNDkxOTgxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzgzMDc0YzhjOTRkMjQxNWJiMGUwNGU2NTUwMzU1NjkwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdkYXJrcmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzhjZTlmNmQ5MWE2ZjQxNmNiNTU4ZTIyYzM2ZWFhNTYyLnNldEljb24oaWNvbl84MzA3NGM4Yzk0ZDI0MTViYjBlMDRlNjU1MDM1NTY5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OThiOGFkMjhmN2U0N2U5OTM5MDg2NDJmYTk5ZWE5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYTVlZjhkZjQ5Mjg0ZTgwOGFlYmE0NTg5YzJiMzZjYiA9ICQoJzxkaXYgaWQ9Imh0bWxfZmE1ZWY4ZGY0OTI4NGU4MDhhZWJhNDU4OWMyYjM2Y2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiA2NjUgS2F0ZWRyYSDFm3cuIFN0YW5pc8WCYXdhIGkgV2FjxYJhd2EgdyDFmndpZG5pY3k8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5OGI4YWQyOGY3ZTQ3ZTk5MzkwODY0MmZhOTllYTk4LnNldENvbnRlbnQoaHRtbF9mYTVlZjhkZjQ5Mjg0ZTgwOGFlYmE0NTg5YzJiMzZjYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhjZTlmNmQ5MWE2ZjQxNmNiNTU4ZTIyYzM2ZWFhNTYyLmJpbmRQb3B1cChwb3B1cF84OThiOGFkMjhmN2U0N2U5OTM5MDg2NDJmYTk5ZWE5OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wNzVkZjkzZGM5NGQ0ZTkwYWE2YTZmYmNkZWEzODI1YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjg0Mjg3MiwxNi40ODY2MDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fN2ZmNTY5MmNjYjQyNGNhNWEzZWJiOTE2YmEzOWEyNTkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDc1ZGY5M2RjOTRkNGU5MGFhNmE2ZmJjZGVhMzgyNWIuc2V0SWNvbihpY29uXzdmZjU2OTJjY2I0MjRjYTVhM2ViYjkxNmJhMzlhMjU5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY2NWQ0ODhhNTc2ZTQwY2Q5OWRiZmVjMTQ5MjgzMmY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBjYTU0NmIyMGI0MDQwNWZhNTU1NmRlNGY4YTAzNDBmID0gJCgnPGRpdiBpZD0iaHRtbF8wY2E1NDZiMjBiNDA0MDVmYTU1NTZkZTRmOGEwMzQwZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDY2NiBNdXpldW0gRGF3bmVnbyBLdXBpZWN0d2EgdyDFmndpZG5pY3k8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2NWQ0ODhhNTc2ZTQwY2Q5OWRiZmVjMTQ5MjgzMmY0LnNldENvbnRlbnQoaHRtbF8wY2E1NDZiMjBiNDA0MDVmYTU1NTZkZTRmOGEwMzQwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA3NWRmOTNkYzk0ZDRlOTBhYTZhNmZiY2RlYTM4MjViLmJpbmRQb3B1cChwb3B1cF82NjVkNDg4YTU3NmU0MGNkOTlkYmZlYzE0OTI4MzJmNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83YjkzNmQ4OGQxNTA0MDJjYWY1YjVkYzE2ZTY2Y2FmYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjg0NjQ4NiwxNi40OTE2NzMwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNGMwN2ExZWY0NTE5NGNkZjk1NTg2MzUyOWNlYjVkOWIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfN2I5MzZkODhkMTUwNDAyY2FmNWI1ZGMxNmU2NmNhZmMuc2V0SWNvbihpY29uXzRjMDdhMWVmNDUxOTRjZGY5NTU4NjM1MjljZWI1ZDliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UwYTkyYWYyMWRlYzQzNjU5Y2M4Mjc0YzNjMDZhNjQxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ViYjI0ZmExNzYwMTQ4NzBiNWRlMTI3NDM1MjU5M2M0ID0gJCgnPGRpdiBpZD0iaHRtbF9lYmIyNGZhMTc2MDE0ODcwYjVkZTEyNzQzNTI1OTNjNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDY2NyBLb8WbY2nDs8WCIFBva29qdSB3IMWad2lkbmljeSDigJMgWmFieXRlayBVTkVTQ088L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UwYTkyYWYyMWRlYzQzNjU5Y2M4Mjc0YzNjMDZhNjQxLnNldENvbnRlbnQoaHRtbF9lYmIyNGZhMTc2MDE0ODcwYjVkZTEyNzQzNTI1OTNjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdiOTM2ZDg4ZDE1MDQwMmNhZjViNWRjMTZlNjZjYWZjLmJpbmRQb3B1cChwb3B1cF9lMGE5MmFmMjFkZWM0MzY1OWNjODI3NGMzYzA2YTY0MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNGM4ZmQ4M2FmNjU0NzFiYTYwMDBiMDBhYjVjZDE4MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjQ1MjE3MywxNi4yNDAxMTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOTVkZWRkY2RlNGM1NGY1YWEzMDU3NjI2OGUzMTllNzYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2RhcmtyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZDRjOGZkODNhZjY1NDcxYmE2MDAwYjAwYWI1Y2QxODIuc2V0SWNvbihpY29uXzk1ZGVkZGNkZTRjNTRmNWFhMzA1NzYyNjhlMzE5ZTc2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1MjUwMWIzY2YwNzQ1Njc4M2RkMGQ3ZTYxMDZlM2U2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY2MzZjNDBjOWI2MzQ4MWNhM2YwMTBiMWM0NDQ3YzFiID0gJCgnPGRpdiBpZD0iaHRtbF82NjM2YzQwYzliNjM0ODFjYTNmMDEwYjFjNDQ0N2MxYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDcxMCBTemxhayBHaW7EhWN5Y2ggWmF3b2TDs3cgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTI1MDFiM2NmMDc0NTY3ODNkZDBkN2U2MTA2ZTNlNi5zZXRDb250ZW50KGh0bWxfNjYzNmM0MGM5YjYzNDgxY2EzZjAxMGIxYzQ0NDdjMWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kNGM4ZmQ4M2FmNjU0NzFiYTYwMDBiMDBhYjVjZDE4Mi5iaW5kUG9wdXAocG9wdXBfMzUyNTAxYjNjZjA3NDU2NzgzZGQwZDdlNjEwNmUzZTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjU4M2M4ZDQzYjMzNDI3Y2IxNTU3YjkwYThjM2RkZGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS43ODcyNzMsMTYuNjcwNzM0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzAxN2EyZDIwODJiMzQ0MWE5N2EwNWEyZWVkZGE0NWU0ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdsaWdodHJlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mNTgzYzhkNDNiMzM0MjdjYjE1NTdiOTBhOGMzZGRkZC5zZXRJY29uKGljb25fMDE3YTJkMjA4MmIzNDQxYTk3YTA1YTJlZWRkYTQ1ZTQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDY3NDQ1MGY2OWZkNDBhZTg2M2ZmNmJkNGI3Y2QzYTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjU5ODBlYWQ2NjU0NGZlZGEzMGJkZWJhOTQyMjJhY2UgPSAkKCc8ZGl2IGlkPSJodG1sXzY1OTgwZWFkNjY1NDRmZWRhMzBiZGViYTk0MjIyYWNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjEwIFphbWVrIHcgUnlkenluaWUgPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNjc0NDUwZjY5ZmQ0MGFlODYzZmY2YmQ0YjdjZDNhMS5zZXRDb250ZW50KGh0bWxfNjU5ODBlYWQ2NjU0NGZlZGEzMGJkZWJhOTQyMjJhY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNTgzYzhkNDNiMzM0MjdjYjE1NTdiOTBhOGMzZGRkZC5iaW5kUG9wdXAocG9wdXBfMDY3NDQ1MGY2OWZkNDBhZTg2M2ZmNmJkNGI3Y2QzYTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmNlNGY2OTUyY2JkNDdlNTlmNWEyY2I0ZjdiMzRhMjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi42NDYyNTMsMTYuODA5NDI1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzMzNDRkNzE1YmY4ZjRhM2Y5YWQ5YmY3YTM3NDNjMmVmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdsaWdodHJlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82Y2U0ZjY5NTJjYmQ0N2U1OWY1YTJjYjRmN2IzNGEyMi5zZXRJY29uKGljb25fMzM0NGQ3MTViZjhmNGEzZjlhZDliZjdhMzc0M2MyZWYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTlmMDNiNGNlYmFlNDljNzg5YTc4NzliN2JjMWNkOWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWZmNDE5MDY2N2Y3NGM3NWIzNGQzZTAyYTg4ZjMzYWUgPSAkKCc8ZGl2IGlkPSJodG1sXzFmZjQxOTA2NjdmNzRjNzViMzRkM2UwMmE4OGYzM2FlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjQ5IEtvxZtjacOzxYIgTk1QIFduaWVib3d6acSZdGVqIHcgT2Jvcm5pa2FjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTlmMDNiNGNlYmFlNDljNzg5YTc4NzliN2JjMWNkOWUuc2V0Q29udGVudChodG1sXzFmZjQxOTA2NjdmNzRjNzViMzRkM2UwMmE4OGYzM2FlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmNlNGY2OTUyY2JkNDdlNTlmNWEyY2I0ZjdiMzRhMjIuYmluZFBvcHVwKHBvcHVwX2E5ZjAzYjRjZWJhZTQ5Yzc4OWE3ODc5YjdiYzFjZDllKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA2YTc0NWI0ODQxYjRmMDNhZWJiZDgyZWIzZjJjZjlhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNzA2NDUxLDE2Ljg0NzEwNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lNGViNjFkMTQ1YzM0YzkxOTBhMmY5Y2UxYTJiYTFjOCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDZhNzQ1YjQ4NDFiNGYwM2FlYmJkODJlYjNmMmNmOWEuc2V0SWNvbihpY29uX2U0ZWI2MWQxNDVjMzRjOTE5MGEyZjljZTFhMmJhMWM4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwYTA2MzA0NjRhNTQ3OGY4NWU4MGFkYTgxYTNlZGI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZjMTFmNjU2ZmEwODRlOWE5YjZmMjMxNWJhZmI2MDkxID0gJCgnPGRpdiBpZD0iaHRtbF9mYzExZjY1NmZhMDg0ZTlhOWI2ZjIzMTViYWZiNjA5MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI1MCBNb2dpxYJ5IHcgTGFzYWNoIFJvxbxub3dpY2tpY2gga2/Fgm8gT2Jvcm5pazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzBhMDYzMDQ2NGE1NDc4Zjg1ZTgwYWRhODFhM2VkYjcuc2V0Q29udGVudChodG1sX2ZjMTFmNjU2ZmEwODRlOWE5YjZmMjMxNWJhZmI2MDkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDZhNzQ1YjQ4NDFiNGYwM2FlYmJkODJlYjNmMmNmOWEuYmluZFBvcHVwKHBvcHVwXzMwYTA2MzA0NjRhNTQ3OGY4NWU4MGFkYTgxYTNlZGI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U1ZDIyNzU3MDJmOTQ0YWNiM2QzM2UwOTU1N2QzZTQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNjQ2OTg5LDE2LjgwMzQ4N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lNTBhN2JjODlmZjM0Y2RkYmU1ZGViNTQ5ZGQ3YjA2ZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTVkMjI3NTcwMmY5NDRhY2IzZDMzZTA5NTU3ZDNlNDUuc2V0SWNvbihpY29uX2U1MGE3YmM4OWZmMzRjZGRiZTVkZWI1NDlkZDdiMDZkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBlN2IzMzIzOGE4ODQ4YzU4N2Q2ZjljMmU3MGVmZWQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc4YTkxMTliMzRlODQ3OGU4MTlkNmMwZjFiYjViMTdkID0gJCgnPGRpdiBpZD0iaHRtbF83OGE5MTE5YjM0ZTg0NzhlODE5ZDZjMGYxYmI1YjE3ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI1MSBLb8WbY2nDs8WCIMWad2nEmXRlZ28gS3J6ecW8YSB3IE9ib3JuaWthY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlN2IzMzIzOGE4ODQ4YzU4N2Q2ZjljMmU3MGVmZWQ1LnNldENvbnRlbnQoaHRtbF83OGE5MTE5YjM0ZTg0NzhlODE5ZDZjMGYxYmI1YjE3ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U1ZDIyNzU3MDJmOTQ0YWNiM2QzM2UwOTU1N2QzZTQ1LmJpbmRQb3B1cChwb3B1cF8wZTdiMzMyMzhhODg0OGM1ODdkNmY5YzJlNzBlZmVkNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81NTZmNmI1OGFkY2I0ZjM2Yjc5MGEwZDYyZjY1NDkxZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjM2MzQ0MSwxNy4wMzYzOTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzE3ZmQ4NzY4MmE1NDY2NTg3YjI1M2Q3NGY0NzRhNGQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2xpZ2h0cmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzU1NmY2YjU4YWRjYjRmMzZiNzkwYTBkNjJmNjU0OTFmLnNldEljb24oaWNvbl9jMTdmZDg3NjgyYTU0NjY1ODdiMjUzZDc0ZjQ3NGE0ZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MWM0MTM1Y2RjMGU0MGY4ODFjMzYwYzlhMmE0MzJjZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYzQyZWY4OWI2OWE0NzZiYWViMjA0ODJmNmMxZWY2ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWM0MmVmODliNjlhNDc2YmFlYjIwNDgyZjZjMWVmNmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyNTIgTXV6ZXVtIFppZW1pIFrFgm90b3dza2llaiB3IFrFgm90b3dpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTFjNDEzNWNkYzBlNDBmODgxYzM2MGM5YTJhNDMyY2Uuc2V0Q29udGVudChodG1sXzFjNDJlZjg5YjY5YTQ3NmJhZWIyMDQ4MmY2YzFlZjZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTU2ZjZiNThhZGNiNGYzNmI3OTBhMGQ2MmY2NTQ5MWYuYmluZFBvcHVwKHBvcHVwXzUxYzQxMzVjZGMwZTQwZjg4MWMzNjBjOWEyYTQzMmNlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg2M2I2ZjI3ZjQ4MzRkNGFhMTMzM2EwMDFhMmI3YjcxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMzY2NTQyLDE2LjI0OTU4NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8wZmU3OWI3OGQ2YTM0NjIyYTMwM2JlNDFkYzRjYmUyYyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODYzYjZmMjdmNDgzNGQ0YWExMzMzYTAwMWEyYjdiNzEuc2V0SWNvbihpY29uXzBmZTc5Yjc4ZDZhMzQ2MjJhMzAzYmU0MWRjNGNiZTJjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjOGE4ZDdhNjEwMTQ4YWNhZTc4MWIxNjBjYTgzMjJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJhNjJjM2U3MThjMjRjMjFiY2UyN2EzMTM0Y2MwNWUxID0gJCgnPGRpdiBpZD0iaHRtbF8yYTYyYzNlNzE4YzI0YzIxYmNlMjdhMzEzNGNjMDVlMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI1MyBQYcWCYWMgSGFyZHRhIHcgV8SFc293aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVjOGE4ZDdhNjEwMTQ4YWNhZTc4MWIxNjBjYTgzMjJjLnNldENvbnRlbnQoaHRtbF8yYTYyYzNlNzE4YzI0YzIxYmNlMjdhMzEzNGNjMDVlMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg2M2I2ZjI3ZjQ4MzRkNGFhMTMzM2EwMDFhMmI3YjcxLmJpbmRQb3B1cChwb3B1cF81YzhhOGQ3YTYxMDE0OGFjYWU3ODFiMTYwY2E4MzIyYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wMDE1MzI2ZjFmZGU0ODUyODgyMzFmMTRjOGQ0NDQwNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjcxMzQ5NCwxNi44ODIzODZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNDYxNmY0NjEzNTVmNDVmYWI3MThjYjcxYjYzZTE3ZjUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2xpZ2h0cmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzAwMTUzMjZmMWZkZTQ4NTI4ODIzMWYxNGM4ZDQ0NDA2LnNldEljb24oaWNvbl80NjE2ZjQ2MTM1NWY0NWZhYjcxOGNiNzFiNjNlMTdmNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYWRhY2FkMzZhZjg0M2IzOTM3YjhmNzAyYzYwNmJiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MWYzNjZmMzhmYTU0MDM1YTAwNGUzZmY0ZjFjYjA2YiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTFmMzY2ZjM4ZmE1NDAzNWEwMDRlM2ZmNGYxY2IwNmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyNTQgTXV6ZXVtIE3FgnluYXJzdHdhIHcgSmFyYWN6dTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGFkYWNhZDM2YWY4NDNiMzkzN2I4ZjcwMmM2MDZiYmUuc2V0Q29udGVudChodG1sXzUxZjM2NmYzOGZhNTQwMzVhMDA0ZTNmZjRmMWNiMDZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDAxNTMyNmYxZmRlNDg1Mjg4MjMxZjE0YzhkNDQ0MDYuYmluZFBvcHVwKHBvcHVwX2RhZGFjYWQzNmFmODQzYjM5MzdiOGY3MDJjNjA2YmJlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I2NWZkNzJkYjRmYzRjMjI4MjIyNzU0ZjJiM2NjZWRhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNDUxNDg3LDE3LjEyNjI1MTk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zOGMwMjdkNjBlZDg0YTUzODA4OGFlOWZlYjg5NTRhMSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjY1ZmQ3MmRiNGZjNGMyMjgyMjI3NTRmMmIzY2NlZGEuc2V0SWNvbihpY29uXzM4YzAyN2Q2MGVkODRhNTM4MDg4YWU5ZmViODk1NGExKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc1ZDkzNjdiOTQ5ZTQ0ZWU4MGExM2VhZmFlODJhOTNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I1YTI5NmM0NDAwOTQ4MGM5NmUwNThlOWY0MWZkZTM1ID0gJCgnPGRpdiBpZD0iaHRtbF9iNWEyOTZjNDQwMDk0ODBjOTZlMDU4ZTlmNDFmZGUzNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI1NSBNdXpldW0gUHJ6eXJvZG5pY3pvIC0gxYFvd2llY2tpZSB3IFV6YXJ6ZXdpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzVkOTM2N2I5NDllNDRlZTgwYTEzZWFmYWU4MmE5M2Iuc2V0Q29udGVudChodG1sX2I1YTI5NmM0NDAwOTQ4MGM5NmUwNThlOWY0MWZkZTM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjY1ZmQ3MmRiNGZjNGMyMjgyMjI3NTRmMmIzY2NlZGEuYmluZFBvcHVwKHBvcHVwXzc1ZDkzNjdiOTQ5ZTQ0ZWU4MGExM2VhZmFlODJhOTNiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY4YzYzZDc5NDU2ODRkNzNhYjIwNjU1MDFiYzY0MmFmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNDAzNzUzLDE3LjA2MDg5MjAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iZDcyOTQ1MTAyM2Q0NjAyYjUzMDVmMjdhMzg3OWEwMSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjhjNjNkNzk0NTY4NGQ3M2FiMjA2NTUwMWJjNjQyYWYuc2V0SWNvbihpY29uX2JkNzI5NDUxMDIzZDQ2MDJiNTMwNWYyN2EzODc5YTAxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZhMTc3MTdlNjk4MjRlZjhhMDhkMzYxMzc5OTc1YmIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI0NGM3MzVhYzU4YTQ5YTk5YmQ3YzA1YWE3MjFjZjc5ID0gJCgnPGRpdiBpZD0iaHRtbF8yNDRjNzM1YWM1OGE0OWE5OWJkN2MwNWFhNzIxY2Y3OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI1NiBNdXpldW0gUHN6Y3plbGFyc3R3YSB3IFN3YXJ6xJlkenU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhMTc3MTdlNjk4MjRlZjhhMDhkMzYxMzc5OTc1YmIzLnNldENvbnRlbnQoaHRtbF8yNDRjNzM1YWM1OGE0OWE5OWJkN2MwNWFhNzIxY2Y3OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY4YzYzZDc5NDU2ODRkNzNhYjIwNjU1MDFiYzY0MmFmLmJpbmRQb3B1cChwb3B1cF9mYTE3NzE3ZTY5ODI0ZWY4YTA4ZDM2MTM3OTk3NWJiMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wNDIwOWNjYjRhMWI0YjY1YTgyZWJiZDNlYWFkMTc4MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjMxMjg1LDE2LjgwMjE0N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jMDE0NGUxOGE2M2Q0NmRlYmEzYjlhMDk1YzAyYTNjOCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDQyMDljY2I0YTFiNGI2NWE4MmViYmQzZWFhZDE3ODMuc2V0SWNvbihpY29uX2MwMTQ0ZTE4YTYzZDQ2ZGViYTNiOWEwOTVjMDJhM2M4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmNmRiNDllN2E3NzQ1MDZiYjBmZTk4N2JjMzU2ZWE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FiODYyNjk1NGE2ZjRmMDRiYWZhNjk1NTA2NGY2NmEwID0gJCgnPGRpdiBpZD0iaHRtbF9hYjg2MjY5NTRhNmY0ZjA0YmFmYTY5NTUwNjRmNjZhMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI1NyBXaWXFvGEgaSBNYXV6b2xldW0gQmllcmJhdW3Ds3cgdyBTenJlbmlhd2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZjZkYjQ5ZTdhNzc0NTA2YmIwZmU5ODdiYzM1NmVhNS5zZXRDb250ZW50KGh0bWxfYWI4NjI2OTU0YTZmNGYwNGJhZmE2OTU1MDY0ZjY2YTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wNDIwOWNjYjRhMWI0YjY1YTgyZWJiZDNlYWFkMTc4My5iaW5kUG9wdXAocG9wdXBfOGY2ZGI0OWU3YTc3NDUwNmJiMGZlOTg3YmMzNTZlYTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzhiOTJkODQyN2QyNDVlNzgxN2RiZjhkNTM0NThkZmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4zMTQwMjIsMTYuNzk2MjM4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2IxM2IyOTk4NmFjYTRiOTFhYWIyY2Q5ZWUxZWZhZThmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdsaWdodHJlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zOGI5MmQ4NDI3ZDI0NWU3ODE3ZGJmOGQ1MzQ1OGRmYy5zZXRJY29uKGljb25fYjEzYjI5OTg2YWNhNGI5MWFhYjJjZDllZTFlZmFlOGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTBjODU3NDE0ZjNlNDRmYThlMGNlNTlmY2U3MTNiNzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWI2OWU1YTZjODMzNDUwYTgzMjVkOWQxMGQyNWM2MzMgPSAkKCc8ZGl2IGlkPSJodG1sXzViNjllNWE2YzgzMzQ1MGE4MzI1ZDlkMTBkMjVjNjMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjU4IE11emV1bSBOYXJvZG93ZSBSb2xuaWN0d2EgdyBTenJlbmlhd2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MGM4NTc0MTRmM2U0NGZhOGUwY2U1OWZjZTcxM2I3OC5zZXRDb250ZW50KGh0bWxfNWI2OWU1YTZjODMzNDUwYTgzMjVkOWQxMGQyNWM2MzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zOGI5MmQ4NDI3ZDI0NWU3ODE3ZGJmOGQ1MzQ1OGRmYy5iaW5kUG9wdXAocG9wdXBfOTBjODU3NDE0ZjNlNDRmYThlMGNlNTlmY2U3MTNiNzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTUyZDY2YjA5NTliNGE1MGJiZTBkNjQxMTc2OTFlZDMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4zNTc3NDcsMTYuNTIxMTRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMmE5MDg0YzExNTVlNGQ4MTkxMjM4ZWI4YzdhMTJhNzAgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2xpZ2h0cmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzU1MmQ2NmIwOTU5YjRhNTBiYmUwZDY0MTE3NjkxZWQzLnNldEljb24oaWNvbl8yYTkwODRjMTE1NWU0ZDgxOTEyMzhlYjhjN2ExMmE3MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80Y2MzMDE1NTQzMTg0NmJkODI0ODQyNWQ5Mzc5MmQ2NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MjFhZjcxMTdkMjU0N2VlODVhZTljMTJkMDgwOTI4NSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzIxYWY3MTE3ZDI1NDdlZTg1YWU5YzEyZDA4MDkyODUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyNTkgTWlhc3RvIGkgR21pbmEgQnVrIC0gTGVnZW5kYSBvIGRyemV3aWUgYnVrb3d5bSBpIGtzacSZY2l1IE1pZXN6a3UgSTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGNjMzAxNTU0MzE4NDZiZDgyNDg0MjVkOTM3OTJkNjUuc2V0Q29udGVudChodG1sXzcyMWFmNzExN2QyNTQ3ZWU4NWFlOWMxMmQwODA5Mjg1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTUyZDY2YjA5NTliNGE1MGJiZTBkNjQxMTc2OTFlZDMuYmluZFBvcHVwKHBvcHVwXzRjYzMwMTU1NDMxODQ2YmQ4MjQ4NDI1ZDkzNzkyZDY1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E0NjEyZjdmYTRjNzQ4OWRiZDk0ZTI3MzlhMzc3MTVjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMzU4MjA2LDE2LjUxNzk4OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lYmIzMzhkMDRkYmE0ZjA0YjFiZTExNGQzZDA5NDVkYyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYTQ2MTJmN2ZhNGM3NDg5ZGJkOTRlMjczOWEzNzcxNWMuc2V0SWNvbihpY29uX2ViYjMzOGQwNGRiYTRmMDRiMWJlMTE0ZDNkMDk0NWRjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M0NWY5NzdmZTA4MTQwNzRiMDkyZDNjZDQzYWEyODc5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI3MWI4YjRiNTJiYzQ3YWQ5N2IxZDAzOWQxZmM1NWU1ID0gJCgnPGRpdiBpZD0iaHRtbF8yNzFiOGI0YjUyYmM0N2FkOTdiMWQwMzlkMWZjNTVlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI2MCBTeW5hZ29nYSB3IEJ1a3U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M0NWY5NzdmZTA4MTQwNzRiMDkyZDNjZDQzYWEyODc5LnNldENvbnRlbnQoaHRtbF8yNzFiOGI0YjUyYmM0N2FkOTdiMWQwMzlkMWZjNTVlNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E0NjEyZjdmYTRjNzQ4OWRiZDk0ZTI3MzlhMzc3MTVjLmJpbmRQb3B1cChwb3B1cF9jNDVmOTc3ZmUwODE0MDc0YjA5MmQzY2Q0M2FhMjg3OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zYzMwNDYwZjdlODE0NTVkYjM3ZGYwYmMwMmNjMzg3ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjQ2MTU1MywxNi4yNDc1NTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZWE3NzNjMDEwM2I2NGY0ZjljOTk3NjhmZWE3MjJiYjcgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2xpZ2h0cmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzNjMzA0NjBmN2U4MTQ1NWRiMzdkZjBiYzAyY2MzODdmLnNldEljb24oaWNvbl9lYTc3M2MwMTAzYjY0ZjRmOWM5OTc2OGZlYTcyMmJiNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kM2I0N2UxMzY4MjU0YjE5OWU2NDI3NTU2MGM5MjI1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZTAxMTZhNzI3OTM0NzI3OTM3NmFjNzliNDA2YTBkMSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2UwMTE2YTcyNzkzNDcyNzkzNzZhYzc5YjQwNmEwZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyNjEgWmdpZXJ6eW5pZWNraWUgVXJvY3p5c2tvIC0gV2llxbxhIFdpZG9rb3dhPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kM2I0N2UxMzY4MjU0YjE5OWU2NDI3NTU2MGM5MjI1NS5zZXRDb250ZW50KGh0bWxfN2UwMTE2YTcyNzkzNDcyNzkzNzZhYzc5YjQwNmEwZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zYzMwNDYwZjdlODE0NTVkYjM3ZGYwYmMwMmNjMzg3Zi5iaW5kUG9wdXAocG9wdXBfZDNiNDdlMTM2ODI1NGIxOTllNjQyNzU1NjBjOTIyNTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTc4MDRlN2I3NzRmNDJjMzk5MTJlMWQwZmMyNWYzYWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4zNjU1ODIsMTYuMjQ3NzY4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2Q0YTQ4MDhmMjZiMzRmYmU5NTc4ZDYwYzY5OTI0MmY1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdsaWdodHJlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85NzgwNGU3Yjc3NGY0MmMzOTkxMmUxZDBmYzI1ZjNhYy5zZXRJY29uKGljb25fZDRhNDgwOGYyNmIzNGZiZTk1NzhkNjBjNjk5MjQyZjUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGQ4OTBkNWE2NmNiNGIxMWIwMDMxOGE2YTVhNzgxZWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODVhNDQ0YzlhOTQwNDlmNWIyM2U4YzZjZDg5MDAxMDAgPSAkKCc8ZGl2IGlkPSJodG1sXzg1YTQ0NGM5YTk0MDQ5ZjViMjNlOGM2Y2Q4OTAwMTAwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjYyIEZvbHdhcmsgV8SFc293bzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGQ4OTBkNWE2NmNiNGIxMWIwMDMxOGE2YTVhNzgxZWIuc2V0Q29udGVudChodG1sXzg1YTQ0NGM5YTk0MDQ5ZjViMjNlOGM2Y2Q4OTAwMTAwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTc4MDRlN2I3NzRmNDJjMzk5MTJlMWQwZmMyNWYzYWMuYmluZFBvcHVwKHBvcHVwX2RkODkwZDVhNjZjYjRiMTFiMDAzMThhNmE1YTc4MWViKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U3ZmFkYmE1NGM3NTQwZmM5ZjRlMWQ2MjNhMmUzODQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMTM5MTIzLDE2LjI3Mjg3MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zNjNkYzM1MWYwZGU0NmY0ODc5YjVmMDk5MTlmZTM1ZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTdmYWRiYTU0Yzc1NDBmYzlmNGUxZDYyM2EyZTM4NDUuc2V0SWNvbihpY29uXzM2M2RjMzUxZjBkZTQ2ZjQ4NzliNWYwOTkxOWZlMzVmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2MzY5YzYwNjFlYTQ3ZTZiZmYxNDFhMDY0ZWMzYzM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYwY2I0Y2Y0YTA2MzQ1OWM5YjI0Yjc5MWE2NzNiNDY3ID0gJCgnPGRpdiBpZD0iaHRtbF82MGNiNGNmNGEwNjM0NTljOWIyNGI3OTFhNjczYjQ2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI2MyBHbWluYSBSYWtvbmlld2ljZSDigJMgWmllbWlhIE1pY2hhxYJhIERyenltYcWCeTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjYzNjljNjA2MWVhNDdlNmJmZjE0MWEwNjRlYzNjMzQuc2V0Q29udGVudChodG1sXzYwY2I0Y2Y0YTA2MzQ1OWM5YjI0Yjc5MWE2NzNiNDY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTdmYWRiYTU0Yzc1NDBmYzlmNGUxZDYyM2EyZTM4NDUuYmluZFBvcHVwKHBvcHVwX2I2MzY5YzYwNjFlYTQ3ZTZiZmYxNDFhMDY0ZWMzYzM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQzYzBjZDhlZTQyMTQ2NTliMzg0MDE4ZWVmODNiY2NkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMTMyODg5LDE2LjIwMDg4OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8xMmU5ZTBjYzFlYjY0OTJlOTE3ZjkyYzQ4NmFlOTJhYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNDNjMGNkOGVlNDIxNDY1OWIzODQwMThlZWY4M2JjY2Quc2V0SWNvbihpY29uXzEyZTllMGNjMWViNjQ5MmU5MTdmOTJjNDg2YWU5MmFiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIwZjI3ZGIxNDdlZTQ0N2E5YjZjYTZmNmI1ZWFkZmMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg1ZDkyZDJkY2M5ZjQ1MmU4OGYyNjZiZjYwYmFlYzhlID0gJCgnPGRpdiBpZD0iaHRtbF84NWQ5MmQyZGNjOWY0NTJlODhmMjY2YmY2MGJhZWM4ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI2NCBCYXJva293eSByYXR1c3ogdyBSb3N0YXJ6ZXdpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjBmMjdkYjE0N2VlNDQ3YTliNmNhNmY2YjVlYWRmYzIuc2V0Q29udGVudChodG1sXzg1ZDkyZDJkY2M5ZjQ1MmU4OGYyNjZiZjYwYmFlYzhlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDNjMGNkOGVlNDIxNDY1OWIzODQwMThlZWY4M2JjY2QuYmluZFBvcHVwKHBvcHVwXzIwZjI3ZGIxNDdlZTQ0N2E5YjZjYTZmNmI1ZWFkZmMyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhmMzY4ZWE1YmEyNTQ3ZDk5MjJmZDY2OWU5MDE5ZjU2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMzA5ODQ4LDE1Ljk2MjQzMjk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl84OGVhMjUwYmM2N2Y0MWExOGU4ODkyY2E4NDBhNGYwZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOGYzNjhlYTViYTI1NDdkOTkyMmZkNjY5ZTkwMTlmNTYuc2V0SWNvbihpY29uXzg4ZWEyNTBiYzY3ZjQxYTE4ZTg4OTJjYTg0MGE0ZjBmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1YjJmNDViYWJhMDQ1NDhhMGMxZTMwMzk3YWIyZjlkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0NDI2NDgwMjU1ZDRlYWU5MTNjZjUyOWExOTcxMGM4ID0gJCgnPGRpdiBpZD0iaHRtbF8xNDQyNjQ4MDI1NWQ0ZWFlOTEzY2Y1MjlhMTk3MTBjOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI2NiBEcmV3bmlhbnkga2/Fm2Npw7PFgiDFm3cuIFdhd3J6ecWEY2EgdyDFgW9tbmljeTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTViMmY0NWJhYmEwNDU0OGEwYzFlMzAzOTdhYjJmOWQuc2V0Q29udGVudChodG1sXzE0NDI2NDgwMjU1ZDRlYWU5MTNjZjUyOWExOTcxMGM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGYzNjhlYTViYTI1NDdkOTkyMmZkNjY5ZTkwMTlmNTYuYmluZFBvcHVwKHBvcHVwX2U1YjJmNDViYWJhMDQ1NDhhMGMxZTMwMzk3YWIyZjlkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVmNzY1MTE4YWQwMTQ0YzU4NGU1NTdmYzlkZDJjMWU2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMjkyNzA4LDE2LjI1MDQwOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hODdmZWNjMjg2Y2U0NDYxYmRhZjhiNjM1ZmNmY2Q3NiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNWY3NjUxMThhZDAxNDRjNTg0ZTU1N2ZjOWRkMmMxZTYuc2V0SWNvbihpY29uX2E4N2ZlY2MyODZjZTQ0NjFiZGFmOGI2MzVmY2ZjZDc2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhNTQzNjE2NDI2ZDRlOGY5Zjk0ODUyYjdkZWU4ZmVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIzOTE4ZjY4YTgwZDQxNTM5ZTAwOTIwN2M5N2JlYzg0ID0gJCgnPGRpdiBpZD0iaHRtbF8yMzkxOGY2OGE4MGQ0MTUzOWUwMDkyMDdjOTdiZWM4NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI2NyBEcmV3bmlhbnkga2/Fm2Npw7PFgiDFm3cuIE1hcmNpbmEgdyBCdWtvd2N1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYTU0MzYxNjQyNmQ0ZThmOWY5NDg1MmI3ZGVlOGZlZS5zZXRDb250ZW50KGh0bWxfMjM5MThmNjhhODBkNDE1MzllMDA5MjA3Yzk3YmVjODQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81Zjc2NTExOGFkMDE0NGM1ODRlNTU3ZmM5ZGQyYzFlNi5iaW5kUG9wdXAocG9wdXBfYmE1NDM2MTY0MjZkNGU4ZjlmOTQ4NTJiN2RlZThmZWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmZhOTU0MmVkMDdlNDhjZWJlMWE4MGQ5YjZjMzU4OWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi40Mzc4NDEsMTYuMjk0NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZDc0OGI5ZWQzMjk2NGM1MThiMmZlNzg0ZmI2NjNhODIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2xpZ2h0cmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzJmYTk1NDJlZDA3ZTQ4Y2ViZTFhODBkOWI2YzM1ODljLnNldEljb24oaWNvbl9kNzQ4YjllZDMyOTY0YzUxOGIyZmU3ODRmYjY2M2E4Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMDRiMTUyYjkyOTA0MDdkYTlhOTQ2OTNlODY3ZjgwOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZTgzNDE3ZTY4NGY0NWRjYTlhODg2YzFhMzVkMjFjNCA9ICQoJzxkaXYgaWQ9Imh0bWxfMGU4MzQxN2U2ODRmNDVkY2E5YTg4NmMxYTM1ZDIxYzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyNjggRHJld25pYW55IGtvxZtjacOzxYIgxZt3LiBBbmRyemVqYSB3IEJyb2RhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwNGIxNTJiOTI5MDQwN2RhOWE5NDY5M2U4NjdmODA5LnNldENvbnRlbnQoaHRtbF8wZTgzNDE3ZTY4NGY0NWRjYTlhODg2YzFhMzVkMjFjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJmYTk1NDJlZDA3ZTQ4Y2ViZTFhODBkOWI2YzM1ODljLmJpbmRQb3B1cChwb3B1cF9iMDRiMTUyYjkyOTA0MDdkYTlhOTQ2OTNlODY3ZjgwOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZDc5ZTQ3YzMwNDM0Y2M3ODFkNTExM2Q2ZWIyNzYxMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjM2MjcwNiwxNi4zMTU2MDldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZTk5YTIxZWJlOGJlNGQ4YTkxMmJkZWZjZjRmN2MwOTggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2xpZ2h0cmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzlkNzllNDdjMzA0MzRjYzc4MWQ1MTEzZDZlYjI3NjEzLnNldEljb24oaWNvbl9lOTlhMjFlYmU4YmU0ZDhhOTEyYmRlZmNmNGY3YzA5OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMjU3OWZiM2NkMGY0MzAxODE3YjUxOTM5NjA0ZmE4NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYWFjOTlhYWYwZDM0NjQwODVjMzllMzkwYjk3ZDJlMyA9ICQoJzxkaXYgaWQ9Imh0bWxfMWFhYzk5YWFmMGQzNDY0MDg1YzM5ZTM5MGI5N2QyZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyNjkgS3XFm2xpbiDigJMgR21pbmEgRW1pbGlpIFNjemFuaWVja2llaiAxODA0IOKAkyAxODk2PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMjU3OWZiM2NkMGY0MzAxODE3YjUxOTM5NjA0ZmE4Ny5zZXRDb250ZW50KGh0bWxfMWFhYzk5YWFmMGQzNDY0MDg1YzM5ZTM5MGI5N2QyZTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZDc5ZTQ3YzMwNDM0Y2M3ODFkNTExM2Q2ZWIyNzYxMy5iaW5kUG9wdXAocG9wdXBfMTI1NzlmYjNjZDBmNDMwMTgxN2I1MTkzOTYwNGZhODcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjk2MzI0NjAzNDcwNDY2ZTkwY2RiNTg1NzYxMWY1MGUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4yMzYwNDMsMTUuOTcxOTAxOTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2I5MjViY2Y4ZTA5ZjQyYjFhZDkxY2Y0N2QyMzY5NWRmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdsaWdodHJlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mOTYzMjQ2MDM0NzA0NjZlOTBjZGI1ODU3NjExZjUwZS5zZXRJY29uKGljb25fYjkyNWJjZjhlMDlmNDJiMWFkOTFjZjQ3ZDIzNjk1ZGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWJkNjE5NjIyOTg5NDM3YmIyZWE3YTVmNGI1YTQwNTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzhmNzE3NzI2MmI2NDVlMGEwNDAyNDIyMzllMDc0MTAgPSAkKCc8ZGl2IGlkPSJodG1sXzc4ZjcxNzcyNjJiNjQ1ZTBhMDQwMjQyMjM5ZTA3NDEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjcwIFN0YWNqYSBTdGVmYW5vd288L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FiZDYxOTYyMjk4OTQzN2JiMmVhN2E1ZjRiNWE0MDU5LnNldENvbnRlbnQoaHRtbF83OGY3MTc3MjYyYjY0NWUwYTA0MDI0MjIzOWUwNzQxMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y5NjMyNDYwMzQ3MDQ2NmU5MGNkYjU4NTc2MTFmNTBlLmJpbmRQb3B1cChwb3B1cF9hYmQ2MTk2MjI5ODk0MzdiYjJlYTdhNWY0YjVhNDA1OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iOTRmZTY4MzRkMmU0MGNlOGUxNThkMmQwM2IwYThlOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjQxMDc3MSwxNy4xNTY5ODNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMDVlOWE0YmQ4MDMxNGIxY2E2ZDAyYzg2ODEwYzc4MjUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2xpZ2h0cmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2I5NGZlNjgzNGQyZTQwY2U4ZTE1OGQyZDAzYjBhOGU5LnNldEljb24oaWNvbl8wNWU5YTRiZDgwMzE0YjFjYTZkMDJjODY4MTBjNzgyNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YmZjN2NjMjVlZWQ0OTM3YmYzNTA4NmU3ODdlNmZhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZWNkNjdjNzY3MzI0MGY5OWRlOTNmNTBiMGVmM2NkOSA9ICQoJzxkaXYgaWQ9Imh0bWxfYWVjZDY3Yzc2NzMyNDBmOTlkZTkzZjUwYjBlZjNjZDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyNzEgS2/Fm2Npw7PFgiDFm3cuIE1hcmlpIE1hZ2RhbGVueSB3IFpha3J6ZXdpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGJmYzdjYzI1ZWVkNDkzN2JmMzUwODZlNzg3ZTZmYTYuc2V0Q29udGVudChodG1sX2FlY2Q2N2M3NjczMjQwZjk5ZGU5M2Y1MGIwZWYzY2Q5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjk0ZmU2ODM0ZDJlNDBjZThlMTU4ZDJkMDNiMGE4ZTkuYmluZFBvcHVwKHBvcHVwXzhiZmM3Y2MyNWVlZDQ5MzdiZjM1MDg2ZTc4N2U2ZmE2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBkZTRhMWI2ZThkMzQ4MmFhYzU3MTdlYjQ1ODQwN2I2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuOTQzOTczLDE3LjMwNTIyNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8yMWViNDkwNWE3MmM0OWY2OGE4YWQ1MWMzZDBkOTJiYyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMGRlNGExYjZlOGQzNDgyYWFjNTcxN2ViNDU4NDA3YjYuc2V0SWNvbihpY29uXzIxZWI0OTA1YTcyYzQ5ZjY4YThhZDUxYzNkMGQ5MmJjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhYTk0OGFmMmQ5NDQ3YTFhZDIyNTA4NTUxMTFmNDUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc1Y2YxZTFkYjcxYTQ3ZjA4YzhlYjRjZTUwYzZlYTk2ID0gJCgnPGRpdiBpZD0iaHRtbF83NWNmMWUxZGI3MWE0N2YwOGM4ZWI0Y2U1MGM2ZWE5NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI3MiBaYW1layBQYcWCdWvDs3cgdyBHb8WCYcWEY3p5IOKAkyBYSVYgd2llazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmFhOTQ4YWYyZDk0NDdhMWFkMjI1MDg1NTExMWY0NTAuc2V0Q29udGVudChodG1sXzc1Y2YxZTFkYjcxYTQ3ZjA4YzhlYjRjZTUwYzZlYTk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGRlNGExYjZlOGQzNDgyYWFjNTcxN2ViNDU4NDA3YjYuYmluZFBvcHVwKHBvcHVwX2JhYTk0OGFmMmQ5NDQ3YTFhZDIyNTA4NTUxMTFmNDUwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFmNmEwMzMwMTMyMzRiOGJiMDdkYzc1M2FjMjcwMmYxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuOTQ1MzU2LDE3LjMwMjUxM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82YzVmMGVjMTNlNDQ0ZGMwYTBhYWE1ZDY0OTRiYzBmYyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMWY2YTAzMzAxMzIzNGI4YmIwN2RjNzUzYWMyNzAyZjEuc2V0SWNvbihpY29uXzZjNWYwZWMxM2U0NDRkYzBhMGFhYTVkNjQ5NGJjMGZjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkyOWM2ZGYwZWJmNTQzMjI5NjIwYjZhOWM0NzgzNmJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZhOWNkNjEwNDBmNDRhMjE4NDBlMmMyNmE2Njk4NmU3ID0gJCgnPGRpdiBpZD0iaHRtbF9mYTljZDYxMDQwZjQ0YTIxODQwZTJjMjZhNjY5ODZlNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI3MyBCcmFtYSBpIGtvxZtjacOzxYIgcG9iZXJuYXJkecWEc2tpIHcgR2/FgmHFhGN6eTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTI5YzZkZjBlYmY1NDMyMjk2MjBiNmE5YzQ3ODM2YmQuc2V0Q29udGVudChodG1sX2ZhOWNkNjEwNDBmNDRhMjE4NDBlMmMyNmE2Njk4NmU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWY2YTAzMzAxMzIzNGI4YmIwN2RjNzUzYWMyNzAyZjEuYmluZFBvcHVwKHBvcHVwXzkyOWM2ZGYwZWJmNTQzMjI5NjIwYjZhOWM0NzgzNmJkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzgyN2RlZjJiODUwOTRhNjJhODQwNGFjOGQzMTIyMzdjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNzQ5NDA1LDE2Ljk5OTg0MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hZjE1ODg4MDk2OGM0NWQ0YjY3YmYxZTNkNmM3OGRkMiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODI3ZGVmMmI4NTA5NGE2MmE4NDA0YWM4ZDMxMjIzN2Muc2V0SWNvbihpY29uX2FmMTU4ODgwOTY4YzQ1ZDRiNjdiZjFlM2Q2Yzc4ZGQyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjOGIxMGE1MWJmZDRlODFhMjk3ZGY0ODliMTgwMTU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY1YWU4OTQ5Y2IxYzQ1NGVhM2QwODkxZTU2ZmJmODU4ID0gJCgnPGRpdiBpZD0iaHRtbF82NWFlODk0OWNiMWM0NTRlYTNkMDg5MWU1NmZiZjg1OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI3NCAxNy4gcG/FgnVkbmlrIHcgUm9nb8W6bmllPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYzhiMTBhNTFiZmQ0ZTgxYTI5N2RmNDg5YjE4MDE1Ni5zZXRDb250ZW50KGh0bWxfNjVhZTg5NDljYjFjNDU0ZWEzZDA4OTFlNTZmYmY4NTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84MjdkZWYyYjg1MDk0YTYyYTg0MDRhYzhkMzEyMjM3Yy5iaW5kUG9wdXAocG9wdXBfMmM4YjEwYTUxYmZkNGU4MWEyOTdkZjQ4OWIxODAxNTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDRjMDAwYjk0OGEwNGI0YThlNjNhZGJmMzFjM2EzOTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi43NDgzNDcsMTcuMDA0MTk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2E1MWYxZTAxNmZjNTQwYTQ5MTAxM2Q5NTlkMjY4OWNlID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdsaWdodHJlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wNGMwMDBiOTQ4YTA0YjRhOGU2M2FkYmYzMWMzYTM5MS5zZXRJY29uKGljb25fYTUxZjFlMDE2ZmM1NDBhNDkxMDEzZDk1OWQyNjg5Y2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGQ1OGY5OTlkMjBjNDU2ZGE2NzdlMjg2YWM5Y2VjMGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGU2MTNkMDQ0MTc0NGI1MjgwN2JiNWI3ODQ4MmYzMjMgPSAkKCc8ZGl2IGlkPSJodG1sX2RlNjEzZDA0NDE3NDRiNTI4MDdiYjViNzg0ODJmMzIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjc1IE11emV1bSBSZWdpb25hbG5lIHcgUm9nb8W6bmllIGltLiBXb2pjaWVjaHkgRHV0a2lld2ljejwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGQ1OGY5OTlkMjBjNDU2ZGE2NzdlMjg2YWM5Y2VjMGIuc2V0Q29udGVudChodG1sX2RlNjEzZDA0NDE3NDRiNTI4MDdiYjViNzg0ODJmMzIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDRjMDAwYjk0OGEwNGI0YThlNjNhZGJmMzFjM2EzOTEuYmluZFBvcHVwKHBvcHVwX2RkNThmOTk5ZDIwYzQ1NmRhNjc3ZTI4NmFjOWNlYzBiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM5OGFmZjU1NmU2NjRkYzA4NTUyYjY5MThjYmJjOGIxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMzkwNjg0LDE2LjMzNzY5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzM2MzI2ZTQ1M2U4ZDQ0Njc5MmNjMmVmM2UyMjY5YTJmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdsaWdodHJlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zOThhZmY1NTZlNjY0ZGMwODU1MmI2OTE4Y2JiYzhiMS5zZXRJY29uKGljb25fMzYzMjZlNDUzZThkNDQ2NzkyY2MyZWYzZTIyNjlhMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmI2N2FmMWE2MjMzNGVhNGI3M2VkY2NlOWFmYjM4OTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjI2YjM0NWJiNDVjNDYzZmEyMzY0YTcxYTIzOGMwMWYgPSAkKCc8ZGl2IGlkPSJodG1sX2IyNmIzNDViYjQ1YzQ2M2ZhMjM2NGE3MWEyMzhjMDFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjc3IFplc3DDs8WCIFBhxYJhY293byDigJMgUGFya293eSB3IFRyemNpYW5jZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmI2N2FmMWE2MjMzNGVhNGI3M2VkY2NlOWFmYjM4OTEuc2V0Q29udGVudChodG1sX2IyNmIzNDViYjQ1YzQ2M2ZhMjM2NGE3MWEyMzhjMDFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzk4YWZmNTU2ZTY2NGRjMDg1NTJiNjkxOGNiYmM4YjEuYmluZFBvcHVwKHBvcHVwXzJiNjdhZjFhNjIzMzRlYTRiNzNlZGNjZTlhZmIzODkxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc4Nzg1MWMzYThiZTQzNDliYjdmYjQ0MzFiNmQ3N2VjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMzIwNjI1LDE2Ljg1MTc2OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hMjI5NDQzZTg4YjE0OGNmYmNjYTcyMzI0Nzg1NDhjYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzg3ODUxYzNhOGJlNDM0OWJiN2ZiNDQzMWI2ZDc3ZWMuc2V0SWNvbihpY29uX2EyMjk0NDNlODhiMTQ4Y2ZiY2NhNzIzMjQ3ODU0OGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1ZWZiMDRmMzk0NDRkMjk5M2ViZGM0OWQwZWVhZTIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQyZmYyMjAwMGI3NzRiOWFhYTI1OWI3MjAyMGE0YzljID0gJCgnPGRpdiBpZD0iaHRtbF80MmZmMjIwMDBiNzc0YjlhYWEyNTliNzIwMjBhNGM5YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI3OCBLb8WbY2nDs8WCIMWbdy4gRmxvcmlhbmEgdyBXaXJhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1ZWZiMDRmMzk0NDRkMjk5M2ViZGM0OWQwZWVhZTIzLnNldENvbnRlbnQoaHRtbF80MmZmMjIwMDBiNzc0YjlhYWEyNTliNzIwMjBhNGM5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc4Nzg1MWMzYThiZTQzNDliYjdmYjQ0MzFiNmQ3N2VjLmJpbmRQb3B1cChwb3B1cF8zNWVmYjA0ZjM5NDQ0ZDI5OTNlYmRjNDlkMGVlYWUyMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83NmM3OWU3NDAyYjA0Yjg0YTA1NjgwZDg3NTAwNDcxYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjQwOTQzNywxNi45NTg4MTkwMDAwMDAwMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMDgyZDhmZDVlODA5NDMwOGE3N2MzNmRjOTVlMjk5MDggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2xpZ2h0cmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzc2Yzc5ZTc0MDJiMDRiODRhMDU2ODBkODc1MDA0NzFiLnNldEljb24oaWNvbl8wODJkOGZkNWU4MDk0MzA4YTc3YzM2ZGM5NWUyOTkwOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNGViNjZkNjc2ZDc0NjczOTA1ZDVlMWFhOTY1NDJmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNWQ5NTQyYjhkODc0MDhiYTBlOWM3NjVhNTQyMmFiMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMzVkOTU0MmI4ZDg3NDA4YmEwZTljNzY1YTU0MjJhYjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAyNzkgS2/Fm2Npw7PFgiDFm3cuIEphbmEgSmVyb3pvbGltc2tpZWdvIHphIG11cmFtaSB3IFBvem5hbml1PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNGViNjZkNjc2ZDc0NjczOTA1ZDVlMWFhOTY1NDJmNy5zZXRDb250ZW50KGh0bWxfMzVkOTU0MmI4ZDg3NDA4YmEwZTljNzY1YTU0MjJhYjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83NmM3OWU3NDAyYjA0Yjg0YTA1NjgwZDg3NTAwNDcxYi5iaW5kUG9wdXAocG9wdXBfZjRlYjY2ZDY3NmQ3NDY3MzkwNWQ1ZTFhYTk2NTQyZjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDIyODY1NmExNzRiNDk0YjliN2M1ZDIyOTcwY2I3MTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4wMTAxNDUsMTYuMjkzMTc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzA2YjQxMGI4MTRlYzRmY2NiNDQ4NGFhMzM4YTY4NTc0ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdsaWdodHJlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wMjI4NjU2YTE3NGI0OTRiOWI3YzVkMjI5NzBjYjcxNC5zZXRJY29uKGljb25fMDZiNDEwYjgxNGVjNGZjY2I0NDg0YWEzMzhhNjg1NzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTFhYjUzMTk2NmE5NDBjNzk1OTJlZDA1MjE1NWE3MGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDdkYTg2ODQ2NmZiNGU5NmI0N2JiY2ZkZDk5ZjI5ZjMgPSAkKCc8ZGl2IGlkPSJodG1sX2Q3ZGE4Njg0NjZmYjRlOTZiNDdiYmNmZGQ5OWYyOWYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjgyIEtvxZtjacOzxYIgxZt3LiBKYW5hIENocnpjaWNpZWxhIHcgUHJ6ZW3EmWNpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTFhYjUzMTk2NmE5NDBjNzk1OTJlZDA1MjE1NWE3MGMuc2V0Q29udGVudChodG1sX2Q3ZGE4Njg0NjZmYjRlOTZiNDdiYmNmZGQ5OWYyOWYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDIyODY1NmExNzRiNDk0YjliN2M1ZDIyOTcwY2I3MTQuYmluZFBvcHVwKHBvcHVwX2ExYWI1MzE5NjZhOTQwYzc5NTkyZWQwNTIxNTVhNzBjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA2OGY2ODgyMmM0YjRhNzBhNmY0ODY4NTc1MzhiNzM0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuOTU3OTM4LDE2LjE1OTY3N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zNjEzYTAwYTUyMDY0MDM0YjUzZmU2ZTNmZjQxMGEyOCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDY4ZjY4ODIyYzRiNGE3MGE2ZjQ4Njg1NzUzOGI3MzQuc2V0SWNvbihpY29uXzM2MTNhMDBhNTIwNjQwMzRiNTNmZTZlM2ZmNDEwYTI4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkNWU3YThkNmY0YjRhNjNiZTllNGI4MjE1ZWJiODI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2MzlhOTUyZDU1ZDRkN2FhZTQ0ZGU2ODdiZDFkY2VlID0gJCgnPGRpdiBpZD0iaHRtbF9kNjM5YTk1MmQ1NWQ0ZDdhYWU0NGRlNjg3YmQxZGNlZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDI4MyBXaWXFvGEgd2lkb2tvd2EgdyBLYXN6Y3pvcnplPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZDVlN2E4ZDZmNGI0YTYzYmU5ZTRiODIxNWViYjgyNC5zZXRDb250ZW50KGh0bWxfZDYzOWE5NTJkNTVkNGQ3YWFlNDRkZTY4N2JkMWRjZWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wNjhmNjg4MjJjNGI0YTcwYTZmNDg2ODU3NTM4YjczNC5iaW5kUG9wdXAocG9wdXBfNmQ1ZTdhOGQ2ZjRiNGE2M2JlOWU0YjgyMTVlYmI4MjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGQ5NTcwZDgxNjMxNDVhZjk0YzNiZjgxZjkwYzVkMjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4wNTc5NTUsMTYuMzczNzMxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzQyOGVjMGNiMDMxYTRiM2VhN2RkZjk1YjVkNDgzODY0ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdsaWdodHJlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kZDk1NzBkODE2MzE0NWFmOTRjM2JmODFmOTBjNWQyMC5zZXRJY29uKGljb25fNDI4ZWMwY2IwMzFhNGIzZWE3ZGRmOTViNWQ0ODM4NjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTAxMGRjZTQwYzcxNDAzY2I1MDM2ZGJmNzRiMTk1MTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWU1ZDFjNDQzZjY5NDZlZTliOGI4ZWU5MGRlNWVmMWUgPSAkKCc8ZGl2IGlkPSJodG1sX2FlNWQxYzQ0M2Y2OTQ2ZWU5YjhiOGVlOTBkZTVlZjFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjg0IFdpZcW8YSB3aWRva293YSB3IFNpZWtvd2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMDEwZGNlNDBjNzE0MDNjYjUwMzZkYmY3NGIxOTUxNi5zZXRDb250ZW50KGh0bWxfYWU1ZDFjNDQzZjY5NDZlZTliOGI4ZWU5MGRlNWVmMWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZDk1NzBkODE2MzE0NWFmOTRjM2JmODFmOTBjNWQyMC5iaW5kUG9wdXAocG9wdXBfYTAxMGRjZTQwYzcxNDAzY2I1MDM2ZGJmNzRiMTk1MTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzQ4OTIyOTAwZWMwNDQ1ZGEzN2Y2OGFmZDRkZmM1NmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi45ODUzNTQsMTcuNTYwMTA0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2UzMGIwMTIzNjY0MjRmMDZhNzY1Njk5NDkwYTQxODNjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdsaWdodHJlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83NDg5MjI5MDBlYzA0NDVkYTM3ZjY4YWZkNGRmYzU2Yy5zZXRJY29uKGljb25fZTMwYjAxMjM2NjQyNGYwNmE3NjU2OTk0OTBhNDE4M2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2Q1MWFmMmUzNzgyNDNlMTk0ZDUwNzNiODk1MmM5YWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2FhZjdiM2ExMjRlNGU3Y2I1M2IwNGQxZWIwMGRkZDMgPSAkKCc8ZGl2IGlkPSJodG1sXzdhYWY3YjNhMTI0ZTRlN2NiNTNiMDRkMWViMDBkZGQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMjkyIE11emV1bSBQcnp5cm9kbmljem8g4oCTIMWBb3dpZWNraWUgdyBUdXJ6eW5pZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2Q1MWFmMmUzNzgyNDNlMTk0ZDUwNzNiODk1MmM5YWMuc2V0Q29udGVudChodG1sXzdhYWY3YjNhMTI0ZTRlN2NiNTNiMDRkMWViMDBkZGQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzQ4OTIyOTAwZWMwNDQ1ZGEzN2Y2OGFmZDRkZmM1NmMuYmluZFBvcHVwKHBvcHVwXzdkNTFhZjJlMzc4MjQzZTE5NGQ1MDczYjg5NTJjOWFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzgwYzY3NzFiYjhhYTRhODJiMzhlNzQzNzYxMWY1ZDAyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODAzMjkzLDE2LjMxNzk2MTk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8yZGE1NjMyODA3MDc0YjdkYjFjODQxZDJkNGEyYWNhYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODBjNjc3MWJiOGFhNGE4MmIzOGU3NDM3NjExZjVkMDIuc2V0SWNvbihpY29uXzJkYTU2MzI4MDcwNzRiN2RiMWM4NDFkMmQ0YTJhY2FiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5YTM5MGNiYjQ5YzQ4MTBhZmQ2MmFiNWRkYjQ3YTcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY1NDQ3NmUwNGE2NTQ0ZTQ4ODhkN2FmMjk2NTUwNjVlID0gJCgnPGRpdiBpZD0iaHRtbF82NTQ0NzZlMDRhNjU0NGU0ODg4ZDdhZjI5NjU1MDY1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDMzMyBNdXpldW0gWmllbWkgV3NjaG93c2tpZWogd2UgV3NjaG93aWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5YTM5MGNiYjQ5YzQ4MTBhZmQ2MmFiNWRkYjQ3YTcwLnNldENvbnRlbnQoaHRtbF82NTQ0NzZlMDRhNjU0NGU0ODg4ZDdhZjI5NjU1MDY1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzgwYzY3NzFiYjhhYTRhODJiMzhlNzQzNzYxMWY1ZDAyLmJpbmRQb3B1cChwb3B1cF81OWEzOTBjYmI0OWM0ODEwYWZkNjJhYjVkZGI0N2E3MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNTEzMTg2NmQ1ODg0YmJmYjU2NDEyNGY2Nzc5ZGQwOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjgwNDg2OSwxNi4zMTUyMTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzEzNGNmOTNjYjdkNGFkMzliMmFmMjQyODljMTk3ZGQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2xpZ2h0cmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2Q1MTMxODY2ZDU4ODRiYmZiNTY0MTI0ZjY3NzlkZDA5LnNldEljb24oaWNvbl9jMTM0Y2Y5M2NiN2Q0YWQzOWIyYWYyNDI4OWMxOTdkZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZTBkNzEwMWFhNmI0NGVjODU3ZDM3ZThiMDliNmU0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMjU3ZmEwNTZmZWY0MjU0YjEyNzNlZTJhODRjMjQ5OCA9ICQoJzxkaXYgaWQ9Imh0bWxfZDI1N2ZhMDU2ZmVmNDI1NGIxMjczZWUyYTg0YzI0OTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzMzQgRGF3bmEgUmV6eWRlbmNqYSBKZXp1aWNrYSB3ZSBXc2Nob3dpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2UwZDcxMDFhYTZiNDRlYzg1N2QzN2U4YjA5YjZlNGUuc2V0Q29udGVudChodG1sX2QyNTdmYTA1NmZlZjQyNTRiMTI3M2VlMmE4NGMyNDk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDUxMzE4NjZkNTg4NGJiZmI1NjQxMjRmNjc3OWRkMDkuYmluZFBvcHVwKHBvcHVwXzdlMGQ3MTAxYWE2YjQ0ZWM4NTdkMzdlOGIwOWI2ZTRlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI0MGI0MDQ3MDg3MTQ3OGVhY2I5NTU5MjAwZDcyNjk3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODA4NzA0LDE2LjMxODE5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hYmRhNjEwMzQxYzY0ODA1YWQ0ZmUwNDg4YWE3MWMzOSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMjQwYjQwNDcwODcxNDc4ZWFjYjk1NTkyMDBkNzI2OTcuc2V0SWNvbihpY29uX2FiZGE2MTAzNDFjNjQ4MDVhZDRmZTA0ODhhYTcxYzM5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2NzcxZmVmMGY0NDQ4NThhZjQ2NmEwMzY2YzUzZDZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI4YjAzMGM5NmJmNjQ1Njg5MDNjM2M3M2RjNjExYWExID0gJCgnPGRpdiBpZD0iaHRtbF8yOGIwMzBjOTZiZjY0NTY4OTAzYzNjNzNkYzYxMWFhMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDMzNSBMYXBpZGFyaXVtIFJ6ZcW6YnkgTmFncm9ibmVqIHdlIFdzY2hvd2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjc3MWZlZjBmNDQ0ODU4YWY0NjZhMDM2NmM1M2Q2Yi5zZXRDb250ZW50KGh0bWxfMjhiMDMwYzk2YmY2NDU2ODkwM2MzYzczZGM2MTFhYTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNDBiNDA0NzA4NzE0NzhlYWNiOTU1OTIwMGQ3MjY5Ny5iaW5kUG9wdXAocG9wdXBfMzY3NzFmZWYwZjQ0NDg1OGFmNDY2YTAzNjZjNTNkNmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmYyODAzN2I5ZTEwNGYwMzg2OWQyNDg0YWUwYzlhM2MgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4yNzU0OTIsMTYuODY3NDg2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjMxZDIwOWI4N2JlNGI5NjhjYjQ4NWE2N2VjNTYwZDYpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzA4Y2M5NjAxYzhiZDQ2ODI5Yzc4NjYzZGIyYzI2NWY5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5mby1zaWduJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdsaWdodHJlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yZjI4MDM3YjllMTA0ZjAzODY5ZDI0ODRhZTBjOWEzYy5zZXRJY29uKGljb25fMDhjYzk2MDFjOGJkNDY4MjljNzg2NjNkYjJjMjY1ZjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWNlOWEzMmIzNmJkNGMxMWE2MTZjN2NhMTg1ZWJiYjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGFhZmVjMjgyMWFjNDk2M2E4Y2RiY2U0ZGYwN2U4ZDMgPSAkKCc8ZGl2IGlkPSJodG1sXzhhYWZlYzI4MjFhYzQ5NjNhOGNkYmNlNGRmMDdlOGQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Oby4gMzQ4IE11emV1bSBBcmthZGVnbyBGaWVkbGVyYSB3IFB1c3pjenlrb3dpZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWNlOWEzMmIzNmJkNGMxMWE2MTZjN2NhMTg1ZWJiYjYuc2V0Q29udGVudChodG1sXzhhYWZlYzI4MjFhYzQ5NjNhOGNkYmNlNGRmMDdlOGQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmYyODAzN2I5ZTEwNGYwMzg2OWQyNDg0YWUwYzlhM2MuYmluZFBvcHVwKHBvcHVwXzVjZTlhMzJiMzZiZDRjMTFhNjE2YzdjYTE4NWViYmI2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI3MGEyMDY1YTQ5ZDRkNTJiYjUyYTExMzIzYjhiYzFmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMjM0NTQ0LDE2LjkyOTc3NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8wMDZmODFhMzUwMTk0ZmRkYTEzZDdjMmYyZGMwYjNiYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMjcwYTIwNjVhNDlkNGQ1MmJiNTJhMTEzMjNiOGJjMWYuc2V0SWNvbihpY29uXzAwNmY4MWEzNTAxOTRmZGRhMTNkN2MyZjJkYzBiM2JiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwYjliYmY2ZmJlMTRmMmM5ZmI4NTczNzNhMWQwMWNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M1M2U3NzZjMDNkMTQ1YjE5OWJiYWNlM2M4ZDRhZGJjID0gJCgnPGRpdiBpZD0iaHRtbF9jNTNlNzc2YzAzZDE0NWIxOTliYmFjZTNjOGQ0YWRiYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDM0OSBQYcWCYWMgdyBSb2dhbGluaWU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQwYjliYmY2ZmJlMTRmMmM5ZmI4NTczNzNhMWQwMWNkLnNldENvbnRlbnQoaHRtbF9jNTNlNzc2YzAzZDE0NWIxOTliYmFjZTNjOGQ0YWRiYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI3MGEyMDY1YTQ5ZDRkNTJiYjUyYTExMzIzYjhiYzFmLmJpbmRQb3B1cChwb3B1cF80MGI5YmJmNmZiZTE0ZjJjOWZiODU3MzczYTFkMDFjZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84ODhjMWZjMjQyY2M0N2JhOTdkZWFjNTQ1MWUxNDhmNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjQwODU3NywxNi45MzQwNjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fY2FkNTYzM2FiZTM0NGQ1ZGI0MWIyY2RkNzcyMmY2YTAgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2xpZ2h0cmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzg4OGMxZmMyNDJjYzQ3YmE5N2RlYWM1NDUxZTE0OGY3LnNldEljb24oaWNvbl9jYWQ1NjMzYWJlMzQ0ZDVkYjQxYjJjZGQ3NzIyZjZhMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZjJiNWI0Njg3MGI0MzVhYTcwYmM0YzYwMzBkZWEwNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMmFhZGI4YTI4ODE0M2M3ODU4ZDlkZDgzOWQ1N2I1MSA9ICQoJzxkaXYgaWQ9Imh0bWxfZTJhYWRiOGEyODgxNDNjNzg1OGQ5ZGQ4MzlkNTdiNTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzNTAgTXV6ZXVtIEhpc3RvcmlpIE1pYXN0YSBQb3puYW5pYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWYyYjViNDY4NzBiNDM1YWE3MGJjNGM2MDMwZGVhMDQuc2V0Q29udGVudChodG1sX2UyYWFkYjhhMjg4MTQzYzc4NThkOWRkODM5ZDU3YjUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODg4YzFmYzI0MmNjNDdiYTk3ZGVhYzU0NTFlMTQ4ZjcuYmluZFBvcHVwKHBvcHVwXzVmMmI1YjQ2ODcwYjQzNWFhNzBiYzRjNjAzMGRlYTA0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q4YjI2YTQxZjRmMzRjNDJhOWFhYjlmYzY0YTAyN2M0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNDA4MDMyMywxNi45MzQ2MDQ2OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMzFkMjA5Yjg3YmU0Yjk2OGNiNDg1YTY3ZWM1NjBkNik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZTAxYjJlYTExYzQxNDBlZjk5MGQxZGM5YjQ0MGRhMjUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdpbmZvLXNpZ24nLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2xpZ2h0cmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2Q4YjI2YTQxZjRmMzRjNDJhOWFhYjlmYzY0YTAyN2M0LnNldEljb24oaWNvbl9lMDFiMmVhMTFjNDE0MGVmOTkwZDFkYzliNDQwZGEyNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNjdhYjFmYjcwZmQ0OTRiOTA3MzBlNTBiZWQyMDM4NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZjA0ODU4NDdmNzI0YmU1ODgxYmE3NWYxNWYwYWZkYSA9ICQoJzxkaXYgaWQ9Imh0bWxfZWYwNDg1ODQ3ZjcyNGJlNTg4MWJhNzVmMTVmMGFmZGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vLiAzNTEgTXV6ZXVtIEluc3RydW1lbnTDs3cgTXV6eWN6bnljaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTY3YWIxZmI3MGZkNDk0YjkwNzMwZTUwYmVkMjAzODQuc2V0Q29udGVudChodG1sX2VmMDQ4NTg0N2Y3MjRiZTU4ODFiYTc1ZjE1ZjBhZmRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDhiMjZhNDFmNGYzNGM0MmE5YWFiOWZjNjRhMDI3YzQuYmluZFBvcHVwKHBvcHVwXzE2N2FiMWZiNzBmZDQ5NGI5MDczMGU1MGJlZDIwMzg0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQyNDRmNDNhMjE3MTQ5MTFhNGJiZGU3MGRiNzc5N2JkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNDA1NTQyLDE2Ljk0MDU0OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80YmIyMmFmMmEyOGU0ODMxOWZjNDI1NjkxMGE4ODQxMyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNDI0NGY0M2EyMTcxNDkxMWE0YmJkZTcwZGI3Nzk3YmQuc2V0SWNvbihpY29uXzRiYjIyYWYyYTI4ZTQ4MzE5ZmM0MjU2OTEwYTg4NDEzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA5NDYwNmFjZDM0YjRmYWViMWRkNDg1NDQzMGNhMTk3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JhNjhjYzZkZWRmOTQyY2E5NjgxMjc1ZDZjMzgyOWFhID0gJCgnPGRpdiBpZD0iaHRtbF9iYTY4Y2M2ZGVkZjk0MmNhOTY4MTI3NWQ2YzM4MjlhYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDM1MiBNdXpldW0gRXRub2dyYWZpY3puZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDk0NjA2YWNkMzRiNGZhZWIxZGQ0ODU0NDMwY2ExOTcuc2V0Q29udGVudChodG1sX2JhNjhjYzZkZWRmOTQyY2E5NjgxMjc1ZDZjMzgyOWFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDI0NGY0M2EyMTcxNDkxMWE0YmJkZTcwZGI3Nzk3YmQuYmluZFBvcHVwKHBvcHVwXzA5NDYwNmFjZDM0YjRmYWViMWRkNDg1NDQzMGNhMTk3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM4ZTNlYmYyZWJjZjQ0ZTM4NjBhYjgyMDM2YTgxNzZjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNDA4Mzc4LDE2LjkzMzYzODAwMDAwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8wMjM1MDE3NjJmNzg0ZTBhOWY2ZTE4OTIzZjdjNWFiOCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMzhlM2ViZjJlYmNmNDRlMzg2MGFiODIwMzZhODE3NmMuc2V0SWNvbihpY29uXzAyMzUwMTc2MmY3ODRlMGE5ZjZlMTg5MjNmN2M1YWI4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdkZGRlYjU5ODA1OTQ0NDM4NWZiMDYxZjc1NGQ0YTJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZjNWYzNTE4MmI1YTRkYWM4NDJlMWVmYzY1NTkyNjAwID0gJCgnPGRpdiBpZD0iaHRtbF9mYzVmMzUxODJiNWE0ZGFjODQyZTFlZmM2NTU5MjYwMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDM1NSBXaWVsa29wb2xza2llIE11emV1bSBXb2pza293ZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2RkZGViNTk4MDU5NDQ0Mzg1ZmIwNjFmNzU0ZDRhMmQuc2V0Q29udGVudChodG1sX2ZjNWYzNTE4MmI1YTRkYWM4NDJlMWVmYzY1NTkyNjAwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzhlM2ViZjJlYmNmNDRlMzg2MGFiODIwMzZhODE3NmMuYmluZFBvcHVwKHBvcHVwXzdkZGRlYjU5ODA1OTQ0NDM4NWZiMDYxZjc1NGQ0YTJkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM5M2VlYjRiNjhkYzQ0M2VhMDFmMTIzYjhjMjM4ODRiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNDA4OTM4LDE2LjkyOTYwNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kNDM0MjM5MWI2YmM0MGQ4OTkzMjUzNDg0NjhiNjI0MSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMzkzZWViNGI2OGRjNDQzZWEwMWYxMjNiOGMyMzg4NGIuc2V0SWNvbihpY29uX2Q0MzQyMzkxYjZiYzQwZDg5OTMyNTM0ODQ2OGI2MjQxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiYTljZWE3ZDYyNzRmNDE5MGE4ODQwOWIxNzViOWY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA5YjE2N2I1MDJkZTQwOTc4ZjZjZTQyZjk0MzIwYWI0ID0gJCgnPGRpdiBpZD0iaHRtbF8wOWIxNjdiNTAyZGU0MDk3OGY2Y2U0MmY5NDMyMGFiNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDM1NiBNdXpldW0gTmFyb2Rvd2UgdyBQb3puYW5pdTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGJhOWNlYTdkNjI3NGY0MTkwYTg4NDA5YjE3NWI5ZjQuc2V0Q29udGVudChodG1sXzA5YjE2N2I1MDJkZTQwOTc4ZjZjZTQyZjk0MzIwYWI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzkzZWViNGI2OGRjNDQzZWEwMWYxMjNiOGMyMzg4NGIuYmluZFBvcHVwKHBvcHVwXzhiYTljZWE3ZDYyNzRmNDE5MGE4ODQwOWIxNzViOWY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE3YzUxZTI0N2NlNDQ0NjA5NzUwMzk5ODhiZmNhYjYxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNDc1OTUyLDE3LjI0ODk0MTAwMDAwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YzMWQyMDliODdiZTRiOTY4Y2I0ODVhNjdlYzU2MGQ2KTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl84ZGRlODhhOTM0Y2E0NTMyOTZmN2JlNTBhMmE4ODQ1NCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8tc2lnbicsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnbGlnaHRyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMTdjNTFlMjQ3Y2U0NDQ2MDk3NTAzOTk4OGJmY2FiNjEuc2V0SWNvbihpY29uXzhkZGU4OGE5MzRjYTQ1MzI5NmY3YmU1MGEyYTg4NDU0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBjYTExMGFhMWYzMzQ1ZjA5NDVmOWFhOGQxMTY3OTEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhjOTY4NGFkMDAwNTQ1MWM5ZjRhMjk3ODQwOGM3YmYwID0gJCgnPGRpdiBpZD0iaHRtbF84Yzk2ODRhZDAwMDU0NTFjOWY0YTI5Nzg0MDhjN2JmMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm8uIDM1NyBQYXJrIE1pbmlhdHVyIHcgUG9iaWVkemlza2FjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGNhMTEwYWExZjMzNDVmMDk0NWY5YWE4ZDExNjc5MTAuc2V0Q29udGVudChodG1sXzhjOTY4NGFkMDAwNTQ1MWM5ZjRhMjk3ODQwOGM3YmYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTdjNTFlMjQ3Y2U0NDQ2MDk3NTAzOTk4OGJmY2FiNjEuYmluZFBvcHVwKHBvcHVwXzBjYTExMGFhMWYzMzQ1ZjA5NDVmOWFhOGQxMTY3OTEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA3NmJhOTgwM2VkMzQ1OTg4MWRjZTVhNTEyM2I0MjgxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIu
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment