Skip to content

Instantly share code, notes, and snippets.

@jhconning
Created October 22, 2018 05:19
Show Gist options
  • Save jhconning/3b815295351e9bb8ea696fcf9953c50f to your computer and use it in GitHub Desktop.
Save jhconning/3b815295351e9bb8ea696fcf9953c50f to your computer and use it in GitHub Desktop.
Hunter/Masters/Jeremy Sze/MA Thesis - Copy/jeremy_python.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "## Plotting Jeremy's LPIS data\n\n"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import pandas as pd\nimport matplotlib.pyplot as plt\nimport geopandas as gpd\nimport folium \nfrom folium.plugins import MarkerCluster, HeatMap\nimport osmnx as ox\nimport fiona\n\nfrom shapely.geometry import Point\nimport matplotlib.pyplot as plt\n\npd.options.display.float_format = '{:,.2f}'.format",
"execution_count": 96,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Let's read in the amazing Stata dataset Jeremy prepared into a pandas dataframe. "
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df = pd.read_stata(\"./working_data/analytical_file_panel.dta\")",
"execution_count": 2,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Now create a geometry from those `latitude` and `longitude` measures to turn this into a geodataframe. \n\nNote however that these are not in fact true `longitude` and `latitude` measures but rather measurements in feet since the geometry used here is [EPSG:2263](http://spatialreference.org/ref/epsg/2263/) also referred to as NAD83. \n\nTo allow true latitude and longitude columns later let's rename these something else:"
},
{
"metadata": {
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "df.rename(index=str, columns={'longitude': 'ft_lon', 'latitude': 'ft_lat'},inplace=True)",
"execution_count": 12,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df['Coordinates'] = list(zip(df.ft_lon, df.ft_lat))\ndf['Coordinates'] = df['Coordinates'].apply(Point)\ngdf = gpd.GeoDataFrame(df, geometry='Coordinates')",
"execution_count": 14,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We also need to make it clear that the Coordinate Reference System (CRS) for these measures is EPSG 2263. With that we can later correctly convert from that to EPSG 4326 to use true latitude and longitude. This is needed only because that's what we need for a Folium (leaflet) map."
},
{
"metadata": {
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "gdf.crs = fiona.crs.from_epsg(2263)\ngdf = gdf.to_crs(epsg='4326')",
"execution_count": 15,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Now, finally we can create columns for `latitude` and `longitude` coordinates."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "gdf['longitude'] = gdf.Coordinates.x\ngdf['latitude'] = gdf.Coordinates.y",
"execution_count": 16,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Let's see the list of variables and representative values."
},
{
"metadata": {
"scrolled": true,
"trusted": true
},
"cell_type": "code",
"source": "pd.set_option('display.max_rows', 120)\ngdf.head(1).T",
"execution_count": 17,
"outputs": [
{
"data": {
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>0</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>intersection_id</th>\n <td>1</td>\n </tr>\n <tr>\n <th>month</th>\n <td>7</td>\n </tr>\n <tr>\n <th>year</th>\n <td>2012</td>\n </tr>\n <tr>\n <th>monthly</th>\n <td>2012-07-01 00:00:00</td>\n </tr>\n <tr>\n <th>ft_lon</th>\n <td>1,025,301.15</td>\n </tr>\n <tr>\n <th>ft_lat</th>\n <td>270,701.93</td>\n </tr>\n <tr>\n <th>bname</th>\n <td>Bronx</td>\n </tr>\n <tr>\n <th>bronx</th>\n <td>1</td>\n </tr>\n <tr>\n <th>brooklyn</th>\n <td>0</td>\n </tr>\n <tr>\n <th>manhattan</th>\n <td>0</td>\n </tr>\n <tr>\n <th>queens</th>\n <td>0</td>\n </tr>\n <tr>\n <th>statenisland</th>\n <td>0</td>\n </tr>\n <tr>\n <th>inters_to_sch_dist</th>\n <td>2778</td>\n </tr>\n <tr>\n <th>inters_to_hosp_dist</th>\n <td>6439</td>\n </tr>\n <tr>\n <th>lionstreet_id</th>\n <td>29364</td>\n </tr>\n <tr>\n <th>trafdir</th>\n <td>Two-Way: Traffic flows in both directions</td>\n </tr>\n <tr>\n <th>streetwidth_min</th>\n <td>24.00</td>\n </tr>\n <tr>\n <th>streetwidth_max</th>\n <td>30.00</td>\n </tr>\n <tr>\n <th>streetwidth_irr</th>\n <td>NaN</td>\n </tr>\n <tr>\n <th>posted_speed</th>\n <td>25.00</td>\n </tr>\n <tr>\n <th>number_travel_lanes</th>\n <td>1.00</td>\n </tr>\n <tr>\n <th>mi_number_travel_lanes</th>\n <td>0</td>\n </tr>\n <tr>\n <th>number_park_lanes</th>\n <td>0</td>\n </tr>\n <tr>\n <th>mi_number_park_lanes</th>\n <td>1</td>\n </tr>\n <tr>\n <th>number_total_lanes</th>\n <td>1.00</td>\n </tr>\n <tr>\n <th>bike_route_id</th>\n <td>250,515.00</td>\n </tr>\n <tr>\n <th>bike_route_to_coli_dist</th>\n <td>3,303.43</td>\n </tr>\n <tr>\n <th>bike_route_install_dt</th>\n <td>NaT</td>\n </tr>\n <tr>\n <th>lanecount</th>\n <td>NaN</td>\n </tr>\n <tr>\n <th>bike_route_modif_dt</th>\n <td>NaT</td>\n </tr>\n <tr>\n <th>onoffst</th>\n <td></td>\n </tr>\n <tr>\n <th>bike_route_install_mt</th>\n <td>NaT</td>\n </tr>\n <tr>\n <th>bike_route_modif_mt</th>\n <td>NaT</td>\n </tr>\n <tr>\n <th>truck_route_id</th>\n <td>5383</td>\n </tr>\n <tr>\n <th>truck_route_to_coli_dist</th>\n <td>1,293.15</td>\n </tr>\n <tr>\n <th>bikelane_type</th>\n <td>NaN</td>\n </tr>\n <tr>\n <th>routetype</th>\n <td>Local</td>\n </tr>\n <tr>\n <th>monthly_avg_drybulbtemp</th>\n <td>78.68</td>\n </tr>\n <tr>\n <th>monthly_avg_precip</th>\n <td>0.14</td>\n </tr>\n <tr>\n <th>monthly_avg_snowfall</th>\n <td>0.00</td>\n </tr>\n <tr>\n <th>monthly_tot_drybulbtemp</th>\n <td>2,439.00</td>\n </tr>\n <tr>\n <th>monthly_tot_precip</th>\n <td>4.21</td>\n </tr>\n <tr>\n <th>monthly_tot_snowfall</th>\n <td>0.00</td>\n </tr>\n <tr>\n <th>left_turn_id</th>\n <td>104</td>\n </tr>\n <tr>\n <th>intersection_to_left_turn_dist</th>\n <td>4,050.51</td>\n </tr>\n <tr>\n <th>left_turn_install_dt</th>\n <td>2017-12-09 00:00:00</td>\n </tr>\n <tr>\n <th>left_turn_install_month</th>\n <td>2017-12-01 00:00:00</td>\n </tr>\n <tr>\n <th>left_turn_treatment</th>\n <td>Daylighting, Box markings, Pegatracks, Delinea...</td>\n </tr>\n <tr>\n <th>left_turn_min</th>\n <td>0.19</td>\n </tr>\n <tr>\n <th>flag_left_turn_ever</th>\n <td>0</td>\n </tr>\n <tr>\n <th>flag_left_turn</th>\n <td>0</td>\n </tr>\n <tr>\n <th>street_improv_id</th>\n <td>173</td>\n </tr>\n <tr>\n <th>intersec_to_street_improv_dist</th>\n <td>8,243.45</td>\n </tr>\n <tr>\n <th>street_improv_treatment</th>\n <td></td>\n </tr>\n <tr>\n <th>street_improv_install_dt</th>\n <td>2017-12-31 00:00:00</td>\n </tr>\n <tr>\n <th>street_improv_install_month</th>\n <td>2017-12-01 00:00:00</td>\n </tr>\n <tr>\n <th>street_improv_min</th>\n <td>395.85</td>\n </tr>\n <tr>\n <th>flag_street_improv_ever</th>\n <td>0</td>\n </tr>\n <tr>\n <th>flag_street_improv</th>\n <td>0</td>\n </tr>\n <tr>\n <th>LPIS_id</th>\n <td>1767</td>\n </tr>\n <tr>\n <th>intersection_to_LPIS_dist</th>\n <td>2,251.85</td>\n </tr>\n <tr>\n <th>LPIS_install_date</th>\n <td>2016-02-06 00:00:00</td>\n </tr>\n <tr>\n <th>LPIS_install_month</th>\n <td>2016-02-01 00:00:00</td>\n </tr>\n <tr>\n <th>LPIS_install_year</th>\n <td>2,016.00</td>\n </tr>\n <tr>\n <th>LPIS_min</th>\n <td>19.07</td>\n </tr>\n <tr>\n <th>flag_LPIS_ever</th>\n <td>0</td>\n </tr>\n <tr>\n <th>flag_LPIS</th>\n <td>0</td>\n </tr>\n <tr>\n <th>bike_route_ever</th>\n <td>0</td>\n </tr>\n <tr>\n <th>bike_route_tv</th>\n <td>0</td>\n </tr>\n <tr>\n <th>truck_route</th>\n <td>0</td>\n </tr>\n <tr>\n <th>collision_count</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_collision_count</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_collision_count</th>\n <td>0</td>\n </tr>\n <tr>\n <th>personsinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>personskilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>pedestriansinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>pedestrianskilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>cyclistinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>cyclistkilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>motoristinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>motoristkilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_personsinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_personskilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_pedestriansinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_pedestrianskilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_cyclistinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_cyclistkilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_motoristinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_motoristkilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_personsinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_personskilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_pedestriansinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_pedestrianskilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_cyclistinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_cyclistkilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_motoristinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_motoristkilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>flag_collision</th>\n <td>0.00</td>\n </tr>\n <tr>\n <th>latenight_flag_collision</th>\n <td>0.00</td>\n </tr>\n <tr>\n <th>day_flag_collision</th>\n <td>0.00</td>\n </tr>\n <tr>\n <th>group</th>\n <td>NaN</td>\n </tr>\n <tr>\n <th>group_filled</th>\n <td>NaN</td>\n </tr>\n <tr>\n <th>Coordinates</th>\n <td>POINT (-73.85148400285885 40.90959199994354)</td>\n </tr>\n <tr>\n <th>longitude</th>\n <td>-73.85</td>\n </tr>\n <tr>\n <th>latitude</th>\n <td>40.91</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " 0\nintersection_id 1\nmonth 7\nyear 2012\nmonthly 2012-07-01 00:00:00\nft_lon 1,025,301.15\nft_lat 270,701.93\nbname Bronx\nbronx 1\nbrooklyn 0\nmanhattan 0\nqueens 0\nstatenisland 0\ninters_to_sch_dist 2778\ninters_to_hosp_dist 6439\nlionstreet_id 29364\ntrafdir Two-Way: Traffic flows in both directions\nstreetwidth_min 24.00\nstreetwidth_max 30.00\nstreetwidth_irr NaN\nposted_speed 25.00\nnumber_travel_lanes 1.00\nmi_number_travel_lanes 0\nnumber_park_lanes 0\nmi_number_park_lanes 1\nnumber_total_lanes 1.00\nbike_route_id 250,515.00\nbike_route_to_coli_dist 3,303.43\nbike_route_install_dt NaT\nlanecount NaN\nbike_route_modif_dt NaT\nonoffst \nbike_route_install_mt NaT\nbike_route_modif_mt NaT\ntruck_route_id 5383\ntruck_route_to_coli_dist 1,293.15\nbikelane_type NaN\nroutetype Local\nmonthly_avg_drybulbtemp 78.68\nmonthly_avg_precip 0.14\nmonthly_avg_snowfall 0.00\nmonthly_tot_drybulbtemp 2,439.00\nmonthly_tot_precip 4.21\nmonthly_tot_snowfall 0.00\nleft_turn_id 104\nintersection_to_left_turn_dist 4,050.51\nleft_turn_install_dt 2017-12-09 00:00:00\nleft_turn_install_month 2017-12-01 00:00:00\nleft_turn_treatment Daylighting, Box markings, Pegatracks, Delinea...\nleft_turn_min 0.19\nflag_left_turn_ever 0\nflag_left_turn 0\nstreet_improv_id 173\nintersec_to_street_improv_dist 8,243.45\nstreet_improv_treatment \nstreet_improv_install_dt 2017-12-31 00:00:00\nstreet_improv_install_month 2017-12-01 00:00:00\nstreet_improv_min 395.85\nflag_street_improv_ever 0\nflag_street_improv 0\nLPIS_id 1767\nintersection_to_LPIS_dist 2,251.85\nLPIS_install_date 2016-02-06 00:00:00\nLPIS_install_month 2016-02-01 00:00:00\nLPIS_install_year 2,016.00\nLPIS_min 19.07\nflag_LPIS_ever 0\nflag_LPIS 0\nbike_route_ever 0\nbike_route_tv 0\ntruck_route 0\ncollision_count 0\nlatenight_collision_count 0\nday_collision_count 0\npersonsinjured 0\npersonskilled 0\npedestriansinjured 0\npedestrianskilled 0\ncyclistinjured 0\ncyclistkilled 0\nmotoristinjured 0\nmotoristkilled 0\nlatenight_personsinjured 0\nlatenight_personskilled 0\nlatenight_pedestriansinjured 0\nlatenight_pedestrianskilled 0\nlatenight_cyclistinjured 0\nlatenight_cyclistkilled 0\nlatenight_motoristinjured 0\nlatenight_motoristkilled 0\nday_personsinjured 0\nday_personskilled 0\nday_pedestriansinjured 0\nday_pedestrianskilled 0\nday_cyclistinjured 0\nday_cyclistkilled 0\nday_motoristinjured 0\nday_motoristkilled 0\nflag_collision 0.00\nlatenight_flag_collision 0.00\nday_flag_collision 0.00\ngroup NaN\ngroup_filled NaN\nCoordinates POINT (-73.85148400285885 40.90959199994354)\nlongitude -73.85\nlatitude 40.91"
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Exploring Jackson Heights New York\n\nI live in this neighborhood, so let's explore the situation inside [this box](https://www.openstreetmap.org/export#map=16/40.7535/-73.8844) conveniently mapped for export at OpenStreetMap (and they even give the lat/lon bounds of the box which we'll use below)\n\nLet's create a dataframe with just focus the intersections in this neighborhood."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "jhmask = ( (gdf.longitude > -73.8987) & (gdf.longitude < -73.8701) & (gdf.latitude > 40.7470) & (gdf.latitude < 40.7600) )\njh = gdf[jhmask]\njh.shape",
"execution_count": 20,
"outputs": [
{
"data": {
"text/plain": "(20400, 105)"
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "It will be useful to also have a data frame that 'collapses' (using Stata language) the data by `intersection_id` to leave us one observation per intersection, for easy mapping etc. This is a groupby in pandas.\n\nNote how in pandas we can first create a dictionary mapping each column to the aggregation we want. In some cases (e.g. `intersection_id`) we just need the first or last observation, in others like `personsinjured` we want a sum. Then with that dictionary we can create the new dataframe in one single groupby and aggregate operation.\n\n"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "lastcols = ['intersection_id', 'flag_LPIS_ever', 'latitude','longitude'] \nsumcols = ['collision_count', 'personsinjured', 'personskilled', 'pedestriansinjured'] \nallcols = lastcols + sumcols\nmethods = len(lastcols)*['last'] + len(allcols)*['sum']\naggdict = dict(zip(allcols, methods))\naggdict",
"execution_count": 28,
"outputs": [
{
"data": {
"text/plain": "{'intersection_id': 'last',\n 'flag_LPIS_ever': 'last',\n 'latitude': 'last',\n 'longitude': 'last',\n 'collision_count': 'sum',\n 'personsinjured': 'sum',\n 'personskilled': 'sum',\n 'pedestriansinjured': 'sum'}"
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "jh0 = jh.groupby('intersection_id')[allcols].agg(aggdict)\njh0.shape",
"execution_count": 32,
"outputs": [
{
"data": {
"text/plain": "(272, 8)"
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "jh0.head()",
"execution_count": 35,
"outputs": [
{
"data": {
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>intersection_id</th>\n <th>flag_LPIS_ever</th>\n <th>latitude</th>\n <th>longitude</th>\n <th>collision_count</th>\n <th>personsinjured</th>\n <th>personskilled</th>\n <th>pedestriansinjured</th>\n </tr>\n <tr>\n <th>intersection_id</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>54928</th>\n <td>54928</td>\n <td>0</td>\n <td>40.75</td>\n <td>-73.90</td>\n <td>0.00</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n </tr>\n <tr>\n <th>54929</th>\n <td>54929</td>\n <td>1</td>\n <td>40.75</td>\n <td>-73.90</td>\n <td>156.00</td>\n <td>49</td>\n <td>0</td>\n <td>3</td>\n </tr>\n <tr>\n <th>54930</th>\n <td>54930</td>\n <td>0</td>\n <td>40.75</td>\n <td>-73.90</td>\n <td>67.00</td>\n <td>18</td>\n <td>1</td>\n <td>4</td>\n </tr>\n <tr>\n <th>54931</th>\n <td>54931</td>\n <td>0</td>\n <td>40.75</td>\n <td>-73.90</td>\n <td>44.00</td>\n <td>14</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>54932</th>\n <td>54932</td>\n <td>0</td>\n <td>40.75</td>\n <td>-73.89</td>\n <td>34.00</td>\n <td>14</td>\n <td>0</td>\n <td>3</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " intersection_id flag_LPIS_ever latitude longitude \\\nintersection_id \n54928 54928 0 40.75 -73.90 \n54929 54929 1 40.75 -73.90 \n54930 54930 0 40.75 -73.90 \n54931 54931 0 40.75 -73.90 \n54932 54932 0 40.75 -73.89 \n\n collision_count personsinjured personskilled \\\nintersection_id \n54928 0.00 0 0 \n54929 156.00 49 0 \n54930 67.00 18 1 \n54931 44.00 14 0 \n54932 34.00 14 0 \n\n pedestriansinjured \nintersection_id \n54928 0 \n54929 3 \n54930 4 \n54931 1 \n54932 3 "
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "So we have a mix of LPIS and non-LPIS intersections. Clearly the LPIS intersections are ones that were/are more prone to accidents."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "(jh0.groupby('flag_LPIS_ever')[['intersection_id','personsinjured', 'personskilled']]\n .agg({'intersection_id': 'count', 'personsinjured' : 'mean', 'personskilled' : 'mean'}) )",
"execution_count": 50,
"outputs": [
{
"data": {
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>intersection_id</th>\n <th>personsinjured</th>\n <th>personskilled</th>\n </tr>\n <tr>\n <th>flag_LPIS_ever</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>189</td>\n <td>5.71</td>\n <td>0.04</td>\n </tr>\n <tr>\n <th>1</th>\n <td>83</td>\n <td>11.05</td>\n <td>0.06</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " intersection_id personsinjured personskilled\nflag_LPIS_ever \n0 189 5.71 0.04\n1 83 11.05 0.06"
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Let's look at the distribution of injuries and the intersections most prone to creating injuries (larger circles on the map)."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "plt.title('Total Persons injured over entire period')\njh0.personsinjured.hist(bins=[1,2,3,4,5,10, 15, 20, 30, 50]);",
"execution_count": 46,
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEICAYAAABPgw/pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAGZhJREFUeJzt3X+U3XV95/HniwRKzEB+ABlCEpmoKT8kJZpZSg+2Z4YfbqpW2C5YUbuhB009xyq4cW2qrVTPejZSAWm1203BJp4CAxulsFBFNjD1x5ZIAtiAgeWHgZCfoklkkFWD7/3j+xn4Ot65P2buzZ353NfjnDnz/fG59/P+fO/3vuabz/0RRQRmZjb5HdbuAszMrDkc6GZmmXCgm5llwoFuZpYJB7qZWSYc6GZmmXCgT1CSjpQUkua3u5ZWk3SPpD9odtvxknSypIOHoq92kvRJSZ9vdx2jkfSkpN8aw+065jk0TH4fev0kDZVWXwX8FHgprf9xRNxQ5bbLgM9HxOvq7OtI4EVgQUQ8W2H/fcAS4GBqNwh8ICL21nP/Vpukk4GHI2Jqu2tplkbPw8ms1nMoR75Cb0BEdA3/AM8Av1faNmqYt9B7Uy2nAMcDVzZ6B5KyCatqJB0madKd7+1+fNrZf7vHPhlNuhN8IpM0TdIXJO2S9Kykv5J0uKRjgFuB10gaSj/HSDpL0kZJByTtlHTNWE7iiHgO+CfgtFIdn5O0XdJuSX8j6dfSvmWSnpD0F5L2AP9d0vGSviZpv6QfSrqnNKbFkr6Z9v2bpN8t7RtI/dwl6XlJ35Z0Yto3RdLnJf0gje+7kk4a5bjdJ+k9afn9kjZI+uvU55OSzh2l7WpJ15X2/dIUSWr7KUkbgZ8AJ0iaLelL6bhsl3TFcNBLmirp2nQMngDOq3bcRzs2kvokPSNJpbYXS/pO6dj8haSnJD0n6QZJM8tjkPQ+SduBfx6l7/+Q+tyfaji1tG+3pA9Lejgd+xskHVHlPHz5OI7Wv6TfTufqfkkPSDqrynHZLemjkh6V9CNJa4bPvzpr/4ikR4Afl7a9KS1XfI6Vbv9xSXskPQu8p9rjl6WI8M8YfoBtwLkjtl0JfBM4FugG7gc+nvYtA54Y0f4M4N8BU4DXAk8A70/7jgQCmD9K//cB70nLc4BvAX+f1v8OWA/MBGYAdwFXlOo4CHwKOAKYBlwDXAtMTdt+p1TD08BK4HDg3wNDwMK0fwDYC7wx7V8PrE37zgf+FTia4sLh9cCcOsbyfuDnwH9Kx+XDwLZR2q4GrivtOxk4OKLtU8BJqb6pwFeBv6GYMpsLPAgsT+0vB7YAJwDHpWN6cJSaRz02gIDtwG+X2v8v4PK0vCqdJyek+1kL/ENpDAFcl2qcVqHvM4FdwNJ0jFYA/xeYmvbvBr5NcQ4eR3FeXVLlPHz5OFbqH+gBfgicmx7LtwA/AGaNcmx2p+M6fBzvB/68gdrvT7edVtr2pjqeYxcAO9IYuoAvU+U5lONP2wuYrD9UDvQdwNml9fOBR9PyrzyRKtznKuCmtFxPoL8A7AeeBdYBsylC62fAvFLbfmBrqY4XgMNL+68E/ifwmhF9nEcRWiptuxVYlZYHKOZjh/f9PvBQWn4L8AjFHy3VGPfIQH+4tG92Og4zK7StJ9A/Vlo/scLY/wj4alr+P6TgS+tvZ/RAr3VsPgv8bWkMLwJz0/r3gbNKt1tI8S8I8UqgnlDleP0DKcRK254GfjMt7wYuLO37a+Bzo52HVA70E0r7ryBdLJS2/QvwB6PUt3vEcfx94JEGan9XhfsbDvRqz7Ebgb8s7fsNOizQPUfVJOmf18dTnJzDngbmVbnNqcBVFFe40yjC+NsNdPvHEfGPI+7z1RRXjI+U/8VPcVU+bHdE/Ly0/mmKK/Z7Jf2cIoiuprhKeibSs2OUMe0uLf+E4soIiivhk4H/AcyTtB74aESUX1gezcj7JN3v/jpuO9L20vKJFH8of1A6NodRXMFCMd5y+/JjOVKtY3MjcJekDwEXAd+KiF3pPFkA/LOk8m0PA45Jy7+IiJ1V+j4ReIek/1LadgTVH5djq9zfSCP7PxG4WNJFpW2HUxyD0Yw8jsNt66m9fNuX1fEcOwHYMGJfR/EcepOkJ/ZuihN22KspriiguFIY6e+BB4DXRsTRFKGqCu0asYsivF8bETPTz4yIOKbU5pdqiYgDEXFZRJwI/Efgz9Mc6c40hrLymEYVhasj4g0UV0qnA5eNfVgVvUAxLTDs+EqllJa3U0yLzCodm6Mj4o1p/y6KsB02cuxlVY9NRDzAK9MU76II+OHzZPgqc2bp58goXgsZWXMl24FPjLj9qyLiKzVuV899V2qzneIKvtzf9Ii4psp9jDyOw38g6qm9Yo11PMcaefyy5EBvrpuAK9ILTXOAjwPDV9B7gDmSukrtjwIORMSQpNcD7xtvAenK+4vAtZKOVWGBpFFf4JP0dkkL0xXQAYq3Yr5EMVd5mKTL0wuG5wFvppieqUrSmZJ6VbzI+wLFNNBLNW7WqIeAfknzJM0C/rRa44j4PsU0zJWSjlLxzpdFwy+4AbcAH5Y0V9KxwEer3F09x+Ym4CMUr5OUA+vvgNWSFgBImiPp9+oeNawBPpiOryR1pcfwVTVvWfk8rGUdcJGkc9ILutPScqU/oMM+VDqOq4Cbm1A7VH+O3QK8V9Kvp/F9ooExZsGB3lyfAL5HMXf8EMX0yfBbCb8L3A48nV7dn03xgt97Vby//Qu8ctKP1+UUV0SbKAL6a0C19x2fQvE+9ueBbwCfjYj7IuL/AW8DLqS42ryaYt70yTpqmEnxYt9+ihcmn6aYy22mO4E7KI75fRTv9Knl4lTbo8CPKI55d9r3eYqgfgTYSBEQFdV5bG4EzqGYoz9Q2n4l8L+BeyQ9TzF3/0bqFBHfBj5EMZ21n+JFxXdR39V3pfOwVn9PUfzL7ZPAcxSP5WVUz48B4F7gcYoXmq9sQu1Q5TkWEbdS/MH4JsXje1ed95kNf7DIJhUVb/37bESMGrbWXpKGX5T9Vrtr6TS+QrdJQ9J0irfQfb/NpZhNSA50mxTSu3d2AndGxP3trsdsIvKUi5lZJnyFbmaWiUP6waJjjz02enp6qrZ54YUXmD59+qEpaALxuDuLx91ZxjvuzZs3PxcRx9VqVzPQVXyhUvntdK+heOvQl9L2HoqPwb8jIvZVu6+enh42bdpUtb/BwUH6+vpqlZUdj7uzeNydZbzjllTXp15rTrlExGMRsSQillB8oc5PSN9ZAWyIiEUUH7ddNeZqzcxs3BqdQz8HeDIinqb4Upx1afs6im86MzOzNmk00N9J8dFbgO6I2AWQfs9pZmFmZtaYut+2KOkIivcBvz4i9kjaHxEzS/v3RcSsCrdbQfGdx3R3dy8dGBio2s/Q0BBdXY18zUQePO7O4nF3lvGOu7+/f3NE9NZsWO/37FJMsXy9tP4Yr3y/81zgsVr3sXTp0qjl3nvvrdkmRx53Z/G4O8t4xw1sijpyupEpl4t5ZboFii/4WZ6WlwO3NXBfZmbWZHUFevpqy/P45a8AXQ2cJ+nxtG9188szM7N61fXBooj4Ca/8byrD235I8a4XMzObAPzRfzOzTPj/FC3pWXVn2/peu6zzPg5tZs3lK3Qzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTdQW6pJmS1kt6VNJWSb8labakuyU9nn7PanWxZmY2unqv0K8FvhYRJwOnA1uBVcCGiFgEbEjrZmbWJjUDXdLRwO8A1wNExM8iYj9wPrAuNVsHXNCqIs3MrDZFRPUG0hJgDfA9iqvzzcBlwI6ImFlqty8ifmXaRdIKYAVAd3f30oGBgar9DQ0N0dXV1eAwmmPLjgNt6Rdg4YwpbRt3O7Xz8W4nj7uzjHfc/f39myOit1a7egK9F7gPOCsiNkq6Fvgx8MF6Ar2st7c3Nm3aVLW/wcFB+vr6atXdEj2r7mxLvwBrl01v27jbqZ2Pdzt53J1lvOOWVFeg1zOH/izwbERsTOvrgTcCeyTNTZ3NBfaOtVgzMxu/moEeEbuB7ZJOSpvOoZh+uR1YnrYtB25rSYVmZlaXqXW2+yBwg6QjgKeAP6L4Y3CLpEuBZ4CLWlOimZnVo65Aj4iHgErzN+c0txwzMxsrf1LUzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTU+tpJGkb8DzwEnAwInolzQZuBnqAbcA7ImJfa8o0M7NaGrlC74+IJRHRm9ZXARsiYhGwIa2bmVmbjGfK5XxgXVpeB1ww/nLMzGys6g30AL4uabOkFWlbd0TsAki/57SiQDMzq48ionYj6YSI2ClpDnA38EHg9oiYWWqzLyJmVbjtCmAFQHd399KBgYGqfQ0NDdHV1dXYKJpky44DbekXoHsa7HmxPX0vnjejPR3T3se7nTzuzjLecff3928uTXePqq5A/6UbSH8JDAHvA/oiYpekucBgRJxU7ba9vb2xadOmqvc/ODhIX19fQzU1S8+qO9vSL8DKxQe5aktdr1E33bbVb21Lv9Dex7udPO7OMt5xS6or0GtOuUiaLumo4WXgzcDDwO3A8tRsOXDbmKs1M7Nxq+eSsBu4VdJw+xsj4muS7gdukXQp8AxwUevKNDOzWmoGekQ8BZxeYfsPgXNaUZSZmTXOnxQ1M8uEA93MLBMOdDOzTDjQzcwy4UA3M8uEA93MLBMOdDOzTDjQzcwy4UA3M8uEA93MLBMOdDOzTDjQzcwy4UA3M8uEA93MLBMOdDOzTDjQzcwy4UA3M8uEA93MLBMOdDOzTDjQzcwy4UA3M8uEA93MLBN1B7qkKZIelHRHWl8oaaOkxyXdLOmI1pVpZma1NHKFfhmwtbT+GeCaiFgE7AMubWZhZmbWmLoCXdJ84K3AdWldwNnA+tRkHXBBKwo0M7P6KCJqN5LWA/8NOAr4CHAJcF9EvC7tXwB8NSJOq3DbFcAKgO7u7qUDAwNV+xoaGqKrq6uxUTTJlh0H2tIvQPc02PNie/pePG9GezqmvY93O3ncnWW84+7v798cEb212k2t1UDS24C9EbFZUt/w5gpNK/5liIg1wBqA3t7e6Ovrq9TsZYODg9Rq0yqXrLqzLf0CrFx8kKu21Hw4WmLbu/va0i+09/FuJ4+7sxyqcdeTIGcBb5f0FuBI4Gjgc8BMSVMj4iAwH9jZujLNzKyWmnPoEfFnETE/InqAdwL3RMS7gXuBC1Oz5cBtLavSzMxqGs/70P8U+M+SngCOAa5vTklmZjYWDU3aRsQgMJiWnwLOaH5JZmY2Fv6kqJlZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJmoGuqQjJX1H0nclPSLpk2n7QkkbJT0u6WZJR7S+XDMzG009V+g/Bc6OiNOBJcAySWcCnwGuiYhFwD7g0taVaWZmtdQM9CgMpdXD008AZwPr0/Z1wAUtqdDMzOqiiKjdSJoCbAZeB3wB+Cvgvoh4Xdq/APhqRJxW4bYrgBUA3d3dSwcGBqr2NTQ0RFdXV4PDaI4tOw60pV+A7mmw58X29L143oz2dEx7H+928rg7y3jH3d/fvzkiemu1m1rPnUXES8ASSTOBW4FTKjUb5bZrgDUAvb290dfXV7WvwcFBarVplUtW3dmWfgFWLj7IVVvqejiabtu7+9rSL7T38W4nj7uzHKpxN/Qul4jYDwwCZwIzJQ0n0HxgZ3NLMzOzRtTzLpfj0pU5kqYB5wJbgXuBC1Oz5cBtrSrSzMxqq+ff+HOBdWke/TDgloi4Q9L3gAFJ/xV4ELi+hXWamVkNNQM9Iv4NeEOF7U8BZ7SiKDMza5w/KWpmlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJqbWaiBpAfAl4HjgF8CaiLhW0mzgZqAH2Aa8IyL2ta7UxvSsunPUfdtWv/UQVjLxVTtWrbZ22fS29W2Wm3qu0A8CKyPiFOBM4AOSTgVWARsiYhGwIa2bmVmb1Az0iNgVEQ+k5eeBrcA84HxgXWq2DrigVUWamVltioj6G0s9wDeA04BnImJmad++iJhV4TYrgBUA3d3dSwcGBqr2MTQ0RFdXV901jWbLjgOj7ls8b0bDt2m17mmw58W2dd82C2dMacrjPdk06zyfbDzusenv798cEb212tUd6JK6gH8BPh0RX5G0v55AL+vt7Y1NmzZV7WdwcJC+vr66aqpmLHPo7ZxLXrn4IFdtqfmSRnbWLpvelMd7smnWeT7ZeNxjI6muQK/rXS6SDge+DNwQEV9Jm/dImpv2zwX2jrVYMzMbv5qBLknA9cDWiLi6tOt2YHlaXg7c1vzyzMysXvX8G/8s4A+BLZIeSts+BqwGbpF0KfAMcFFrSjQzs3rUDPSI+BagUXaf09xyzMxsrPxJUTOzTDjQzcwy4UA3M8uEA93MLBMOdDOzTDjQzcwy4UA3M8uEA93MLBMOdDOzTEz6r/dr5zckmplNJL5CNzPLhAPdzCwTDnQzs0w40M3MMuFANzPLxKR/l8tY+J0xE8eWHQe4pAMfj7XLpre7BMuQr9DNzDLhQDczy4QD3cwsEw50M7NMONDNzDJRM9AlfVHSXkkPl7bNlnS3pMfT71mtLdPMzGqp5wp9LbBsxLZVwIaIWARsSOtmZtZGNQM9Ir4B/GjE5vOBdWl5HXBBk+syM7MGKSJqN5J6gDsi4rS0vj8iZpb274uIitMuklYAKwC6u7uXDgwMVO1raGiIrq6uX9m+ZceBmnVOZt3TYM+L7a7i0OvUcS+cMaXieZ670Z7fuRvvuPv7+zdHRG+tdi3/pGhErAHWAPT29kZfX1/V9oODg1Rqk/unCVcuPshVWzrvg7udOu61y6ZXPM9zN9rzO3eHatxjfZfLHklzAdLvvc0ryczMxmKsgX47sDwtLwdua045ZmY2VvW8bfEm4F+BkyQ9K+lSYDVwnqTHgfPSupmZtVHNycuIuHiUXec0uRYzMxsHf1LUzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLROf977xmE8CWHQey/4/PK1m5+GBHjnvtsumHpB9foZuZZcKBbmaWCQe6mVkmHOhmZplwoJuZZWJcgS5pmaTHJD0haVWzijIzs8aNOdAlTQG+APwucCpwsaRTm1WYmZk1ZjxX6GcAT0TEUxHxM2AAOL85ZZmZWaMUEWO7oXQhsCwi3pvW/xD4zYj4kxHtVgAr0upJwGM17vpY4LkxFTW5edydxePuLOMd94kRcVytRuP5pKgqbPuVvw4RsQZYU/edSpsionccdU1KHndn8bg7y6Ea93imXJ4FFpTW5wM7x1eOmZmN1XgC/X5gkaSFko4A3gnc3pyyzMysUWOecomIg5L+BLgLmAJ8MSIeaUJNdU/PZMbj7iwed2c5JOMe84uiZmY2sfiTomZmmXCgm5llYsIEeid9jYCkL0raK+nh0rbZku6W9Hj6PaudNTabpAWS7pW0VdIjki5L27MeN4CkIyV9R9J309g/mbYvlLQxjf3m9OaCrEiaIulBSXek9ezHDCBpm6Qtkh6StClta/m5PiECvQO/RmAtsGzEtlXAhohYBGxI6zk5CKyMiFOAM4EPpMc493ED/BQ4OyJOB5YAyySdCXwGuCaNfR9waRtrbJXLgK2l9U4Y87D+iFhSev95y8/1CRHodNjXCETEN4Afjdh8PrAuLa8DLjikRbVYROyKiAfS8vMUT/J5ZD5ugCgMpdXD008AZwPr0/bsxi5pPvBW4Lq0LjIfcw0tP9cnSqDPA7aX1p9N2zpJd0TsgiL8gDltrqdlJPUAbwA20iHjTlMPDwF7gbuBJ4H9EXEwNcnxnP8c8FHgF2n9GPIf87AAvi5pc/r6EzgE5/pE+U+i6/oaAZv8JHUBXwYuj4gfFxdt+YuIl4AlkmYCtwKnVGp2aKtqHUlvA/ZGxGZJfcObKzTNZswjnBUROyXNAe6W9Oih6HSiXKH7awRgj6S5AOn33jbX03SSDqcI8xsi4itpc/bjLouI/cAgxesIMyUNX1Tlds6fBbxd0jaKKdSzKa7Ycx7zyyJiZ/q9l+IP+BkcgnN9ogS6v0agGO/ytLwcuK2NtTRdmj+9HtgaEVeXdmU9bgBJx6UrcyRNA86leA3hXuDC1CyrsUfEn0XE/IjooXg+3xMR7ybjMQ+TNF3SUcPLwJuBhzkE5/qE+aSopLdQ/AUf/hqBT7e5pJaRdBPQR/GVmnuAK4B/Am4BXg08A1wUESNfOJ20JL0J+CawhVfmVD9GMY+e7bgBJP0GxYtgUyguom6JiE9Jeg3F1ets4EHgPRHx0/ZV2hppyuUjEfG2ThhzGuOtaXUqcGNEfFrSMbT4XJ8wgW5mZuMzUaZczMxsnBzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXi/wOqP+a4tNslZwAAAABJRU5ErkJggg==\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "m = folium.Map(location=[40.75, -73.88], zoom_start =15, tiles='OpenStreetMap')\n\nfor idx, row in jh0.iterrows():\n if (row.flag_LPIS_ever == 1):\n folium.Circle(location=[row.latitude, row.longitude],\n popup=f'LPIS {row.intersection_id}',\n radius = 10 + row.personsinjured*3\n ).add_to(m)\n else:\n folium.Circle(location=[row.latitude, row.longitude],\n popup=f'{row.intersection_id}',\n radius = 10 + row.personsinjured*3,\n color = 'grey',\n ).add_to(m)\nm",
"execution_count": 95,
"outputs": [
{
"data": {
"text/html": "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgPHN0eWxlPiNtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgdG9wOiAwLjAlOwogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyIiA+PC9kaXY+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMiA9IEwubWFwKAogICAgICAgICdtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjInLCB7CiAgICAgICAgY2VudGVyOiBbNDAuNzUsIC03My44OF0sCiAgICAgICAgem9vbTogMTUsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwoKICAgIAogICAgCiAgICB2YXIgdGlsZV9sYXllcl9jZWQ1MTNiNGYxMTg0MDg2OTk4YmZlZjcwZTdiZWYwYyA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIKfSkuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV80Y2Y0ZDQ1YTE0NGE0OGJlOWY5MWVlMzY1ZDMwMDE2YyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDIxNjk5OTg0MTMyNiwgLTczLjg5ODE4MTAwMTI3NTE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc5Y2NhMTBjYzY1MTQ0Y2RiYzUzYmJiN2E2Zjc5MDkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDllOWQ4NTEwNGViNDA4OTlmYTFlNTgxODdjNDI2ZmQgPSAkKCc8ZGl2IGlkPSJodG1sX2Q5ZTlkODUxMDRlYjQwODk5ZmExZTU4MTg3YzQyNmZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41NDkyOC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83OWNjYTEwY2M2NTE0NGNkYmM1M2JiYjdhNmY3OTA5Mi5zZXRDb250ZW50KGh0bWxfZDllOWQ4NTEwNGViNDA4OTlmYTFlNTgxODdjNDI2ZmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV80Y2Y0ZDQ1YTE0NGE0OGJlOWY5MWVlMzY1ZDMwMDE2Yy5iaW5kUG9wdXAocG9wdXBfNzljY2ExMGNjNjUxNDRjZGJjNTNiYmI3YTZmNzkwOTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzcwZDM5ZDdkYTc1YjQzYzFhZWJhMzg3OTk4MmE2MGJkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU0MjgwOTk5OTA3OTA1LCAtNzMuODk3NTAxMDAyMDQyOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNTcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwMjdiYzkyMjBmOTRkZjdhMzkxOTM0NTY5OTdkNzBmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTA5NzBhMzk3ZTNhNDljZGE4ODU5YjRiODE5MTMwODAgPSAkKCc8ZGl2IGlkPSJodG1sXzUwOTcwYTM5N2UzYTQ5Y2RhODg1OWI0YjgxOTEzMDgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTI5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcwMjdiYzkyMjBmOTRkZjdhMzkxOTM0NTY5OTdkNzBmLnNldENvbnRlbnQoaHRtbF81MDk3MGEzOTdlM2E0OWNkYTg4NTliNGI4MTkxMzA4MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzcwZDM5ZDdkYTc1YjQzYzFhZWJhMzg3OTk4MmE2MGJkLmJpbmRQb3B1cChwb3B1cF83MDI3YmM5MjIwZjk0ZGY3YTM5MTkzNDU2OTk3ZDcwZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDZiOWY2MDM2ZTcyNDQyMWExOGE0ODlhMzBiODYzODQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQzODg5OTk5ODg4LCAtNzMuODk2NTIyMDAyOTA2MjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2NC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmI3NjdjZGFkOWNhNGQ3YzhlNjVkMzRiMzMxNDNhNWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NGMxMDY0YTBmZDc0OThhOWIxYTZiYzRmOWUyMDYwYSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjRjMTA2NGEwZmQ3NDk4YTliMWE2YmM0ZjllMjA2MGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU0OTMwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJiNzY3Y2RhZDljYTRkN2M4ZTY1ZDM0YjMzMTQzYTVlLnNldENvbnRlbnQoaHRtbF82NGMxMDY0YTBmZDc0OThhOWIxYTZiYzRmOWUyMDYwYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Q2YjlmNjAzNmU3MjQ0MjFhMThhNDg5YTMwYjg2Mzg0LmJpbmRQb3B1cChwb3B1cF8yYjc2N2NkYWQ5Y2E0ZDdjOGU2NWQzNGIzMzE0M2E1ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDI5ZWY4ZjM5NmNiNGVlZTkyYjQ5MzQ5YjBjMzY2MmMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ0ODQ5OTk3Mzg2NjUsIC03My44OTU1OTAwMDMwMTcyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUyLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MWNjNGNmNTJlMmQ0NjgyYjVhMjI5M2E5ZDU2NjhjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxMGM4MTk4NWMzODQyZTA5NTM0YmI5NGE2NTNjOTJjID0gJCgnPGRpdiBpZD0iaHRtbF8zMTBjODE5ODVjMzg0MmUwOTUzNGJiOTRhNjUzYzkyYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTQ5MzEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODFjYzRjZjUyZTJkNDY4MmI1YTIyOTNhOWQ1NjY4Yzkuc2V0Q29udGVudChodG1sXzMxMGM4MTk4NWMzODQyZTA5NTM0YmI5NGE2NTNjOTJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZDI5ZWY4ZjM5NmNiNGVlZTkyYjQ5MzQ5YjBjMzY2MmMuYmluZFBvcHVwKHBvcHVwXzgxY2M0Y2Y1MmUyZDQ2ODJiNWEyMjkzYTlkNTY2OGM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV84ZDM5ZTY5ZTVkMmQ0NDI2ODcyNjI4ZTc4YTIxMjE0NyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDU4Mjk5OTcyODEyLCAtNzMuODk0NjYxMDAwMjk1OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Mi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjk3NTVhMjE1YTg5NDBlZDliYTc2NDc4ODhmMTAxMDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNGRhODIyZjVhYTQ0NzRlOWYzMzg2YWVhMWY2OGNjOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzRkYTgyMmY1YWE0NDc0ZTlmMzM4NmFlYTFmNjhjYzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU0OTMyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y5NzU1YTIxNWE4OTQwZWQ5YmE3NjQ3ODg4ZjEwMTA1LnNldENvbnRlbnQoaHRtbF8zNGRhODIyZjVhYTQ0NzRlOWYzMzg2YWVhMWY2OGNjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzhkMzllNjllNWQyZDQ0MjY4NzI2MjhlNzhhMjEyMTQ3LmJpbmRQb3B1cChwb3B1cF9mOTc1NWEyMTVhODk0MGVkOWJhNzY0Nzg4OGYxMDEwNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMWE4YmQ2NWM4MzZiNGExNGFlM2U0OWI3M2U0NjlhYWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ2ODA5OTk4MzkyNDUsIC03My44OTM3MzQwMDE2NjM4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDU1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZmMzMmJiZWYzYmI0Nzc1OTM2MGY3YjlmNGFhZGM3MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlhYzA5ZTI5NDRkYjQ4ODk4YmNkZDA2ZDM4NmViMDE3ID0gJCgnPGRpdiBpZD0iaHRtbF85YWMwOWUyOTQ0ZGI0ODg5OGJjZGQwNmQzODZlYjAxNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDkzMy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZmMzMmJiZWYzYmI0Nzc1OTM2MGY3YjlmNGFhZGM3MC5zZXRDb250ZW50KGh0bWxfOWFjMDllMjk0NGRiNDg4OThiY2RkMDZkMzg2ZWIwMTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xYThiZDY1YzgzNmI0YTE0YWUzZTQ5YjczZTQ2OWFhYy5iaW5kUG9wdXAocG9wdXBfMWZjMzJiYmVmM2JiNDc3NTkzNjBmN2I5ZjRhYWRjNzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2FjZWIzNGQwOGU0NTQxZDdiM2YwZGM0MmFlMWI2OWIzID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU0Nzc3OTk5ODM2MzM1LCAtNzMuODkyODAzMDAyNjYzNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0OS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWFkZDRjNDRiNjU0NDQ4ZDlhZjZjMzQ1ZmEwZTY0NDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOTA4MDIwZDE4MTA0MDQ0OWU2NjVjY2NiY2NmMDgxMSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjkwODAyMGQxODEwNDA0NDllNjY1Y2NjYmNjZjA4MTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5MzQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWFkZDRjNDRiNjU0NDQ4ZDlhZjZjMzQ1ZmEwZTY0NDYuc2V0Q29udGVudChodG1sXzI5MDgwMjBkMTgxMDQwNDQ5ZTY2NWNjY2JjY2YwODExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYWNlYjM0ZDA4ZTQ1NDFkN2IzZjBkYzQyYWUxYjY5YjMuYmluZFBvcHVwKHBvcHVwX2FhZGQ0YzQ0YjY1NDQ0OGQ5YWY2YzM0NWZhMGU2NDQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9lMzQ3ZWFjOGU1NjE0NDk4YmFkNzRlYmI4ZDAzNjljOCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDg3Mjk5OTgzNTU0LCAtNzMuODkxODgxMDAyNDg0ODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODE4NDNjMDc3YTA1NGY4NjhiZWQzOTg0ZDRiNmM4MzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MjU4MDQ3M2E1Yjc0ODM5YjVjYTMyYjYxYTFjMWQyMSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzI1ODA0NzNhNWI3NDgzOWI1Y2EzMmI2MWExYzFkMjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5MzUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODE4NDNjMDc3YTA1NGY4NjhiZWQzOTg0ZDRiNmM4Mzkuc2V0Q29udGVudChodG1sXzcyNTgwNDczYTViNzQ4MzliNWNhMzJiNjFhMWMxZDIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZTM0N2VhYzhlNTYxNDQ5OGJhZDc0ZWJiOGQwMzY5YzguYmluZFBvcHVwKHBvcHVwXzgxODQzYzA3N2EwNTRmODY4YmVkMzk4NGQ0YjZjODM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xZjIxMjI1ZjQyOWI0NGMyOTAwMjRlOTFjZTAyOTdjOSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDk3Mzk5OTkwMzI2LCAtNzMuODkwOTQ4MDAyNzMzNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmIwM2RiYWYxNWUxNDUzM2FmZDM4YmMyZmE2NTc1ZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xN2JhN2YzYjlkMDM0ODM4OWI0MmZhNGM1NDNmMmNjZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTdiYTdmM2I5ZDAzNDgzODliNDJmYTRjNTQzZjJjY2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5MzYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmIwM2RiYWYxNWUxNDUzM2FmZDM4YmMyZmE2NTc1ZTQuc2V0Q29udGVudChodG1sXzE3YmE3ZjNiOWQwMzQ4Mzg5YjQyZmE0YzU0M2YyY2NmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMWYyMTIyNWY0MjliNDRjMjkwMDI0ZTkxY2UwMjk3YzkuYmluZFBvcHVwKHBvcHVwXzZiMDNkYmFmMTVlMTQ1MzNhZmQzOGJjMmZhNjU3NWU0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mOTM2MWU1NTIwOGQ0N2I0OTlmYzgyZjYxOGI2ZWNlZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTA3MDk5OTkxNzQxNSwgLTczLjg5MDAxMzAwMzUwODM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E0MjBhZmRkMGNlNjRlOTI5ZTJkODU4NzY4MGVhMTUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDUzYjJlZGI2ZjdiNDg2NjgwNGM4YjVlOGYxODI4NzYgPSAkKCc8ZGl2IGlkPSJodG1sXzA1M2IyZWRiNmY3YjQ4NjY4MDRjOGI1ZThmMTgyODc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTM3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E0MjBhZmRkMGNlNjRlOTI5ZTJkODU4NzY4MGVhMTUzLnNldENvbnRlbnQoaHRtbF8wNTNiMmVkYjZmN2I0ODY2ODA0YzhiNWU4ZjE4Mjg3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Y5MzYxZTU1MjA4ZDQ3YjQ5OWZjODJmNjE4YjZlY2VlLmJpbmRQb3B1cChwb3B1cF9hNDIwYWZkZDBjZTY0ZTkyOWUyZDg1ODc2ODBlYTE1MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMzFhMzRmZGJkNzRkNGIzMDk0YzM3Y2FiNjIwNTMyMDQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTUxNjk5OTk4NzM2NywgLTczLjg4OTA4ODAwMzU4OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QxZmIxNDcyMjY0ZDRkNjU5YzM1NTdjYTZkZjdmODllID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWVmMmFkNWI0MjYwNGM4MmE1OTA2N2NlZmJiOTk3MWIgPSAkKCc8ZGl2IGlkPSJodG1sX2FlZjJhZDViNDI2MDRjODJhNTkwNjdjZWZiYjk5NzFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTM4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QxZmIxNDcyMjY0ZDRkNjU5YzM1NTdjYTZkZjdmODllLnNldENvbnRlbnQoaHRtbF9hZWYyYWQ1YjQyNjA0YzgyYTU5MDY3Y2VmYmI5OTcxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzMxYTM0ZmRiZDc0ZDRiMzA5NGMzN2NhYjYyMDUzMjA0LmJpbmRQb3B1cChwb3B1cF9kMWZiMTQ3MjI2NGQ0ZDY1OWMzNTU3Y2E2ZGY3Zjg5ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMTkwYjc4OTZhYjZkNGQxODhkOTM0NjRiMGQ3ZmIzNzggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTUyNjU5OTk3NDMzLCAtNzMuODg4MTU3MDAzNDM2MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0Ni4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDc2MzlhMDUzMGZhNDY2NzgyMDgxN2Q2NDA2ZDUyZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMzNkNDk0M2Q4OWY0YTIxODkzOTgzNjEwMTg2YzRhYyA9ICQoJzxkaXYgaWQ9Imh0bWxfMTMzZDQ5NDNkODlmNGEyMTg5Mzk4MzYxMDE4NmM0YWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5MzkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDc2MzlhMDUzMGZhNDY2NzgyMDgxN2Q2NDA2ZDUyZGIuc2V0Q29udGVudChodG1sXzEzM2Q0OTQzZDg5ZjRhMjE4OTM5ODM2MTAxODZjNGFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMTkwYjc4OTZhYjZkNGQxODhkOTM0NjRiMGQ3ZmIzNzguYmluZFBvcHVwKHBvcHVwXzQ3NjM5YTA1MzBmYTQ2Njc4MjA4MTdkNjQwNmQ1MmRiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hZDJmMWU4YTNjMTg0ZTM3Yjg5MWVlMjhmYTIxNzk3ZCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTM2Mjk5OTk5NjcyLCAtNzMuODg3MjI4MDAyMTM4NDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0Ni4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWM3ZjlkZTE0NjljNGY3YjhkNGEyZDJiMzY5ZjQ5Y2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84M2JlYTkyYTdmNWI0ZTIwYWM2YTc0YjA1ZWMyMzc0NyA9ICQoJzxkaXYgaWQ9Imh0bWxfODNiZWE5MmE3ZjViNGUyMGFjNmE3NGIwNWVjMjM3NDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWM3ZjlkZTE0NjljNGY3YjhkNGEyZDJiMzY5ZjQ5Y2Iuc2V0Q29udGVudChodG1sXzgzYmVhOTJhN2Y1YjRlMjBhYzZhNzRiMDVlYzIzNzQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYWQyZjFlOGEzYzE4NGUzN2I4OTFlZTI4ZmEyMTc5N2QuYmluZFBvcHVwKHBvcHVwXzljN2Y5ZGUxNDY5YzRmN2I4ZDRhMmQyYjM2OWY0OWNiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8zMmY2Zjg5NGJmMjc0NzlhOGY2M2Q4MmY4YmNjOTgwYyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTQ1OTk5OTczMzE1LCAtNzMuODg2Mjk4MDAxOTEzMTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2NC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWRkYjFkMTgzZDM2NDFiNGFmZjEzYzBkNzFjOTAzNDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MzBjMTUxZjQyZDQ0N2RjYWZkNWU1OTEwOWRlYjMyYiA9ICQoJzxkaXYgaWQ9Imh0bWxfOTMwYzE1MWY0MmQ0NDdkY2FmZDVlNTkxMDlkZWIzMmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWRkYjFkMTgzZDM2NDFiNGFmZjEzYzBkNzFjOTAzNDYuc2V0Q29udGVudChodG1sXzkzMGMxNTFmNDJkNDQ3ZGNhZmQ1ZTU5MTA5ZGViMzJiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMzJmNmY4OTRiZjI3NDc5YThmNjNkODJmOGJjYzk4MGMuYmluZFBvcHVwKHBvcHVwXzVkZGIxZDE4M2QzNjQxYjRhZmYxM2MwZDcxYzkwMzQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83NGVhMGU0NDE1YWE0MjZiYmNiYjFhYTkyZjJhZGQ2MyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTU1Njk5OTc1MTc3LCAtNzMuODg1MzY3MDAyNzU0MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3OS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODkyOWRlZmQ4NzRmNGNmMjlmYTkzZjg2MTI3N2FhMWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNjhmNjBjYzVmNzc0MWFkYjE1NzJjNWZmNDE3ZWI1MyA9ICQoJzxkaXYgaWQ9Imh0bWxfYjY4ZjYwY2M1Zjc3NDFhZGIxNTcyYzVmZjQxN2ViNTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODkyOWRlZmQ4NzRmNGNmMjlmYTkzZjg2MTI3N2FhMWEuc2V0Q29udGVudChodG1sX2I2OGY2MGNjNWY3NzQxYWRiMTU3MmM1ZmY0MTdlYjUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNzRlYTBlNDQxNWFhNDI2YmJjYmIxYWE5MmYyYWRkNjMuYmluZFBvcHVwKHBvcHVwXzg5MjlkZWZkODc0ZjRjZjI5ZmE5M2Y4NjEyNzdhYTFhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV80ZTIyMGMyOWU1Mzk0ZTRhYjBhMzIxN2UyNDg4ZWY3MCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTY1Njk5OTkzMTE5LCAtNzMuODg0NDM5MDAyMzUzMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzMS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2VjMDNmZDIyMDJiNDNlMmFmOTkwMjk5OWYzMDNjMzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYmNhZDQxOTE4OTM0Mjc4YTkyNWRkYmExYjRjNjE4ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWJjYWQ0MTkxODkzNDI3OGE5MjVkZGJhMWI0YzYxOGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2VjMDNmZDIyMDJiNDNlMmFmOTkwMjk5OWYzMDNjMzAuc2V0Q29udGVudChodG1sXzFiY2FkNDE5MTg5MzQyNzhhOTI1ZGRiYTFiNGM2MThlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNGUyMjBjMjllNTM5NGU0YWIwYTMyMTdlMjQ4OGVmNzAuYmluZFBvcHVwKHBvcHVwX2NlYzAzZmQyMjAyYjQzZTJhZjk5MDI5OTlmMzAzYzMwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mZDgyOTJiMTc4Y2E0NmI5YjU0OWQ5ZmVhMTQ3YzBhMyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTc1NDk5OTc0ODE0LCAtNzMuODgzNTA3MDAzMzUzODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2MS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGQ4ODlmYjY5MjQzNGM4ZmI4OGFhNWI5ZDVmNWFiNTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNDExYzAxODZhZjY0MjlhYmY5NTVmMWM4NTk5Mjk3MCA9ICQoJzxkaXYgaWQ9Imh0bWxfMzQxMWMwMTg2YWY2NDI5YWJmOTU1ZjFjODU5OTI5NzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGQ4ODlmYjY5MjQzNGM4ZmI4OGFhNWI5ZDVmNWFiNTcuc2V0Q29udGVudChodG1sXzM0MTFjMDE4NmFmNjQyOWFiZjk1NWYxYzg1OTkyOTcwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZmQ4MjkyYjE3OGNhNDZiOWI1NDlkOWZlYTE0N2MwYTMuYmluZFBvcHVwKHBvcHVwXzBkODg5ZmI2OTI0MzRjOGZiODhhYTViOWQ1ZjVhYjU3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hZDk0YzA3YTA3ZWQ0YjlkYmRlMmI0ZTg2ZDllOWUyMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTg1Mzk5OTg1NjAzLCAtNzMuODgyNTc5MDAyNzQ4MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1OC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGRiYzFjYjEzYjk5NDYyYzhhNDBjNGMwYzYwNzdmMWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wN2ZlYjRiNGU3NTQ0N2RlYWQwNmQ1Nzc5MDQ4M2MzOCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDdmZWI0YjRlNzU0NDdkZWFkMDZkNTc3OTA0ODNjMzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGRiYzFjYjEzYjk5NDYyYzhhNDBjNGMwYzYwNzdmMWYuc2V0Q29udGVudChodG1sXzA3ZmViNGI0ZTc1NDQ3ZGVhZDA2ZDU3NzkwNDgzYzM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYWQ5NGMwN2EwN2VkNGI5ZGJkZTJiNGU4NmQ5ZTllMjIuYmluZFBvcHVwKHBvcHVwXzhkYmMxY2IxM2I5OTQ2MmM4YTQwYzRjMGM2MDc3ZjFmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8wZWFlMjhiMjUwN2M0MDA2OTQ0OTQzNWM0MzVjZGZkZiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTk1MTk5OTkyNTEyNCwgLTczLjg4MTY0ODAwMTY2NjEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogODUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4NGRiNTk5ZWJkMDQ3ZjU5M2FkZTFkNWYzZTI0ZDhlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQzNGU2YjRhZTc3NDk0NGJjN2RjMjI2MWQwOWU5NTAgPSAkKCc8ZGl2IGlkPSJodG1sXzU0MzRlNmI0YWU3NzQ5NDRiYzdkYzIyNjFkMDllOTUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQ2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4NGRiNTk5ZWJkMDQ3ZjU5M2FkZTFkNWYzZTI0ZDhlLnNldENvbnRlbnQoaHRtbF81NDM0ZTZiNGFlNzc0OTQ0YmM3ZGMyMjYxZDA5ZTk1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzBlYWUyOGIyNTA3YzQwMDY5NDQ5NDM1YzQzNWNkZmRmLmJpbmRQb3B1cChwb3B1cF83ODRkYjU5OWViZDA0N2Y1OTNhZGUxZDVmM2UyNGQ4ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMjM1YmM0NjQzYjQ1NGU5OTk0MDg5YWVlNjhkNDZmMDIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTYwNDg5OTk4NDgwNTUsIC03My44ODA3MTkwMDI4ODkwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDc2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNTRlNjg1ZjNiZTQ0NmM4OGE4ODliMmJmNDE0NWRkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NhNDFhNmU0YmU5YzRlOGFhZTljNWQyYTlhODk5ZWJmID0gJCgnPGRpdiBpZD0iaHRtbF9jYTQxYTZlNGJlOWM0ZThhYWU5YzVkMmE5YTg5OWViZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDk0Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNTRlNjg1ZjNiZTQ0NmM4OGE4ODliMmJmNDE0NWRkMy5zZXRDb250ZW50KGh0bWxfY2E0MWE2ZTRiZTljNGU4YWFlOWM1ZDJhOWE4OTllYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yMzViYzQ2NDNiNDU0ZTk5OTQwODlhZWU2OGQ0NmYwMi5iaW5kUG9wdXAocG9wdXBfZDU0ZTY4NWYzYmU0NDZjODhhODg5YjJiZjQxNDVkZDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzI5NTA2MTRjMWQyMjQyZjRhMzc5NzgyNzhlM2YzZDQzID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2MTQ2OTk5OTMwOTQsIC03My44Nzk3ODkwMDMzNjczNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yODc1NjZjYTVjNmY0ZDQxYjU2OWI0YzIwY2IyOGQ1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NiNzYwN2ViZTFhMTRlZTFhNTRiMDA5MmJhN2QzMzU1ID0gJCgnPGRpdiBpZD0iaHRtbF9jYjc2MDdlYmUxYTE0ZWUxYTU0YjAwOTJiYTdkMzM1NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDk0OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yODc1NjZjYTVjNmY0ZDQxYjU2OWI0YzIwY2IyOGQ1MC5zZXRDb250ZW50KGh0bWxfY2I3NjA3ZWJlMWExNGVlMWE1NGIwMDkyYmE3ZDMzNTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yOTUwNjE0YzFkMjI0MmY0YTM3OTc4Mjc4ZTNmM2Q0My5iaW5kUG9wdXAocG9wdXBfMjg3NTY2Y2E1YzZmNGQ0MWI1NjliNGMyMGNiMjhkNTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzMxYmU4YjIxMjY2NjQ4NzNhNzMzZDYwZjUyYTUyNTNjID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2MjQwOTk5OTAxMTk1LCAtNzMuODc4ODYxMDAwODE0NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1NS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmUyYThjMDhhNjRkNGYxNGJmZDA2YjZkOTExNWQwYzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOTU1Mzg0ZGZjNGI0MTBjODUyOTBhMDQwYzIzYjc2NCA9ICQoJzxkaXYgaWQ9Imh0bWxfMjk1NTM4NGRmYzRiNDEwYzg1MjkwYTA0MGMyM2I3NjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmUyYThjMDhhNjRkNGYxNGJmZDA2YjZkOTExNWQwYzguc2V0Q29udGVudChodG1sXzI5NTUzODRkZmM0YjQxMGM4NTI5MGEwNDBjMjNiNzY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMzFiZThiMjEyNjY2NDg3M2E3MzNkNjBmNTJhNTI1M2MuYmluZFBvcHVwKHBvcHVwX2ZlMmE4YzA4YTY0ZDRmMTRiZmQwNmI2ZDkxMTVkMGM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8zODZjODMyZGYyYzI0OTc1OWNiOTU4NjY1ZWE3YjU1OCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NjQzODk5OTgwOTY1LCAtNzMuODc2OTk4MDAyOTg5MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Mi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjMyZjBlZTMyMzNiNGE5MTgyOTA4NDhiYjA4OTg4Y2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNTIxYWE0ODIwNTE0NWUwODNhOTc0ZjkwZjE0MTBlOSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTUyMWFhNDgyMDUxNDVlMDgzYTk3NGY5MGYxNDEwZTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NTEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjMyZjBlZTMyMzNiNGE5MTgyOTA4NDhiYjA4OTg4Y2Uuc2V0Q29udGVudChodG1sX2E1MjFhYTQ4MjA1MTQ1ZTA4M2E5NzRmOTBmMTQxMGU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMzg2YzgzMmRmMmMyNDk3NTljYjk1ODY2NWVhN2I1NTguYmluZFBvcHVwKHBvcHVwX2YzMmYwZWUzMjMzYjRhOTE4MjkwODQ4YmIwODk4OGNlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9lYzQwM2YxYTg3YmE0MzFmYTNkNTY0ZmRhYzEwMzIwMCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NjUzNTk5OTg2MjA4LCAtNzMuODc2MDY4MDAxNTcyNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3My4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGUwNDZiOWU0Zjg3NDFlZmE5MzVkMzQ2MmQyNmU0YzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YjU3Yjg4NjBlODQ0Nzk1OGQ0ZGQ0MTZlYzdmOGI1OSA9ICQoJzxkaXYgaWQ9Imh0bWxfOWI1N2I4ODYwZTg0NDc5NThkNGRkNDE2ZWM3ZjhiNTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU0OTUyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RlMDQ2YjllNGY4NzQxZWZhOTM1ZDM0NjJkMjZlNGM3LnNldENvbnRlbnQoaHRtbF85YjU3Yjg4NjBlODQ0Nzk1OGQ0ZGQ0MTZlYzdmOGI1OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2VjNDAzZjFhODdiYTQzMWZhM2Q1NjRmZGFjMTAzMjAwLmJpbmRQb3B1cChwb3B1cF9kZTA0NmI5ZTRmODc0MWVmYTkzNWQzNDYyZDI2ZTRjNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfY2VjNDMzN2JlYzViNDcwMGE3OWEzMjFiMzI2YWIwMzggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTY2MzM5OTk5OTM1NzUsIC03My44NzUxMzkwMDI2MTU0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDY3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zN2ZlMTJhM2Y4YjY0YjM4ODM2YzU1OWI4YjNiMGYwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkNDNkMTUwZGE3NjQxYTRhZmNiNjRjMjZhNjc3ZDQ0ID0gJCgnPGRpdiBpZD0iaHRtbF82ZDQzZDE1MGRhNzY0MWE0YWZjYjY0YzI2YTY3N2Q0NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDk1My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zN2ZlMTJhM2Y4YjY0YjM4ODM2YzU1OWI4YjNiMGYwMS5zZXRDb250ZW50KGh0bWxfNmQ0M2QxNTBkYTc2NDFhNGFmY2I2NGMyNmE2NzdkNDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9jZWM0MzM3YmVjNWI0NzAwYTc5YTMyMWIzMjZhYjAzOC5iaW5kUG9wdXAocG9wdXBfMzdmZTEyYTNmOGI2NGIzODgzNmM1NTliOGIzYjBmMDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzU5NTc3YWZhNWRhNDQ4MTU5ZWEyMGU0YzI4MWY3ZWM3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2NzMxOTk5NzgwMjgsIC03My44NzQyMDgwMDEyMzMyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80Mzc2NTc5NmNlZWQ0ZGFiOWEzMzk4N2ViNGIwNWRjYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE4MDNjMTZkZDdjODQxOWRiOWNkNGVjZTVkNTY3OTY0ID0gJCgnPGRpdiBpZD0iaHRtbF8xODAzYzE2ZGQ3Yzg0MTlkYjljZDRlY2U1ZDU2Nzk2NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTQ5NTQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDM3NjU3OTZjZWVkNGRhYjlhMzM5ODdlYjRiMDVkY2Iuc2V0Q29udGVudChodG1sXzE4MDNjMTZkZDdjODQxOWRiOWNkNGVjZTVkNTY3OTY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNTk1NzdhZmE1ZGE0NDgxNTllYTIwZTRjMjgxZjdlYzcuYmluZFBvcHVwKHBvcHVwXzQzNzY1Nzk2Y2VlZDRkYWI5YTMzOTg3ZWI0YjA1ZGNiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85NGZlYzg0NWNhOWE0MWIyYmYwM2I0OTg4ODNjYWY0ZiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Njg1MDk5OTg2Nzc2NSwgLTczLjg3MzExMTAwMTYwNzk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ4MjY0YTU3ZWNkMTRjZGFiZTFlODg3OTdkYThiOTUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWVkZDU3OTc3ZjRlNDA1MDkyMTA4ZjIzNTA5YTgzOWEgPSAkKCc8ZGl2IGlkPSJodG1sXzVlZGQ1Nzk3N2Y0ZTQwNTA5MjEwOGYyMzUwOWE4MzlhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41NDk1NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ODI2NGE1N2VjZDE0Y2RhYmUxZTg4Nzk3ZGE4Yjk1MC5zZXRDb250ZW50KGh0bWxfNWVkZDU3OTc3ZjRlNDA1MDkyMTA4ZjIzNTA5YTgzOWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85NGZlYzg0NWNhOWE0MWIyYmYwM2I0OTg4ODNjYWY0Zi5iaW5kUG9wdXAocG9wdXBfNDgyNjRhNTdlY2QxNGNkYWJlMWU4ODc5N2RhOGI5NTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Y3YTc4MzdjZWU4OTRiMjA5ZGVhYWUyYWE2MjlmODhkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2OTQyOTk5ODk1NDIsIC03My44NzIyMTkwMDMxNDkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzNjY2OTEzYjU5ODQwNzBhZjUwOTBjNDgzMzE0ZmU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDI2NTc2YzA4NTk5NGE4ZThhNWE4ZDdmYzEyZGNjNzQgPSAkKCc8ZGl2IGlkPSJodG1sXzQyNjU3NmMwODU5OTRhOGU4YTVhOGQ3ZmMxMmRjYzc0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41NDk1Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMzY2NjkxM2I1OTg0MDcwYWY1MDkwYzQ4MzMxNGZlNi5zZXRDb250ZW50KGh0bWxfNDI2NTc2YzA4NTk5NGE4ZThhNWE4ZDdmYzEyZGNjNzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mN2E3ODM3Y2VlODk0YjIwOWRlYWFlMmFhNjI5Zjg4ZC5iaW5kUG9wdXAocG9wdXBfZDM2NjY5MTNiNTk4NDA3MGFmNTA5MGM0ODMzMTRmZTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzZlNDUwYTQ4OGM1ODQ5MTBiOGZjZThjOTFjZjI3NTY4ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3MDM1OTk5NzI5NDEsIC03My44NzEzMjQwMDA3NTA3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDc2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMmRmYWE1MjNiZTU0ZmYyYmJhMDk0ZGRhYjYyYTJlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YwNjVhMTdlMmEyNjRlYWU4YTY0OTlhZjI3YTE0ZGYxID0gJCgnPGRpdiBpZD0iaHRtbF9mMDY1YTE3ZTJhMjY0ZWFlOGE2NDk5YWYyN2ExNGRmMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTQ5NTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTJkZmFhNTIzYmU1NGZmMmJiYTA5NGRkYWI2MmEyZTguc2V0Q29udGVudChodG1sX2YwNjVhMTdlMmEyNjRlYWU4YTY0OTlhZjI3YTE0ZGYxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNmU0NTBhNDg4YzU4NDkxMGI4ZmNlOGM5MWNmMjc1NjguYmluZFBvcHVwKHBvcHVwXzEyZGZhYTUyM2JlNTRmZjJiYmEwOTRkZGFiNjJhMmU4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV80MDNjMjYyYTgzNjc0M2Y2ODE4MDQyYjQ3OTg2NWIxZCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NzEzMTk5OTkwNzMxLCAtNzMuODcwNDE0MDAzMTU1MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjE4NGE4MzVlYzA5NDVlMjlhODNkZGY0MjNkZTg2YjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MzhjNWVjN2Q0NjE0YmY0OTU5NWM1Y2Y1ZDg5MGI4OCA9ICQoJzxkaXYgaWQ9Imh0bWxfNjM4YzVlYzdkNDYxNGJmNDk1OTVjNWNmNWQ4OTBiODgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU0OTU4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IxODRhODM1ZWMwOTQ1ZTI5YTgzZGRmNDIzZGU4NmI2LnNldENvbnRlbnQoaHRtbF82MzhjNWVjN2Q0NjE0YmY0OTU5NWM1Y2Y1ZDg5MGI4OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzQwM2MyNjJhODM2NzQzZjY4MTgwNDJiNDc5ODY1YjFkLmJpbmRQb3B1cChwb3B1cF9iMTg0YTgzNWVjMDk0NWUyOWE4M2RkZjQyM2RlODZiNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOGMwOTM5NTEwNzhjNDQxZjkwMzNiMDEyM2FlYWU2MGIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTY4MDM5OTk3NTIxNDQsIC03My44NzM2NTcwMDAyNjEwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1Ny4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDg3Nzc4OTZhZGU1NDU0YTliNWFmZTg0ODAzYWY0YTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOWQwZjc2OTFiOTg0OTU4YjNhOTRlOTcxOWI2YWVmMiA9ICQoJzxkaXYgaWQ9Imh0bWxfZjlkMGY3NjkxYjk4NDk1OGIzYTk0ZTk3MTliNmFlZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5ODIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDg3Nzc4OTZhZGU1NDU0YTliNWFmZTg0ODAzYWY0YTMuc2V0Q29udGVudChodG1sX2Y5ZDBmNzY5MWI5ODQ5NThiM2E5NGU5NzE5YjZhZWYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOGMwOTM5NTEwNzhjNDQxZjkwMzNiMDEyM2FlYWU2MGIuYmluZFBvcHVwKHBvcHVwX2Q4Nzc3ODk2YWRlNTQ1NGE5YjVhZmU4NDgwM2FmNGEzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hYTJjZDQwMTRhN2Y0ZTlkOTE2YTJlODk5MDMyYjQwMSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDEwOTk5OTgyNjc2LCAtNzMuODk4Njk3MDAzNTQzOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2Y0ZDY2NmM3NjEzNDlkOWJjYjdlNjI5ZDgwMDBlMDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MjNiNTk5NWU1Njc0ZmRlOGQ3ZjAyZjMyODIxMmQwOSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjIzYjU5OTVlNTY3NGZkZThkN2YwMmYzMjgyMTJkMDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU0OTg0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNmNGQ2NjZjNzYxMzQ5ZDliY2I3ZTYyOWQ4MDAwZTA0LnNldENvbnRlbnQoaHRtbF82MjNiNTk5NWU1Njc0ZmRlOGQ3ZjAyZjMyODIxMmQwOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2FhMmNkNDAxNGE3ZjRlOWQ5MTZhMmU4OTkwMzJiNDAxLmJpbmRQb3B1cChwb3B1cF8zZjRkNjY2Yzc2MTM0OWQ5YmNiN2U2MjlkODAwMGUwNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTBjMTRmM2E0YTQwNDgzNmJhZGVhNzVkMWZiOTIwNDMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTk5NzM5OTk5NDcwODYsIC03My44OTg0NTYwMDI4MTM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYmI2ZTVkODk3NzY0N2JhODZiMDA1MTdhOWIwYmVmYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4MjVkNzMyZjFhNzQ4MzRhNjRhNWNiZDg3MTE2OTdkID0gJCgnPGRpdiBpZD0iaHRtbF9iODI1ZDczMmYxYTc0ODM0YTY0YTVjYmQ4NzExNjk3ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTgxMzEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmJiNmU1ZDg5Nzc2NDdiYTg2YjAwNTE3YTliMGJlZmMuc2V0Q29udGVudChodG1sX2I4MjVkNzMyZjFhNzQ4MzRhNjRhNWNiZDg3MTE2OTdkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNTBjMTRmM2E0YTQwNDgzNmJhZGVhNzVkMWZiOTIwNDMuYmluZFBvcHVwKHBvcHVwX2ZiYjZlNWQ4OTc3NjQ3YmE4NmIwMDUxN2E5YjBiZWZjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9lZmI5ZTI0ZDM0MDA0OWFhYWE1ZjFjNjM2Y2ZiZTY0OCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1OTk3Mjk5OTg2NjIxLCAtNzMuODk4NjExMDAxMzE4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOGU0ZWUwOWIzZDA0Y2FkOTMzZTY5MzUyOWUxZWQ2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EwYTkyNThjMjI4YTQwY2M4ZTM5NmZkNTc0MzExMzllID0gJCgnPGRpdiBpZD0iaHRtbF9hMGE5MjU4YzIyOGE0MGNjOGUzOTZmZDU3NDMxMTM5ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTgxNjIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZThlNGVlMDliM2QwNGNhZDkzM2U2OTM1MjllMWVkNmEuc2V0Q29udGVudChodG1sX2EwYTkyNThjMjI4YTQwY2M4ZTM5NmZkNTc0MzExMzllKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZWZiOWUyNGQzNDAwNDlhYWFhNWYxYzYzNmNmYmU2NDguYmluZFBvcHVwKHBvcHVwX2U4ZTRlZTA5YjNkMDRjYWQ5MzNlNjkzNTI5ZTFlZDZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV80MTgzNDRjMzE1MzU0NzY2YTAxOTNkZjhkZmM4MTVjZCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Nzk1NDk5OTk3MTU4LCAtNzMuODk4MTkyMDAzMzgyMjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMThlYmFiNzQ4YThlNGY5NGE5ZDhiMmI3OTJiMmRjZTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMjIxM2FlNjg5Mjg0ZWM2YWRhMDBjZGQ5MGFkMjk0YyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDIyMTNhZTY4OTI4NGVjNmFkYTAwY2RkOTBhZDI5NGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTgzNDMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMThlYmFiNzQ4YThlNGY5NGE5ZDhiMmI3OTJiMmRjZTcuc2V0Q29udGVudChodG1sXzAyMjEzYWU2ODkyODRlYzZhZGEwMGNkZDkwYWQyOTRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNDE4MzQ0YzMxNTM1NDc2NmEwMTkzZGY4ZGZjODE1Y2QuYmluZFBvcHVwKHBvcHVwXzE4ZWJhYjc0OGE4ZTRmOTRhOWQ4YjJiNzkyYjJkY2U3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8wZGNmMDYyZjgzNTc0MjAxODNiMDhhYTI3ZWYxNDAzMCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODA1OTk5OTk5Njk3LCAtNzMuODk3MTkxMDAyNDI5NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjZkYjU2MGNlYTQ2NGE2YmExNTNlNDNkMzI4Zjc3N2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMWU2M2JlYjY0MzQ0NDM5YWFkNWY2YTgzOWMwODA3ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYzFlNjNiZWI2NDM0NDQzOWFhZDVmNmE4MzljMDgwN2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4MzQ0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y2ZGI1NjBjZWE0NjRhNmJhMTUzZTQzZDMyOGY3NzdmLnNldENvbnRlbnQoaHRtbF9jMWU2M2JlYjY0MzQ0NDM5YWFkNWY2YTgzOWMwODA3ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzBkY2YwNjJmODM1NzQyMDE4M2IwOGFhMjdlZjE0MDMwLmJpbmRQb3B1cChwb3B1cF9mNmRiNTYwY2VhNDY0YTZiYTE1M2U0M2QzMjhmNzc3ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYmQxNjBmMzdmMzUwNDY5OTgyMDA2ZWZmZTA3NWM4NjEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTgxNTg5OTk5MDE5MiwgLTczLjg5NjI2MjAwMTIwMDI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU3ODdhMTU3OTY2NDQ0NGRiZTYwNjJkZDk3ZDlkNDAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWMyY2M4MTYxMmQ5NDkzNWIyM2Q0NzcxMmFlM2U1ZmYgPSAkKCc8ZGl2IGlkPSJodG1sX2VjMmNjODE2MTJkOTQ5MzViMjNkNDc3MTJhZTNlNWZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODM0NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81Nzg3YTE1Nzk2NjQ0NDRkYmU2MDYyZGQ5N2Q5ZDQwMi5zZXRDb250ZW50KGh0bWxfZWMyY2M4MTYxMmQ5NDkzNWIyM2Q0NzcxMmFlM2U1ZmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9iZDE2MGYzN2YzNTA0Njk5ODIwMDZlZmZlMDc1Yzg2MS5iaW5kUG9wdXAocG9wdXBfNTc4N2ExNTc5NjY0NDQ0ZGJlNjA2MmRkOTdkOWQ0MDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNmYmQ1ZmJjN2Y4YTQyY2E5MDQwNWM4YWViNjcyYTgxID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4MjU0OTk5OTc1OTksIC03My44OTUzMzYwMDE0OTYyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOWE3MTAxZmZkMzQ0Mzk5Yjk2M2YyZmZhZTNjOTQ2MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4ODgzYTNiZTY3NTRlOTlhYmU5Y2NhN2Q3MmVmMDhhID0gJCgnPGRpdiBpZD0iaHRtbF9iODg4M2EzYmU2NzU0ZTk5YWJlOWNjYTdkNzJlZjA4YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTgzNDYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTlhNzEwMWZmZDM0NDM5OWI5NjNmMmZmYWUzYzk0NjEuc2V0Q29udGVudChodG1sX2I4ODgzYTNiZTY3NTRlOTlhYmU5Y2NhN2Q3MmVmMDhhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfM2ZiZDVmYmM3ZjhhNDJjYTkwNDA1YzhhZWI2NzJhODEuYmluZFBvcHVwKHBvcHVwXzE5YTcxMDFmZmQzNDQzOTliOTYzZjJmZmFlM2M5NDYxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9kNWFmMGM5MzMyZGE0NzkzODJlYjEzMmJlMzA4MjM1ZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODM1Mjk5OTkxNzUwNiwgLTczLjg5NDQwMjAwMDY0NTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY4NTg2NDFmYjAzNzQ1ZTc4ZDU2NDdiMWM0ZTU1OTAzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTM1MzVkMDQ4M2IyNGM3ODk0Y2VlYTg0MjJiNWExOWYgPSAkKCc8ZGl2IGlkPSJodG1sXzUzNTM1ZDA0ODNiMjRjNzg5NGNlZWE4NDIyYjVhMTlmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODM0Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ODU4NjQxZmIwMzc0NWU3OGQ1NjQ3YjFjNGU1NTkwMy5zZXRDb250ZW50KGh0bWxfNTM1MzVkMDQ4M2IyNGM3ODk0Y2VlYTg0MjJiNWExOWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9kNWFmMGM5MzMyZGE0NzkzODJlYjEzMmJlMzA4MjM1ZS5iaW5kUG9wdXAocG9wdXBfNjg1ODY0MWZiMDM3NDVlNzhkNTY0N2IxYzRlNTU5MDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Q0N2M1ODQ4ZTEzNDQ5Zjc4ZWVlZGU5ZTU2NDdhY2JlID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4NDUwOTk5OTMzOTcsIC03My44OTM0NzMwMDM1NzczNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lM2FlODUyMGY2ZDA0OTRkOWE2YzdmNDVmNzM0NTY0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNiNTc3MDBmMzdkMjRjOTI4YWMwZWExZDNlZjRhNGNiID0gJCgnPGRpdiBpZD0iaHRtbF8zYjU3NzAwZjM3ZDI0YzkyOGFjMGVhMWQzZWY0YTRjYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTgzNDguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTNhZTg1MjBmNmQwNDk0ZDlhNmM3ZjQ1ZjczNDU2NGEuc2V0Q29udGVudChodG1sXzNiNTc3MDBmMzdkMjRjOTI4YWMwZWExZDNlZjRhNGNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZDQ3YzU4NDhlMTM0NDlmNzhlZWVkZTllNTY0N2FjYmUuYmluZFBvcHVwKHBvcHVwX2UzYWU4NTIwZjZkMDQ5NGQ5YTZjN2Y0NWY3MzQ1NjRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85MzU1MWEwNmExNjE0NmQ5YWMzYjk2OTMwZDc5MTAwMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODU0OTk5OTk0NjgxLCAtNzMuODkyNTI4MDAwNjgyOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzMS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzkyNWIyNWU3N2IzNDkzZGIzMzQ4MjE3MGQyNGNhYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMzM5MmY4YjJmNmY0ZTgxOGQ5ZjA3OTM1NzY3Y2IwNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjMzOTJmOGIyZjZmNGU4MThkOWYwNzkzNTc2N2NiMDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4MzQ5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M5MjViMjVlNzdiMzQ5M2RiMzM0ODIxNzBkMjRjYWM0LnNldENvbnRlbnQoaHRtbF9mMzM5MmY4YjJmNmY0ZTgxOGQ5ZjA3OTM1NzY3Y2IwNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzkzNTUxYTA2YTE2MTQ2ZDlhYzNiOTY5MzBkNzkxMDAyLmJpbmRQb3B1cChwb3B1cF9jOTI1YjI1ZTc3YjM0OTNkYjMzNDgyMTcwZDI0Y2FjNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOGU3MTdhZGZiMjAzNGIyMDg4MGRlMzg5YjVkNDA2ZGQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTg2NDU5OTk5MjY0NiwgLTczLjg5MTYwOTAwMDAxNTU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzczOGRjNzAxMzk1MDQ4ZjNhNjFiYzlhYTJjMGQ3OTc2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTg0MDIwNzYxYTlkNGI5OWExMmMzZWY4MmIyOGE2OGQgPSAkKCc8ZGl2IGlkPSJodG1sX2E4NDAyMDc2MWE5ZDRiOTlhMTJjM2VmODJiMjhhNjhkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODM1MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MzhkYzcwMTM5NTA0OGYzYTYxYmM5YWEyYzBkNzk3Ni5zZXRDb250ZW50KGh0bWxfYTg0MDIwNzYxYTlkNGI5OWExMmMzZWY4MmIyOGE2OGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV84ZTcxN2FkZmIyMDM0YjIwODgwZGUzODliNWQ0MDZkZC5iaW5kUG9wdXAocG9wdXBfNzM4ZGM3MDEzOTUwNDhmM2E2MWJjOWFhMmMwZDc5NzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzdjYzJlNjljMDFhNjQ0MzNiODJkOWViYTk4NzE0NDZhID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4NzQzOTk5OTM1NTA0LCAtNzMuODkwNjkxMDAwNDkzMjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzMS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjZjNjAxMTIzNmJjNDQwYjg5Yjk0MTMyNWM2ZjBlNzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZDBiMzUzMjBmZDU0MGQwYjVmZGRmYjhjNTViMDJmOSA9ICQoJzxkaXYgaWQ9Imh0bWxfM2QwYjM1MzIwZmQ1NDBkMGI1ZmRkZmI4YzU1YjAyZjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4MzUxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y2YzYwMTEyMzZiYzQ0MGI4OWI5NDEzMjVjNmYwZTc3LnNldENvbnRlbnQoaHRtbF8zZDBiMzUzMjBmZDU0MGQwYjVmZGRmYjhjNTViMDJmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzdjYzJlNjljMDFhNjQ0MzNiODJkOWViYTk4NzE0NDZhLmJpbmRQb3B1cChwb3B1cF9mNmM2MDExMjM2YmM0NDBiODliOTQxMzI1YzZmMGU3NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjg4ZTgyOTQwNWQ5NDVkMmJhNTQ4NjViZmUyMzIyOWQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTg4NDA5OTk4MDU5OCwgLTczLjg4OTc1MDAwMjg5MTU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0ODlhN2EzZDA3MDRmMTc4NGQyMzc1NDk0Y2IwNzk3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjM5MmZlMzJiOTVlNDE4NWJiMzMwYWFhNGRjMzc4NzUgPSAkKCc8ZGl2IGlkPSJodG1sX2YzOTJmZTMyYjk1ZTQxODViYjMzMGFhYTRkYzM3ODc1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODM1Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNDg5YTdhM2QwNzA0ZjE3ODRkMjM3NTQ5NGNiMDc5Ny5zZXRDb250ZW50KGh0bWxfZjM5MmZlMzJiOTVlNDE4NWJiMzMwYWFhNGRjMzc4NzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9iODhlODI5NDA1ZDk0NWQyYmE1NDg2NWJmZTIzMjI5ZC5iaW5kUG9wdXAocG9wdXBfZjQ4OWE3YTNkMDcwNGYxNzg0ZDIzNzU0OTRjYjA3OTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2FmYzljMDhmYTA3MTQ4YTc5ZWE2M2FiYzc5NDlmZGE4ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4OTM2OTk5ODI1NCwgLTczLjg4ODgyMzAwMjQxMjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjZiODkzYWRhMjFiNDZhYjlmMWM3OWI1MzExNDQ2ZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMWFhNDg3MzkwOGU0M2EwODAyMTkxYzVkZTk5ZGQ1OSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjFhYTQ4NzM5MDhlNDNhMDgwMjE5MWM1ZGU5OWRkNTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4MzUzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2Yjg5M2FkYTIxYjQ2YWI5ZjFjNzliNTMxMTQ0NmYzLnNldENvbnRlbnQoaHRtbF9mMWFhNDg3MzkwOGU0M2EwODAyMTkxYzVkZTk5ZGQ1OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2FmYzljMDhmYTA3MTQ4YTc5ZWE2M2FiYzc5NDlmZGE4LmJpbmRQb3B1cChwb3B1cF8yNmI4OTNhZGEyMWI0NmFiOWYxYzc5YjUzMTE0NDZmMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYTdlMmQyYWI2OTkyNGMyMmFmNTgzNDIyM2FkYTI4OWEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTkwMzY5OTk4MTQyNSwgLTczLjg4Nzg5MzAwMDExNjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M5OGExNTU1M2UzODQ5ZjM4NDA3ZmUzODI3NjU1ZGEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2ZhZDdiMTlmZTNkNDIxZmI5YTYyMGJmMTFiZjZhMjYgPSAkKCc8ZGl2IGlkPSJodG1sX2NmYWQ3YjE5ZmUzZDQyMWZiOWE2MjBiZjExYmY2YTI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4MzU0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M5OGExNTU1M2UzODQ5ZjM4NDA3ZmUzODI3NjU1ZGEwLnNldENvbnRlbnQoaHRtbF9jZmFkN2IxOWZlM2Q0MjFmYjlhNjIwYmYxMWJmNmEyNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2E3ZTJkMmFiNjk5MjRjMjJhZjU4MzQyMjNhZGEyODlhLmJpbmRQb3B1cChwb3B1cF9jOThhMTU1NTNlMzg0OWYzODQwN2ZlMzgyNzY1NWRhMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMjI2MWUxZmFiMGQ0NDc5N2JmY2M0YzA3M2I2YjEzOWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTkxMzI5OTk4MzMzMiwgLTczLjg4Njk2NTAwMTU1MjM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlMDA2YTExMmNiZDQzNjRhMmMxY2MzMDc0MTU5NjIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2Q1MjUyZGUzZTY4NDk0MDljYWRmZmFhMjM1YTIzMzcgPSAkKCc8ZGl2IGlkPSJodG1sXzdkNTI1MmRlM2U2ODQ5NDA5Y2FkZmZhYTIzNWEyMzM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODM1NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZTAwNmExMTJjYmQ0MzY0YTJjMWNjMzA3NDE1OTYyMC5zZXRDb250ZW50KGh0bWxfN2Q1MjUyZGUzZTY4NDk0MDljYWRmZmFhMjM1YTIzMzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yMjYxZTFmYWIwZDQ0Nzk3YmZjYzRjMDczYjZiMTM5Yy5iaW5kUG9wdXAocG9wdXBfNWUwMDZhMTEyY2JkNDM2NGEyYzFjYzMwNzQxNTk2MjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzE5ODRjNmEwYTc3MjRlMmJhMjc4NDNmMmU3NDM3N2JmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU5MjMyOTk5ODE0MjE2LCAtNzMuODg2MDM2MDAwODAwMTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0My4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmM4NzgyODhjOGEwNGUzOWIyYjQwNmQxNDIwM2M1ZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZGIyOTgzNDA0N2Q0NjQ4YmE2ZDE5YzBlNDI4YTIwMCA9ICQoJzxkaXYgaWQ9Imh0bWxfMmRiMjk4MzQwNDdkNDY0OGJhNmQxOWMwZTQyOGEyMDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTgzNTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmM4NzgyODhjOGEwNGUzOWIyYjQwNmQxNDIwM2M1ZDYuc2V0Q29udGVudChodG1sXzJkYjI5ODM0MDQ3ZDQ2NDhiYTZkMTljMGU0MjhhMjAwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMTk4NGM2YTBhNzcyNGUyYmEyNzg0M2YyZTc0Mzc3YmYuYmluZFBvcHVwKHBvcHVwXzZjODc4Mjg4YzhhMDRlMzliMmI0MDZkMTQyMDNjNWQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hNGUzZWE4NzRmZjM0YmVlODRiMmNlMjNjODFmYTlmMCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1OTMyOTk5OTgxMDk1LCAtNzMuODg1MTA2MDAyNTQyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZjViOGViN2MyNzE0MWU1OGUzYTEyZTcxZDk5MzlmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhYTllOTQwZGQ2YTQwYzViYjkxZTBiNTY0OTk5NjhhID0gJCgnPGRpdiBpZD0iaHRtbF9lYWE5ZTk0MGRkNmE0MGM1YmI5MWUwYjU2NDk5OTY4YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTgzNTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmY1YjhlYjdjMjcxNDFlNThlM2ExMmU3MWQ5OTM5Zjcuc2V0Q29udGVudChodG1sX2VhYTllOTQwZGQ2YTQwYzViYjkxZTBiNTY0OTk5NjhhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYTRlM2VhODc0ZmYzNGJlZTg0YjJjZTIzYzgxZmE5ZjAuYmluZFBvcHVwKHBvcHVwX2ZmNWI4ZWI3YzI3MTQxZTU4ZTNhMTJlNzFkOTkzOWY3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV81ZjUxZWE3ZDAxMmM0NmUzYjdlNDljNTA4OGQ2YTFhNSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1OTQyNjk5OTk4MzgsIC03My44ODQxNzYwMDE1NjI3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YjkwODM4OWI3ZGY0YjkwYTQyMmZhZjEwOWU0NWVlNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM3NDUyYzJjMTA1ODRjMzE4NDgyZThiMzA1NTA1YTEzID0gJCgnPGRpdiBpZD0iaHRtbF8zNzQ1MmMyYzEwNTg0YzMxODQ4MmU4YjMwNTUwNWExMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTgzNTguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWI5MDgzODliN2RmNGI5MGE0MjJmYWYxMDllNDVlZTUuc2V0Q29udGVudChodG1sXzM3NDUyYzJjMTA1ODRjMzE4NDgyZThiMzA1NTA1YTEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNWY1MWVhN2QwMTJjNDZlM2I3ZTQ5YzUwODhkNmExYTUuYmluZFBvcHVwKHBvcHVwXzliOTA4Mzg5YjdkZjRiOTBhNDIyZmFmMTA5ZTQ1ZWU1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV84YzE2NmM5ZDgzNGI0ZmU4YjQ4MzJiMTJhNWRhMjk5MiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1OTUyNTk5OTk2ODc2LCAtNzMuODgzMjQ1MDAxNjk0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZWRkZWJmY2VmODM0ZDUzOWQ4ZjcwYmQ3N2QzMTI1ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JiODFhM2RjMjhmMzQ4NDRiN2RmNGUxNTE1ZDZhMTczID0gJCgnPGRpdiBpZD0iaHRtbF9iYjgxYTNkYzI4ZjM0ODQ0YjdkZjRlMTUxNWQ2YTE3MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTgzNTkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmVkZGViZmNlZjgzNGQ1MzlkOGY3MGJkNzdkMzEyNWUuc2V0Q29udGVudChodG1sX2JiODFhM2RjMjhmMzQ4NDRiN2RmNGUxNTE1ZDZhMTczKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOGMxNjZjOWQ4MzRiNGZlOGI0ODMyYjEyYTVkYTI5OTIuYmluZFBvcHVwKHBvcHVwX2JlZGRlYmZjZWY4MzRkNTM5ZDhmNzBiZDc3ZDMxMjVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV82OGQwY2U2MWRjZDI0NWFmYWNhY2VmOGMyMjRlNzhlZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1OTYyMzk5OTc3Njk2LCAtNzMuODgyMzE2MDAwNTc3MjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGUwODk2YWRjMWQ2NDM0OGFiNjYzMWJmNTQ2ZjRlNjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ODIwZDMxYTc1ZGM0NGU5OGY1M2M0OWJhZDRkZWExYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNzgyMGQzMWE3NWRjNDRlOThmNTNjNDliYWQ0ZGVhMWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4MzYwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlMDg5NmFkYzFkNjQzNDhhYjY2MzFiZjU0NmY0ZTY4LnNldENvbnRlbnQoaHRtbF83ODIwZDMxYTc1ZGM0NGU5OGY1M2M0OWJhZDRkZWExYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzY4ZDBjZTYxZGNkMjQ1YWZhY2FjZWY4YzIyNGU3OGVlLmJpbmRQb3B1cChwb3B1cF8wZTA4OTZhZGMxZDY0MzQ4YWI2NjMxYmY1NDZmNGU2OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNzlmODQ0YzJiMmFmNDQ1MTkxMGY3YjY4MzI5NDhjNGYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTk3MjE5OTk4NDk1NSwgLTczLjg4MTM4NjAwMDQzODUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5Mzc2ZGVhYWFhYjQ3Mzc5YzA3YTA0MjIwYmZhZmRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTk5OWMxMTI0N2NjNGY5M2I2MWQ3ZmE4ODI5M2I3N2EgPSAkKCc8ZGl2IGlkPSJodG1sX2E5OTljMTEyNDdjYzRmOTNiNjFkN2ZhODgyOTNiNzdhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODM2MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOTM3NmRlYWFhYWI0NzM3OWMwN2EwNDIyMGJmYWZkZi5zZXRDb250ZW50KGh0bWxfYTk5OWMxMTI0N2NjNGY5M2I2MWQ3ZmE4ODI5M2I3N2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV83OWY4NDRjMmIyYWY0NDUxOTEwZjdiNjgzMjk0OGM0Zi5iaW5kUG9wdXAocG9wdXBfYTkzNzZkZWFhYWFiNDczNzljMDdhMDQyMjBiZmFmZGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2ViYmNhMDg1MTBhOTQ0ODA5MzI5ZTIwNjczYTM3MDgxID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU5ODE4OTk5NzM3MjcsIC03My44ODA0NTkwMDI2MTA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkMjYxNWIwZjc0NzQ1NDliYjQ0ZTA1YzZlODJkYjJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODEzMzNkMzM0OGM0NGIyOWFmYTYyNDQ4ZWY3YzM0NTMgPSAkKCc8ZGl2IGlkPSJodG1sXzgxMzMzZDMzNDhjNDRiMjlhZmE2MjQ0OGVmN2MzNDUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODM2Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZDI2MTViMGY3NDc0NTQ5YmI0NGUwNWM2ZTgyZGIyZC5zZXRDb250ZW50KGh0bWxfODEzMzNkMzM0OGM0NGIyOWFmYTYyNDQ4ZWY3YzM0NTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9lYmJjYTA4NTEwYTk0NDgwOTMyOWUyMDY3M2EzNzA4MS5iaW5kUG9wdXAocG9wdXBfM2QyNjE1YjBmNzQ3NDU0OWJiNDRlMDVjNmU4MmRiMmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzZlODVlZDI4Njc5MDQzYjQ5OGIwZmJkN2RhZWQ0Yjg0ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU5OTE2OTk5NzQ1NzEsIC03My44Nzk1MjcwMDA4MjYyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMxLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NmUxNjFlNmU4NGU0Y2YyODAxN2FjYTE1ZjdhYjA5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxMzVjNWEyZWRkYTQ3OWQ4YjMxYzViMDZhMWUyMTQxID0gJCgnPGRpdiBpZD0iaHRtbF82MTM1YzVhMmVkZGE0NzlkOGIzMWM1YjA2YTFlMjE0MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODM2My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NmUxNjFlNmU4NGU0Y2YyODAxN2FjYTE1ZjdhYjA5OS5zZXRDb250ZW50KGh0bWxfNjEzNWM1YTJlZGRhNDc5ZDhiMzFjNWIwNmExZTIxNDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV82ZTg1ZWQyODY3OTA0M2I0OThiMGZiZDdkYWVkNGI4NC5iaW5kUG9wdXAocG9wdXBfNjZlMTYxZTZlODRlNGNmMjgwMTdhY2ExNWY3YWIwOTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2E1Y2MzOGJhNWY1MDQ1NjA4OGE1ZDY2ODM5MDQ1NGMyID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2NDA0OTk5OTk3MzcsIC03My44OTc5MTAwMDA5MDAxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iN2YzZDc5ZDIyMGU0YzQ4OTJhNWI1NTA3OTRlN2M2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczZGMxNTE5ZTYwZDRlNjE5MjkxZGIyNTlkMjc0NGNiID0gJCgnPGRpdiBpZD0iaHRtbF83M2RjMTUxOWU2MGQ0ZTYxOTI5MWRiMjU5ZDI3NDRjYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg1NjYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjdmM2Q3OWQyMjBlNGM0ODkyYTViNTUwNzk0ZTdjNmEuc2V0Q29udGVudChodG1sXzczZGMxNTE5ZTYwZDRlNjE5MjkxZGIyNTlkMjc0NGNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYTVjYzM4YmE1ZjUwNDU2MDg4YTVkNjY4MzkwNDU0YzIuYmluZFBvcHVwKHBvcHVwX2I3ZjNkNzlkMjIwZTRjNDg5MmE1YjU1MDc5NGU3YzZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mNWU2NjM1YzQ5ZDM0NWNkYjhhMTJjMGUxYmZhODM1YyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NjUxMDk5OTg4ODg2LCAtNzMuODk2OTA4MDAzMzYxNzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzg2ZGFlZmU3NjkwNDU2NjhlYTNjNDU3NWQ3YjYzNjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NTUwYmIzODhlOTU0NTQxOWY4Y2UxNTEwOGQ5MDU1MCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzU1MGJiMzg4ZTk1NDU0MTlmOGNlMTUxMDhkOTA1NTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4NTY3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4NmRhZWZlNzY5MDQ1NjY4ZWEzYzQ1NzVkN2I2MzYzLnNldENvbnRlbnQoaHRtbF83NTUwYmIzODhlOTU0NTQxOWY4Y2UxNTEwOGQ5MDU1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Y1ZTY2MzVjNDlkMzQ1Y2RiOGExMmMwZTFiZmE4MzVjLmJpbmRQb3B1cChwb3B1cF83ODZkYWVmZTc2OTA0NTY2OGVhM2M0NTc1ZDdiNjM2MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMTk4NzJmMWFiNmRlNDFjNDg1NGNiNDIzYTUxMTFhMTMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTY2MDc5OTk5MjMzNiwgLTczLjg5NTk3NjAwMTY1NzQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxZTc2ZWUyM2JkYTQxMDM4MGJiNThjMzI3YjE4M2UxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGE0Y2EwOGY1NDVjNDQ2ZGFmNTU5Y2Q4ODQ5ZTkxYzQgPSAkKCc8ZGl2IGlkPSJodG1sXzRhNGNhMDhmNTQ1YzQ0NmRhZjU1OWNkODg0OWU5MWM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODU2OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MWU3NmVlMjNiZGE0MTAzODBiYjU4YzMyN2IxODNlMS5zZXRDb250ZW50KGh0bWxfNGE0Y2EwOGY1NDVjNDQ2ZGFmNTU5Y2Q4ODQ5ZTkxYzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xOTg3MmYxYWI2ZGU0MWM0ODU0Y2I0MjNhNTExMWExMy5iaW5kUG9wdXAocG9wdXBfNTFlNzZlZTIzYmRhNDEwMzgwYmI1OGMzMjdiMTgzZTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Y2NTgwZGM0Y2QxNjQ1Y2M5MmI4NDJjOWFhNzk2Y2MwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2NzEwOTk5OTk5MzU2LCAtNzMuODk1MDUyMDAwOTE4NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzA5OGZmYjZlOWEyNDM5ZmE2M2JmODdhZjMwYWVjZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mM2Y0NDhhOGQ0ZGY0N2NlODllMTNmNGVlYTE5Y2VkYyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjNmNDQ4YThkNGRmNDdjZTg5ZTEzZjRlZWExOWNlZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4NTY5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwOThmZmI2ZTlhMjQzOWZhNjNiZjg3YWYzMGFlY2RhLnNldENvbnRlbnQoaHRtbF9mM2Y0NDhhOGQ0ZGY0N2NlODllMTNmNGVlYTE5Y2VkYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Y2NTgwZGM0Y2QxNjQ1Y2M5MmI4NDJjOWFhNzk2Y2MwLmJpbmRQb3B1cChwb3B1cF8zMDk4ZmZiNmU5YTI0MzlmYTYzYmY4N2FmMzBhZWNkYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMTM3YmM5NmMyYmEwNDljZWI0NDNkYWVhZWE4NjhmNTEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTY3OTQ5OTk3MzM1MzYsIC03My44OTQxMjQwMDI4ODQzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MzQ4OGNmNWFjOWQ0OTZmOWVhMmMwNWVmYTNmMTM5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI1YTkyYzU3MjEzNTQ3MDU5NDkwZGVkNzU2NTc2YWRjID0gJCgnPGRpdiBpZD0iaHRtbF8yNWE5MmM1NzIxMzU0NzA1OTQ5MGRlZDc1NjU3NmFkYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU3MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MzQ4OGNmNWFjOWQ0OTZmOWVhMmMwNWVmYTNmMTM5OS5zZXRDb250ZW50KGh0bWxfMjVhOTJjNTcyMTM1NDcwNTk0OTBkZWQ3NTY1NzZhZGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xMzdiYzk2YzJiYTA0OWNlYjQ0M2RhZWFlYTg2OGY1MS5iaW5kUG9wdXAocG9wdXBfOTM0ODhjZjVhYzlkNDk2ZjllYTJjMDVlZmEzZjEzOTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2JjZTAzMzc2MTE3NzQ5MTdiZWQyYWIwODM4YTEyMjNlID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2ODk3OTk5OTA1ODI0LCAtNzMuODkzMTg4MDAyMTc4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NDJiNGI5OTkwZjQ0MWQ2ODBhYzgyNGQwOTIwNGNlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEyYTNhZjBlZTcxZDQ1MGU4ZTZmZmY0ZjRlNTFhMTZkID0gJCgnPGRpdiBpZD0iaHRtbF8xMmEzYWYwZWU3MWQ0NTBlOGU2ZmZmNGY0ZTUxYTE2ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU3MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NDJiNGI5OTkwZjQ0MWQ2ODBhYzgyNGQwOTIwNGNlMy5zZXRDb250ZW50KGh0bWxfMTJhM2FmMGVlNzFkNDUwZThlNmZmZjRmNGU1MWExNmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9iY2UwMzM3NjExNzc0OTE3YmVkMmFiMDgzOGExMjIzZS5iaW5kUG9wdXAocG9wdXBfNjQyYjRiOTk5MGY0NDFkNjgwYWM4MjRkMDkyMDRjZTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzM4ODE2NDdmMjEyMDQyY2RiZmZhY2JkMjNhZmExN2RjID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2OTg5OTk5OTQ0OTA2LCAtNzMuODkyMjYxMDAwNTA0NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDY0MTA2NDllNzIwNGU3OGJiYmQ0OGZiZDViYTQ0ZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMWIyOTc1NGEyMjE0NjUxYTc4NDg3YmI3NGQzYmEyNyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDFiMjk3NTRhMjIxNDY1MWE3ODQ4N2JiNzRkM2JhMjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1NzIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDY0MTA2NDllNzIwNGU3OGJiYmQ0OGZiZDViYTQ0ZDYuc2V0Q29udGVudChodG1sXzAxYjI5NzU0YTIyMTQ2NTFhNzg0ODdiYjc0ZDNiYTI3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMzg4MTY0N2YyMTIwNDJjZGJmZmFjYmQyM2FmYTE3ZGMuYmluZFBvcHVwKHBvcHVwX2Q2NDEwNjQ5ZTcyMDRlNzhiYmJkNDhmYmQ1YmE0NGQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV84NmM2ZDE5NGVlZjg0MWM5YTNhZjA3NDAwYThhMDY4OCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NzA5NTk5OTk1MDcxLCAtNzMuODkxMzMzMDAyNDUxNDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTNjM2M0MTYxZjk3NDVkNDhiMTI1YjJkOGQ0MjM4MGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZjdjZTAxODcwZjk0MjdjOTYyNGM4M2UxM2YxYWQ4ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNmY3Y2UwMTg3MGY5NDI3Yzk2MjRjODNlMTNmMWFkOGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1NzMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTNjM2M0MTYxZjk3NDVkNDhiMTI1YjJkOGQ0MjM4MGIuc2V0Q29udGVudChodG1sXzZmN2NlMDE4NzBmOTQyN2M5NjI0YzgzZTEzZjFhZDhmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfODZjNmQxOTRlZWY4NDFjOWEzYWYwNzQwMGE4YTA2ODguYmluZFBvcHVwKHBvcHVwXzEzYzNjNDE2MWY5NzQ1ZDQ4YjEyNWIyZDhkNDIzODBiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jMDYzODZhNGZkYjI0MjkxOWZkN2ExMjVkZjJkZGFmOSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NzE5Mjk5OTg4MzgxLCAtNzMuODkwNDAzMDAyMTEwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI4LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYjBjNjYwOGZiZDk0MTUzOTU1ZjFjZmFhYjk0NjgzNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEyYTM2NGM2ZGJmNjRmZWE5NzAzODU4OGJhNjIyNGQyID0gJCgnPGRpdiBpZD0iaHRtbF8xMmEzNjRjNmRiZjY0ZmVhOTcwMzg1ODhiYTYyMjRkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU3NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYjBjNjYwOGZiZDk0MTUzOTU1ZjFjZmFhYjk0NjgzNC5zZXRDb250ZW50KGh0bWxfMTJhMzY0YzZkYmY2NGZlYTk3MDM4NTg4YmE2MjI0ZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9jMDYzODZhNGZkYjI0MjkxOWZkN2ExMjVkZjJkZGFmOS5iaW5kUG9wdXAocG9wdXBfMWIwYzY2MDhmYmQ5NDE1Mzk1NWYxY2ZhYWI5NDY4MzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzFlNDk3NTk1YjljZDRiNjJhZTk0MjA1N2E2OWZjYWRkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3MjkyOTk5ODY3NTMsIC03My44ODk0NzIwMDE0NDI4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZDI0OWNjOGM2YzI0ZDc0OGQ2ZWRhNmY1ZjdmNDM0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEzMGZiMWJiM2U5MTQyNTU5MmNhMjRmMzM5MzUwODdiID0gJCgnPGRpdiBpZD0iaHRtbF8xMzBmYjFiYjNlOTE0MjU1OTJjYTI0ZjMzOTM1MDg3YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU3NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZDI0OWNjOGM2YzI0ZDc0OGQ2ZWRhNmY1ZjdmNDM0ZS5zZXRDb250ZW50KGh0bWxfMTMwZmIxYmIzZTkxNDI1NTkyY2EyNGYzMzkzNTA4N2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xZTQ5NzU5NWI5Y2Q0YjYyYWU5NDIwNTdhNjlmY2FkZC5iaW5kUG9wdXAocG9wdXBfMGQyNDljYzhjNmMyNGQ3NDhkNmVkYTZmNWY3ZjQzNGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzI5OTYwNTM4NzU5YTQ5Mjg4YmExZjA2YzM0NGExMDFhID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3Mzg3OTk5NzkyODU0LCAtNzMuODg4NTQ0MDAyMjcwMzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0My4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmM4YWMyNTQ1YTAyNGNiYzgzNGVjYWEzZjQ2NTNmMTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZGZhY2VmZDEzMWE0ZTY1OTAwNmNjOGViMTk0MGI5MyA9ICQoJzxkaXYgaWQ9Imh0bWxfY2RmYWNlZmQxMzFhNGU2NTkwMDZjYzhlYjE5NDBiOTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1NzYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmM4YWMyNTQ1YTAyNGNiYzgzNGVjYWEzZjQ2NTNmMTMuc2V0Q29udGVudChodG1sX2NkZmFjZWZkMTMxYTRlNjU5MDA2Y2M4ZWIxOTQwYjkzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjk5NjA1Mzg3NTlhNDkyODhiYTFmMDZjMzQ0YTEwMWEuYmluZFBvcHVwKHBvcHVwX2ZjOGFjMjU0NWEwMjRjYmM4MzRlY2FhM2Y0NjUzZjEzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85NTAzYTIwNWM0ODM0ZTIwOWMwZGQ0OWVmNTkxY2ZhYyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NzQ4NDk5OTg0MjE1NiwgLTczLjg4NzYxMzAwMTEyMjY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlYjJjMGY4YzdkOTQ1YjNhNGQ3OThkMDlmZGNmZDBjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2I1YTEzYTZiOTgyNGFlODgxY2E4NDAyZWJhNWJhODEgPSAkKCc8ZGl2IGlkPSJodG1sX2NiNWExM2E2Yjk4MjRhZTg4MWNhODQwMmViYTViYTgxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTc3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFlYjJjMGY4YzdkOTQ1YjNhNGQ3OThkMDlmZGNmZDBjLnNldENvbnRlbnQoaHRtbF9jYjVhMTNhNmI5ODI0YWU4ODFjYTg0MDJlYmE1YmE4MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzk1MDNhMjA1YzQ4MzRlMjA5YzBkZDQ5ZWY1OTFjZmFjLmJpbmRQb3B1cChwb3B1cF8xZWIyYzBmOGM3ZDk0NWIzYTRkNzk4ZDA5ZmRjZmQwYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNDgxN2Y1ZmEwMDRmNDBkOTkwZjg3NDVkNjE3NjU4YzkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTc1ODU5OTk5MDYyOCwgLTczLjg4NjY4NTAwMDgyOTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5Zjk5MDU1YzkzODRlMGQ4YjlmNGZlNDkzYmNjMzg4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmM2OTJhNjQ2MGI0NGUxMjg5MzkwOWE2M2ZkYmViMzggPSAkKCc8ZGl2IGlkPSJodG1sX2JjNjkyYTY0NjBiNDRlMTI4OTM5MDlhNjNmZGJlYjM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTc4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5Zjk5MDU1YzkzODRlMGQ4YjlmNGZlNDkzYmNjMzg4LnNldENvbnRlbnQoaHRtbF9iYzY5MmE2NDYwYjQ0ZTEyODkzOTA5YTYzZmRiZWIzOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzQ4MTdmNWZhMDA0ZjQwZDk5MGY4NzQ1ZDYxNzY1OGM5LmJpbmRQb3B1cChwb3B1cF85OWY5OTA1NWM5Mzg0ZTBkOGI5ZjRmZTQ5M2JjYzM4OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYmUwZjY5ZjExYTdiNDYxNGFlZTlhNDI0MDQ1NDI2ZDQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTc2ODM5OTk3NzY5NjUsIC03My44ODU3NTMwMDM0NDI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JmNWMyNWJkYWJmYjRhOTU4ZDY0YWI2MmZlMmNkZGEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzY1MTMyZGJiYzlkNDQ2OThjNjM1MzgyOTk1ZTVmMzEgPSAkKCc8ZGl2IGlkPSJodG1sXzM2NTEzMmRiYmM5ZDQ0Njk4YzYzNTM4Mjk5NWU1ZjMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTc5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmNWMyNWJkYWJmYjRhOTU4ZDY0YWI2MmZlMmNkZGEyLnNldENvbnRlbnQoaHRtbF8zNjUxMzJkYmJjOWQ0NDY5OGM2MzUzODI5OTVlNWYzMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2JlMGY2OWYxMWE3YjQ2MTRhZWU5YTQyNDA0NTQyNmQ0LmJpbmRQb3B1cChwb3B1cF9iZjVjMjViZGFiZmI0YTk1OGQ2NGFiNjJmZTJjZGRhMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNjE1MmY5ODRmNTEwNDU1Y2EzZWJlZDhhOTgzODYzNGMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTc3Nzk5OTk5NDgzMSwgLTczLjg4NDgyNDAwMjcxMjM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc1OGYwYjdiOWVhMjRmY2M5NDA5MDY0M2JmNGY3MmI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDUwZDE0NjEzYThkNDBmZTljZjA2NGEzZWE0MzAyZTcgPSAkKCc8ZGl2IGlkPSJodG1sXzQ1MGQxNDYxM2E4ZDQwZmU5Y2YwNjRhM2VhNDMwMmU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTgwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc1OGYwYjdiOWVhMjRmY2M5NDA5MDY0M2JmNGY3MmI3LnNldENvbnRlbnQoaHRtbF80NTBkMTQ2MTNhOGQ0MGZlOWNmMDY0YTNlYTQzMDJlNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzYxNTJmOTg0ZjUxMDQ1NWNhM2ViZWQ4YTk4Mzg2MzRjLmJpbmRQb3B1cChwb3B1cF83NThmMGI3YjllYTI0ZmNjOTQwOTA2NDNiZjRmNzJiNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYTgyZGUxM2ZjMjgzNGY4ZWJiYmFkY2E4ZTEzMmFmMTkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTc4NzY5OTk3NzAwOCwgLTczLjg4Mzg5NzAwMDg3MDY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBhODhkNGZiMDNhYjRjMjVhY2E1NjFjYjBhZDhlMWFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzMyMjU5NjE2MGU4NDAzMzk3M2NjOGFlMzI4MzI0MmEgPSAkKCc8ZGl2IGlkPSJodG1sXzczMjI1OTYxNjBlODQwMzM5NzNjYzhhZTMyODMyNDJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTgxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhODhkNGZiMDNhYjRjMjVhY2E1NjFjYjBhZDhlMWFjLnNldENvbnRlbnQoaHRtbF83MzIyNTk2MTYwZTg0MDMzOTczY2M4YWUzMjgzMjQyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2E4MmRlMTNmYzI4MzRmOGViYmJhZGNhOGUxMzJhZjE5LmJpbmRQb3B1cChwb3B1cF8wYTg4ZDRmYjAzYWI0YzI1YWNhNTYxY2IwYWQ4ZTFhYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjg5ZjYxMGJjZDBmNDBlMzk5YjI2OGQyNWI4ZDJiZmYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTc5NzU5OTk4NjA4MSwgLTczLjg4Mjk2NDAwMDg3NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGVjYjY2NGNjZmI2NGE4YWIxNjAxNTY3MjljYmU0MzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMmVjMDAwNjM3ZmU0OTI1OGNjN2EwZjA0YWIzN2M0MSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTJlYzAwMDYzN2ZlNDkyNThjYzdhMGYwNGFiMzdjNDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1ODIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGVjYjY2NGNjZmI2NGE4YWIxNjAxNTY3MjljYmU0MzQuc2V0Q29udGVudChodG1sXzEyZWMwMDA2MzdmZTQ5MjU4Y2M3YTBmMDRhYjM3YzQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYjg5ZjYxMGJjZDBmNDBlMzk5YjI2OGQyNWI4ZDJiZmYuYmluZFBvcHVwKHBvcHVwXzRlY2I2NjRjY2ZiNjRhOGFiMTYwMTU2NzI5Y2JlNDM0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9kZWVmMTM4MWQ4YWM0ZmZiYjhmNjk5ZWM0NThkMThhNCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODA3Mzk5OTg3NzAzNCwgLTczLjg4MjAzNTAwMjkxMDIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNzAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhjMjgyNzY0NWUwZjRkNzc5YzFhYzhiMjY1ZDlmZjgwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDVjZTU0NTgzYjJkNDQwZmIxOGMyMmE0ODMxZjA1OWEgPSAkKCc8ZGl2IGlkPSJodG1sX2Q1Y2U1NDU4M2IyZDQ0MGZiMThjMjJhNDgzMWYwNTlhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODU4My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YzI4Mjc2NDVlMGY0ZDc3OWMxYWM4YjI2NWQ5ZmY4MC5zZXRDb250ZW50KGh0bWxfZDVjZTU0NTgzYjJkNDQwZmIxOGMyMmE0ODMxZjA1OWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9kZWVmMTM4MWQ4YWM0ZmZiYjhmNjk5ZWM0NThkMThhNC5iaW5kUG9wdXAocG9wdXBfOGMyODI3NjQ1ZTBmNGQ3NzljMWFjOGIyNjVkOWZmODApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2U0ODBmMGFjNzcyNDRhZTA4YmNlM2E5OTYyZmJlNzBlID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4MTcwOTk5NzU1MTgsIC03My44ODExMDQwMDA2NTI4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YzViYzljYzk2ODY0NWYwOTQ1ODQyMmJjMDkyN2E5MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5NjRlMDM1NWJmMDQ1NzBiZmZiMGFlNjA2MzI4NTA0ID0gJCgnPGRpdiBpZD0iaHRtbF84OTY0ZTAzNTViZjA0NTcwYmZmYjBhZTYwNjMyODUwNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU4NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YzViYzljYzk2ODY0NWYwOTQ1ODQyMmJjMDkyN2E5MC5zZXRDb250ZW50KGh0bWxfODk2NGUwMzU1YmYwNDU3MGJmZmIwYWU2MDYzMjg1MDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9lNDgwZjBhYzc3MjQ0YWUwOGJjZTNhOTk2MmZiZTcwZS5iaW5kUG9wdXAocG9wdXBfOWM1YmM5Y2M5Njg2NDVmMDk0NTg0MjJiYzA5MjdhOTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2NmMTA3YjEzMjc5MDRjMmQ5MDAzMjk4YjZiYzE1YTMxID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4MjY4OTk5ODY4OCwgLTczLjg4MDE3NTAwMDgxNDM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJlN2NhNjgwNzFmOTRhMDE4YjI1OGE2NGJhNGNmODVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTRlMTEwM2U1YTM4NDA3NGIzMmY2ZjA2YWVhMzgwOGMgPSAkKCc8ZGl2IGlkPSJodG1sXzE0ZTExMDNlNWEzODQwNzRiMzJmNmYwNmFlYTM4MDhjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTg1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJlN2NhNjgwNzFmOTRhMDE4YjI1OGE2NGJhNGNmODVlLnNldENvbnRlbnQoaHRtbF8xNGUxMTAzZTVhMzg0MDc0YjMyZjZmMDZhZWEzODA4Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2NmMTA3YjEzMjc5MDRjMmQ5MDAzMjk4YjZiYzE1YTMxLmJpbmRQb3B1cChwb3B1cF8yZTdjYTY4MDcxZjk0YTAxOGIyNThhNjRiYTRjZjg1ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMmFhYzcwNmE0NTEzNDU0NzkxOTRlY2ViOGU4MmQ0YWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTgzNjc5OTk4NjMwMywgLTczLjg3OTI0NTAwMDE2MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDg3OWFlZGFhZjVmNDY5Y2IyZDRlOWI1ODE0NWQxZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMTk1NWU4YTVjNTg0ZmFmYjViYTRhM2FjMDQ4ZDI5NyA9ICQoJzxkaXYgaWQ9Imh0bWxfMzE5NTVlOGE1YzU4NGZhZmI1YmE0YTNhYzA0OGQyOTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1ODYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDg3OWFlZGFhZjVmNDY5Y2IyZDRlOWI1ODE0NWQxZGQuc2V0Q29udGVudChodG1sXzMxOTU1ZThhNWM1ODRmYWZiNWJhNGEzYWMwNDhkMjk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMmFhYzcwNmE0NTEzNDU0NzkxOTRlY2ViOGU4MmQ0YWMuYmluZFBvcHVwKHBvcHVwXzA4NzlhZWRhYWY1ZjQ2OWNiMmQ0ZTliNTgxNDVkMWRkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jNjJkZDBjMWU3OTI0ZWVmYjU2OGNiNzVhYTIwMTFmYyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODQ2Mzk5OTc1NjEzLCAtNzMuODc4MzE1MDAyMjEyNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0My4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmQxYTIwNzFhNzEwNDIyM2EzYmY5MjM3N2Y2ZGJmMzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOGVlY2YyZWNjODc0NWQzYWI1NTFmN2Q3ZjY5ZDY1NyA9ICQoJzxkaXYgaWQ9Imh0bWxfZThlZWNmMmVjYzg3NDVkM2FiNTUxZjdkN2Y2OWQ2NTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1ODcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmQxYTIwNzFhNzEwNDIyM2EzYmY5MjM3N2Y2ZGJmMzQuc2V0Q29udGVudChodG1sX2U4ZWVjZjJlY2M4NzQ1ZDNhYjU1MWY3ZDdmNjlkNjU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYzYyZGQwYzFlNzkyNGVlZmI1NjhjYjc1YWEyMDExZmMuYmluZFBvcHVwKHBvcHVwX2JkMWEyMDcxYTcxMDQyMjNhM2JmOTIzNzdmNmRiZjM0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8zN2IyOWE1ZDAwMjE0MWM2YjQwZWM2ZDcxYjlhN2QwNCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODU2MTk5OTkyMjM0LCAtNzMuODc3Mzg1MDAxNDk2MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTg2ZmVmZWMzNGEzNDA0Yzk5NTBiMTc3OGEzMGE4MTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOTc3ZjIzNzk1ZTE0MDU4OGI3NzY0NWFmYTFjMzI5NiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjk3N2YyMzc5NWUxNDA1ODhiNzc2NDVhZmExYzMyOTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1ODguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTg2ZmVmZWMzNGEzNDA0Yzk5NTBiMTc3OGEzMGE4MTcuc2V0Q29udGVudChodG1sXzI5NzdmMjM3OTVlMTQwNTg4Yjc3NjQ1YWZhMWMzMjk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMzdiMjlhNWQwMDIxNDFjNmI0MGVjNmQ3MWI5YTdkMDQuYmluZFBvcHVwKHBvcHVwXzU4NmZlZmVjMzRhMzQwNGM5OTUwYjE3NzhhMzBhODE3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yZWVkNTkwOGIwZmY0Njc1OWM3YTBjMTU2NThjY2E3OSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODY1OTk5OTk5MzkyNCwgLTczLjg3NjQ1NTAwMTYzOTA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IwN2NhMThlM2Y4NTRjOTlhYWM2OTQ3NDZjNWVlZDM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGViMDcwYmM2YjRlNDQ4Y2I0ZjIyNTNhOWE1ZWRiYWEgPSAkKCc8ZGl2IGlkPSJodG1sX2RlYjA3MGJjNmI0ZTQ0OGNiNGYyMjUzYTlhNWVkYmFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODU4OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMDdjYTE4ZTNmODU0Yzk5YWFjNjk0NzQ2YzVlZWQzNy5zZXRDb250ZW50KGh0bWxfZGViMDcwYmM2YjRlNDQ4Y2I0ZjIyNTNhOWE1ZWRiYWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yZWVkNTkwOGIwZmY0Njc1OWM3YTBjMTU2NThjY2E3OS5iaW5kUG9wdXAocG9wdXBfYjA3Y2ExOGUzZjg1NGM5OWFhYzY5NDc0NmM1ZWVkMzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2NiZDEwYTYyMjRiMzRkYmNiZjQ0NTlhNDFjOGY3YTA4ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4Njc5OTk5OTkzMjgsIC03My44NzU1MTEwMDIyNTMyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMDlkMTE1NjA3YTc0YjgzYjc5NjYyNjQ0NTE1ZGQ5YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2YmRiZDNhYzZhYjQ0MjhiMDc2YzhkZmE1MGI5MWY1ID0gJCgnPGRpdiBpZD0iaHRtbF9kNmJkYmQzYWM2YWI0NDI4YjA3NmM4ZGZhNTBiOTFmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg1OTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjA5ZDExNTYwN2E3NGI4M2I3OTY2MjY0NDUxNWRkOWIuc2V0Q29udGVudChodG1sX2Q2YmRiZDNhYzZhYjQ0MjhiMDc2YzhkZmE1MGI5MWY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfY2JkMTBhNjIyNGIzNGRiY2JmNDQ1OWE0MWM4ZjdhMDguYmluZFBvcHVwKHBvcHVwX2YwOWQxMTU2MDdhNzRiODNiNzk2NjI2NDQ1MTVkZDliKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8wNDczY2Y3NjIyZjA0NzQ3YmUxZjNlOTdkZTFhOWExNiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODU5Mjk5OTc1NjgxNCwgLTczLjg3NDUxMjAwMTczODY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNjcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1OWJmYzk3YWM0MjRiNWU5NjQ2NjhlMjJkOGI1MzJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2M5ZjdiZTQxMDg2NDdkYmJlZjg1OTRmMmMzMWY0MzcgPSAkKCc8ZGl2IGlkPSJodG1sXzdjOWY3YmU0MTA4NjQ3ZGJiZWY4NTk0ZjJjMzFmNDM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTkxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY1OWJmYzk3YWM0MjRiNWU5NjQ2NjhlMjJkOGI1MzJiLnNldENvbnRlbnQoaHRtbF83YzlmN2JlNDEwODY0N2RiYmVmODU5NGYyYzMxZjQzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzA0NzNjZjc2MjJmMDQ3NDdiZTFmM2U5N2RlMWE5YTE2LmJpbmRQb3B1cChwb3B1cF82NTliZmM5N2FjNDI0YjVlOTY0NjY4ZTIyZDhiNTMyYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYzM5ZTQ2YzMwNmIwNGFkMDg3YzkyMWQ5MDE5NGIwM2YgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTg2OTQ5OTk4ODI4MiwgLTczLjg3MzQ0ODAwMzU5MTUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk1MzBmOTYxNzZlNzRkZDRiYTMwZThhYWU4ZjgxY2RiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjU3OTU5NTQzNWM0NGIxNTk3NDVjNWY3YjcxOWMyMDEgPSAkKCc8ZGl2IGlkPSJodG1sXzI1Nzk1OTU0MzVjNDRiMTU5NzQ1YzVmN2I3MTljMjAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODU5Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NTMwZjk2MTc2ZTc0ZGQ0YmEzMGU4YWFlOGY4MWNkYi5zZXRDb250ZW50KGh0bWxfMjU3OTU5NTQzNWM0NGIxNTk3NDVjNWY3YjcxOWMyMDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9jMzllNDZjMzA2YjA0YWQwODdjOTIxZDkwMTk0YjAzZi5iaW5kUG9wdXAocG9wdXBfOTUzMGY5NjE3NmU3NGRkNGJhMzBlOGFhZThmODFjZGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Y2OGM4ZWEyOThhODRkMjA5MWJiMTBlN2RmOTFhMjk1ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4NzkxOTk5ODQ0NTEsIC03My44NzI1NTIwMDA3MzkzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZTgyN2VkMWEwZjI0NzJjYWUzY2MwYmI3ZTM4NWM1ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkzNjZjZTM2MjEwYzQ4NjM5OWYyNDJjZDYxN2FlYzkzID0gJCgnPGRpdiBpZD0iaHRtbF85MzY2Y2UzNjIxMGM0ODYzOTlmMjQyY2Q2MTdhZWM5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg1OTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmU4MjdlZDFhMGYyNDcyY2FlM2NjMGJiN2UzODVjNWUuc2V0Q29udGVudChodG1sXzkzNjZjZTM2MjEwYzQ4NjM5OWYyNDJjZDYxN2FlYzkzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZjY4YzhlYTI5OGE4NGQyMDkxYmIxMGU3ZGY5MWEyOTUuYmluZFBvcHVwKHBvcHVwXzJlODI3ZWQxYTBmMjQ3MmNhZTNjYzBiYjdlMzg1YzVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9iYmJmZjkwNzRhMjE0ZjA5YjE1OGVlYTkyNDU4ZjhiZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODg4NTk5OTk3MDA1LCAtNzMuODcxNjU2MDAxMDQ0NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2NhYjMxY2EzMDNlNGZhY2FhYTVmMGU0ZDE2MmRmZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYzhjNDIyYjlhMTk0ZDQzODhiYmMyOWM1Mjg5YTJjOCA9ICQoJzxkaXYgaWQ9Imh0bWxfZmM4YzQyMmI5YTE5NGQ0Mzg4YmJjMjljNTI4OWEyYzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4NTk0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NjYWIzMWNhMzAzZTRmYWNhYWE1ZjBlNGQxNjJkZmRlLnNldENvbnRlbnQoaHRtbF9mYzhjNDIyYjlhMTk0ZDQzODhiYmMyOWM1Mjg5YTJjOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2JiYmZmOTA3NGEyMTRmMDliMTU4ZWVhOTI0NThmOGJlLmJpbmRQb3B1cChwb3B1cF9jY2FiMzFjYTMwM2U0ZmFjYWFhNWYwZTRkMTYyZGZkZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNjNmNWZjZTA3ODMwNDBlY2EyNTFmZGZhNjQ0YjdjOTEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTg5ODI5OTk5NjEzMDQsIC03My44NzA3NDcwMDE4NTc5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYWQ4MDYwZGQ5OTM0Y2E5ODFkN2Y1ZjM2MjM4ZTI5NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA0NDVjOTUzOTg4ZTQ1Zjg4NzU5MjI0NjkxYWM1NTk5ID0gJCgnPGRpdiBpZD0iaHRtbF8wNDQ1Yzk1Mzk4OGU0NWY4ODc1OTIyNDY5MWFjNTU5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg1OTUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmFkODA2MGRkOTkzNGNhOTgxZDdmNWYzNjIzOGUyOTQuc2V0Q29udGVudChodG1sXzA0NDVjOTUzOTg4ZTQ1Zjg4NzU5MjI0NjkxYWM1NTk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNjNmNWZjZTA3ODMwNDBlY2EyNTFmZGZhNjQ0YjdjOTEuYmluZFBvcHVwKHBvcHVwX2ZhZDgwNjBkZDk5MzRjYTk4MWQ3ZjVmMzYyMzhlMjk0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yYWQ3OGNiM2I1Yjg0ZjlkYjhmOGFmMDQ3ZmNjNGFiZCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MjI5Mzk5OTgzNzYzLCAtNzMuODk4Njk5MDAwMDEyOTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDM0YzFmYmUzMTFmNDQ3MTllNWQwOTg4Yzg3ZjQ1NzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZDlkYTViNWYxZTk0MjNiODIyOTIxZGQ1YmRkOWFkNCA9ICQoJzxkaXYgaWQ9Imh0bWxfMWQ5ZGE1YjVmMWU5NDIzYjgyMjkyMWRkNWJkZDlhZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4ODMzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QzNGMxZmJlMzExZjQ0NzE5ZTVkMDk4OGM4N2Y0NTc3LnNldENvbnRlbnQoaHRtbF8xZDlkYTViNWYxZTk0MjNiODIyOTIxZGQ1YmRkOWFkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzJhZDc4Y2IzYjViODRmOWRiOGY4YWYwNDdmY2M0YWJkLmJpbmRQb3B1cChwb3B1cF9kMzRjMWZiZTMxMWY0NDcxOWU1ZDA5ODhjODdmNDU3NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMDRiOWNjYzc0ZDUxNDNmNmI0MzcxYWFmMGY0YmRmOWUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTIzMTc5OTk4MjQwOCwgLTczLjg5ODQ3MTAwMDk1ODQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4MzAyMWU3Yzc4MzQ2YzRiNTUyNmYzMWI1ZDJhNWFiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjkyMDI5M2Q3NDcwNGU3ZGEzZmEzZjBkNmYxOGQ5MWYgPSAkKCc8ZGl2IGlkPSJodG1sXzI5MjAyOTNkNzQ3MDRlN2RhM2ZhM2YwZDZmMThkOTFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODg4My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ODMwMjFlN2M3ODM0NmM0YjU1MjZmMzFiNWQyYTVhYi5zZXRDb250ZW50KGh0bWxfMjkyMDI5M2Q3NDcwNGU3ZGEzZmEzZjBkNmYxOGQ5MWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wNGI5Y2NjNzRkNTE0M2Y2YjQzNzFhYWYwZjRiZGY5ZS5iaW5kUG9wdXAocG9wdXBfNzgzMDIxZTdjNzgzNDZjNGI1NTI2ZjMxYjVkMmE1YWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzM3YWI0Yjk2NjI3OTQ3NjNiYjU4MTI4YjM3MDAyNGE0ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUyNDU4OTk5OTA3OTQ0LCAtNzMuODk3MTUxMDAwNTkwNTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0My4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzQyMzQxOWFmNjA2NGY0ZWIyNWYyMDYwYThmNTkwOTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MjA5YzE4MTM3ZTA0ZThhYWFmMzQ3YThjZmM5ZGFlMiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzIwOWMxODEzN2UwNGU4YWFhZjM0N2E4Y2ZjOWRhZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4ODg0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0MjM0MTlhZjYwNjRmNGViMjVmMjA2MGE4ZjU5MDk0LnNldENvbnRlbnQoaHRtbF83MjA5YzE4MTM3ZTA0ZThhYWFmMzQ3YThjZmM5ZGFlMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzM3YWI0Yjk2NjI3OTQ3NjNiYjU4MTI4YjM3MDAyNGE0LmJpbmRQb3B1cChwb3B1cF8zNDIzNDE5YWY2MDY0ZjRlYjI1ZjIwNjBhOGY1OTA5NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMDlkYzIyM2ZiZjk2NGMwY2IxZjBhZTE4MzQ4YWZlYmUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI1NTk5OTk3NDIwNSwgLTczLjg5NjE5MjAwMTYwODI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg4N2M3YmRiNDJmZjQ5OTc5NGQwNzI4OWQyMTFkNWQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2Y3MTY0ZGYxOWFlNDc1OGI5ZGFiNTk3NDg0NDE5OGIgPSAkKCc8ZGl2IGlkPSJodG1sX2NmNzE2NGRmMTlhZTQ3NThiOWRhYjU5NzQ4NDQxOThiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODg4NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ODdjN2JkYjQyZmY0OTk3OTRkMDcyODlkMjExZDVkNi5zZXRDb250ZW50KGh0bWxfY2Y3MTY0ZGYxOWFlNDc1OGI5ZGFiNTk3NDg0NDE5OGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wOWRjMjIzZmJmOTY0YzBjYjFmMGFlMTgzNDhhZmViZS5iaW5kUG9wdXAocG9wdXBfODg3YzdiZGI0MmZmNDk5Nzk0ZDA3Mjg5ZDIxMWQ1ZDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzU3OTRiNmQxYWVjMzQzY2RhOTI1ZTQ3N2JkYzIyZDU5ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUyNjU2OTk5NzU3NDEsIC03My44OTUyNjAwMDM2MDA0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MzhkZjhlMGUzYmQ0OGJmYTZjNmUzMzNmN2M4ZDUyOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczNzVlYTUwMDYwNDQ0YTM4ZTQ3NDMxOGJiODM5NDgzID0gJCgnPGRpdiBpZD0iaHRtbF83Mzc1ZWE1MDA2MDQ0NGEzOGU0NzQzMThiYjgzOTQ4MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg4ODYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTM4ZGY4ZTBlM2JkNDhiZmE2YzZlMzMzZjdjOGQ1Mjguc2V0Q29udGVudChodG1sXzczNzVlYTUwMDYwNDQ0YTM4ZTQ3NDMxOGJiODM5NDgzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNTc5NGI2ZDFhZWMzNDNjZGE5MjVlNDc3YmRjMjJkNTkuYmluZFBvcHVwKHBvcHVwXzkzOGRmOGUwZTNiZDQ4YmZhNmM2ZTMzM2Y3YzhkNTI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mYTU1YjFhOGRkNjY0NTk0ODA5MDc4NWM1YTc2MWU1YSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Mjc1NTk5OTkyNzU5LCAtNzMuODk0MzMwMDAyODYxMTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTNkZWFjZjA1YjYzNDQxMWI4ZmY3YzUzYjQzZTE1MDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOWJlOTEwMzY5NWE0MzE5ODg4ZTU1YTAwOGEzZjNkOCA9ICQoJzxkaXYgaWQ9Imh0bWxfMTliZTkxMDM2OTVhNDMxOTg4OGU1NWEwMDhhM2YzZDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4ODg3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EzZGVhY2YwNWI2MzQ0MTFiOGZmN2M1M2I0M2UxNTA0LnNldENvbnRlbnQoaHRtbF8xOWJlOTEwMzY5NWE0MzE5ODg4ZTU1YTAwOGEzZjNkOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2ZhNTViMWE4ZGQ2NjQ1OTQ4MDkwNzg1YzVhNzYxZTVhLmJpbmRQb3B1cChwb3B1cF9hM2RlYWNmMDViNjM0NDExYjhmZjdjNTNiNDNlMTUwNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMjg0NWYxMGY5MjE3NDVmOGI0OWNiYzA5Zjk3YTc5YzIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI4NTE5OTk3ODU4NzUsIC03My44OTMzOTgwMDA5NzY1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDU1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZDMzNmRjZjRhNDM0NDY2ODIyNmI2YjIzNDJlNDFjMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFhMTc1ZGMwZTdjMzQ5ZGZiYzQ1YjgzOWRhM2Q1NmM3ID0gJCgnPGRpdiBpZD0iaHRtbF8xYTE3NWRjMGU3YzM0OWRmYmM0NWI4MzlkYTNkNTZjNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODg4OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZDMzNmRjZjRhNDM0NDY2ODIyNmI2YjIzNDJlNDFjMi5zZXRDb250ZW50KGh0bWxfMWExNzVkYzBlN2MzNDlkZmJjNDViODM5ZGEzZDU2YzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yODQ1ZjEwZjkyMTc0NWY4YjQ5Y2JjMDlmOTdhNzljMi5iaW5kUG9wdXAocG9wdXBfNWQzMzZkY2Y0YTQzNDQ2NjgyMjZiNmIyMzQyZTQxYzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzI1NmMzMmQwMWFjNzRiMmU4ZWQ2MmM5NjU3MTk4YzZjID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUyOTQ3OTk5NzM5NzMsIC03My44OTI0NzMwMDIwODYwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDU1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OTNhODhlYWE5YTQ0ZDc5Yjg3NTViMzI5MjNkMjM0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JkZjM3ZDdmMDYxNzRhYzRhZGQ1ZTYwYWRhZWQ5Nzc2ID0gJCgnPGRpdiBpZD0iaHRtbF9iZGYzN2Q3ZjA2MTc0YWM0YWRkNWU2MGFkYWVkOTc3NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODg4OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OTNhODhlYWE5YTQ0ZDc5Yjg3NTViMzI5MjNkMjM0ZS5zZXRDb250ZW50KGh0bWxfYmRmMzdkN2YwNjE3NGFjNGFkZDVlNjBhZGFlZDk3NzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yNTZjMzJkMDFhYzc0YjJlOGVkNjJjOTY1NzE5OGM2Yy5iaW5kUG9wdXAocG9wdXBfOTkzYTg4ZWFhOWE0NGQ3OWI4NzU1YjMyOTIzZDIzNGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzQyNjg0ZDg1NjlhOTRmZWE4N2YwYTBlMjUzYjNjOGI3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUzMDQ2OTk5ODgyNzUsIC03My44OTE1NDUwMDM1MDExMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NDJhZWZhNjFhNzI0MzA5OGNjNGM5MTc2MWViYjdmMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFkZDUxNGE1NTY5ZDRhMzFhZjZkMjZhZjFkYzhmOGIxID0gJCgnPGRpdiBpZD0iaHRtbF8xZGQ1MTRhNTU2OWQ0YTMxYWY2ZDI2YWYxZGM4ZjhiMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg4OTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzQyYWVmYTYxYTcyNDMwOThjYzRjOTE3NjFlYmI3ZjAuc2V0Q29udGVudChodG1sXzFkZDUxNGE1NTY5ZDRhMzFhZjZkMjZhZjFkYzhmOGIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNDI2ODRkODU2OWE5NGZlYTg3ZjBhMGUyNTNiM2M4YjcuYmluZFBvcHVwKHBvcHVwXzc0MmFlZmE2MWE3MjQzMDk4Y2M0YzkxNzYxZWJiN2YwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9lMDFjOGJjM2Q0M2Q0NDY3OGU1NmNhMWIzZjkxOGY2YSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MzE0NDk5OTgxNTcyNCwgLTczLjg5MDYxMzAwMTAzODgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EzOTZmOTBhMDA2NjQ2OTA5YzIyMzkwZGQxMmQ0ZjhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDBlODEwMDZlYTNmNDVmZmE1N2FjMzBkM2ZlOWI2MjggPSAkKCc8ZGl2IGlkPSJodG1sXzAwZTgxMDA2ZWEzZjQ1ZmZhNTdhYzMwZDNmZTliNjI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODg5MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMzk2ZjkwYTAwNjY0NjkwOWMyMjM5MGRkMTJkNGY4Yy5zZXRDb250ZW50KGh0bWxfMDBlODEwMDZlYTNmNDVmZmE1N2FjMzBkM2ZlOWI2MjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9lMDFjOGJjM2Q0M2Q0NDY3OGU1NmNhMWIzZjkxOGY2YS5iaW5kUG9wdXAocG9wdXBfYTM5NmY5MGEwMDY2NDY5MDljMjIzOTBkZDEyZDRmOGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2U5ODBhOTQ4ZjE4YjQxZjM4Y2Q1NWRjMDBlNjU1NTY5ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUzMjQyOTk5NzUxOTUsIC03My44ODk2ODQwMDIzOTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDU4LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kY2JkMmRiNTRmZDk0Mjc0ODYxNWQ4MmE3MzQzYzcxMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0YzE1NjY0Njc0NTRlNmQ4ZTVjMjI3MmY2Njg0OWJhID0gJCgnPGRpdiBpZD0iaHRtbF9iNGMxNTY2NDY3NDU0ZTZkOGU1YzIyNzJmNjY4NDliYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg4OTIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGNiZDJkYjU0ZmQ5NDI3NDg2MTVkODJhNzM0M2M3MTIuc2V0Q29udGVudChodG1sX2I0YzE1NjY0Njc0NTRlNmQ4ZTVjMjI3MmY2Njg0OWJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZTk4MGE5NDhmMThiNDFmMzhjZDU1ZGMwMGU2NTU1NjkuYmluZFBvcHVwKHBvcHVwX2RjYmQyZGI1NGZkOTQyNzQ4NjE1ZDgyYTczNDNjNzEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9kMjNiMTNiNzViMGY0MDkzYjk0Y2NiYTU1MDIyN2UyNyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MzMzOTk5OTgzNzA3LCAtNzMuODg4NzU2MDAyNDcyOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Mi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTE0NjQ1NWJiNWMwNDkyOWE5M2U2ODY5MjQ3ODZmMGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGViZDdiMzNkNTI0ZjBhYTBlMDVhOTE0YjM5MjdjNiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjhlYmQ3YjMzZDUyNGYwYWEwZTA1YTkxNGIzOTI3YzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4ODkzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUxNDY0NTViYjVjMDQ5MjlhOTNlNjg2OTI0Nzg2ZjBlLnNldENvbnRlbnQoaHRtbF82OGViZDdiMzNkNTI0ZjBhYTBlMDVhOTE0YjM5MjdjNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2QyM2IxM2I3NWIwZjQwOTNiOTRjY2JhNTUwMjI3ZTI3LmJpbmRQb3B1cChwb3B1cF81MTQ2NDU1YmI1YzA0OTI5YTkzZTY4NjkyNDc4NmYwZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDMwM2U1ZDQ0ZGRhNGU5MzhiMDg2OTNiOTJkOWFlN2UgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTM0Mzc5OTk5OTE5LCAtNzMuODg3ODI0MDAyNTk4NDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1NS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTliY2NiOGM1YzA3NDE0NGI2NjAzMjZkNzBkNjgzNWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZGMxN2Q2NDgyOGU0MjYzODdjNjg0ZjBjZjBhMzgxYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNGRjMTdkNjQ4MjhlNDI2Mzg3YzY4NGYwY2YwYTM4MWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4ODk0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5YmNjYjhjNWMwNzQxNDRiNjYwMzI2ZDcwZDY4MzViLnNldENvbnRlbnQoaHRtbF80ZGMxN2Q2NDgyOGU0MjYzODdjNjg0ZjBjZjBhMzgxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2QzMDNlNWQ0NGRkYTRlOTM4YjA4NjkzYjkyZDlhZTdlLmJpbmRQb3B1cChwb3B1cF81OWJjY2I4YzVjMDc0MTQ0YjY2MDMyNmQ3MGQ2ODM1YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZjNiNmE2NjIyYzliNGMxMWJkOWU3ZWIzYzY4MDcyNDIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTM1MzU5OTk4Mjg2MSwgLTczLjg4Njg5NjAwMjc0MjUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRlYTVkOThlZDZhNTQ1NGI4MmFkYWZhZmViOTIwM2M1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDRhNTlmNGMyZDk2NGI1YWI1ZjZkNGUyMDI1Y2QxMzIgPSAkKCc8ZGl2IGlkPSJodG1sX2Q0YTU5ZjRjMmQ5NjRiNWFiNWY2ZDRlMjAyNWNkMTMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODg5NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZWE1ZDk4ZWQ2YTU0NTRiODJhZGFmYWZlYjkyMDNjNS5zZXRDb250ZW50KGh0bWxfZDRhNTlmNGMyZDk2NGI1YWI1ZjZkNGUyMDI1Y2QxMzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mM2I2YTY2MjJjOWI0YzExYmQ5ZTdlYjNjNjgwNzI0Mi5iaW5kUG9wdXAocG9wdXBfNGVhNWQ5OGVkNmE1NDU0YjgyYWRhZmFmZWI5MjAzYzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2I1MWI5Yzk0NzNmZTRhYjlhYWM0MDkxZTM0YmI5ZDQyID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUzNjMzOTk5OTIyOTc1LCAtNzMuODg1OTY1MDAwNzY1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lN2E1YWE2OTVkZDA0NTNiYTVjN2I3YjQyMGNhNjc2MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0ZTQ3N2RjMmU3NTRmYTY4YmI5ODFhMWY2ZTk1ZjVhID0gJCgnPGRpdiBpZD0iaHRtbF9hNGU0NzdkYzJlNzU0ZmE2OGJiOTgxYTFmNmU5NWY1YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODg5Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lN2E1YWE2OTVkZDA0NTNiYTVjN2I3YjQyMGNhNjc2MS5zZXRDb250ZW50KGh0bWxfYTRlNDc3ZGMyZTc1NGZhNjhiYjk4MWExZjZlOTVmNWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9iNTFiOWM5NDczZmU0YWI5YWFjNDA5MWUzNGJiOWQ0Mi5iaW5kUG9wdXAocG9wdXBfZTdhNWFhNjk1ZGQwNDUzYmE1YzdiN2I0MjBjYTY3NjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2E4OWIyN2I3ZDc2ZjQ0OTFhOTM4YzI5MzI4NGNjOTk1ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUzNzMwOTk5OTY5ODcsIC03My44ODUwMzcwMDA3NTM3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDY0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MzA2M2Y2ZDY0OWU0YTdmYWFlMzEyNjgwMmEzMTQ1ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgwOWY3YzAwOGQwYjQ5MzU4N2M0ZTJlZWIxZjA5NjhlID0gJCgnPGRpdiBpZD0iaHRtbF84MDlmN2MwMDhkMGI0OTM1ODdjNGUyZWViMWYwOTY4ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODg5Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MzA2M2Y2ZDY0OWU0YTdmYWFlMzEyNjgwMmEzMTQ1ZC5zZXRDb250ZW50KGh0bWxfODA5ZjdjMDA4ZDBiNDkzNTg3YzRlMmVlYjFmMDk2OGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9hODliMjdiN2Q3NmY0NDkxYTkzOGMyOTMyODRjYzk5NS5iaW5kUG9wdXAocG9wdXBfNTMwNjNmNmQ2NDllNGE3ZmFhZTMxMjY4MDJhMzE0NWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2ZiMDA5YTA0MTEwMTQyNjJiOWZlN2FlNDJhMjlmNjk3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUzODI4OTk5ODY1MzYsIC03My44ODQxMDYwMDA1MDk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMzBjNGNlNjlkYjc0NGI4YmQzODY2ZjJkNjA5ZWIwMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFmY2YxZjI2YTY5MTQxZDg4ZmFlYzdhYjM3MjRkMGUwID0gJCgnPGRpdiBpZD0iaHRtbF8xZmNmMWYyNmE2OTE0MWQ4OGZhZWM3YWIzNzI0ZDBlMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg4OTguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDMwYzRjZTY5ZGI3NDRiOGJkMzg2NmYyZDYwOWViMDAuc2V0Q29udGVudChodG1sXzFmY2YxZjI2YTY5MTQxZDg4ZmFlYzdhYjM3MjRkMGUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZmIwMDlhMDQxMTAxNDI2MmI5ZmU3YWU0MmEyOWY2OTcuYmluZFBvcHVwKHBvcHVwXzAzMGM0Y2U2OWRiNzQ0YjhiZDM4NjZmMmQ2MDllYjAwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9kYzBjNzNlMTU5ZWE0YWRiYWEwMTdkMTQ1NjFjNTUwMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MzkyNTk5OTg0NTg5LCAtNzMuODgzMTc3MDAyNDcwNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDAxNzU3ZjVmZWRjNDA0YmFhODdjZmY2ZjAyNjA0NGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NGViZTQ0NWY2NzE0OTZiODJkOGY0M2Q2NDg1YTdhMSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTRlYmU0NDVmNjcxNDk2YjgyZDhmNDNkNjQ4NWE3YTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4ODk5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwMTc1N2Y1ZmVkYzQwNGJhYTg3Y2ZmNmYwMjYwNDRiLnNldENvbnRlbnQoaHRtbF85NGViZTQ0NWY2NzE0OTZiODJkOGY0M2Q2NDg1YTdhMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2RjMGM3M2UxNTllYTRhZGJhYTAxN2QxNDU2MWM1NTAyLmJpbmRQb3B1cChwb3B1cF8wMDE3NTdmNWZlZGM0MDRiYWE4N2NmZjZmMDI2MDQ0YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMGExZjU2NmQ5MzlmNDU1OGIzNTY4OWIzYjQ3YjMyMjggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQwMjM5OTk4MDU0NTUsIC03My44ODIyNDYwMDAzNDc5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMjY4NjYxY2FjOGY0ZTBhYWVkMzkwYTYwYzIyMTU5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IyNWQ1YWJiOWVlNTQ3ZDQ4MDFjYzg4NjUxMjZmY2Y1ID0gJCgnPGRpdiBpZD0iaHRtbF9iMjVkNWFiYjllZTU0N2Q0ODAxY2M4ODY1MTI2ZmNmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg5MDAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjI2ODY2MWNhYzhmNGUwYWFlZDM5MGE2MGMyMjE1OTguc2V0Q29udGVudChodG1sX2IyNWQ1YWJiOWVlNTQ3ZDQ4MDFjYzg4NjUxMjZmY2Y1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMGExZjU2NmQ5MzlmNDU1OGIzNTY4OWIzYjQ3YjMyMjguYmluZFBvcHVwKHBvcHVwXzIyNjg2NjFjYWM4ZjRlMGFhZWQzOTBhNjBjMjIxNTk4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9iN2NiYzAxODJjMDE0NzA3YmI3MTY3ODM5NWFjNTg2OSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDEyMjk5OTg0MTgyLCAtNzMuODgxMzE1MDAwOTA5NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2FiNWZiZjdlYWRkNDg5ZGEzNzI2MTA2YzIyMTZlYjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYzA2NDk1YzMzMGM0YTljOTA4ZjNjOGVjMDQzNjgwZiA9ICQoJzxkaXYgaWQ9Imh0bWxfY2MwNjQ5NWMzMzBjNGE5YzkwOGYzYzhlYzA0MzY4MGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTAxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdhYjVmYmY3ZWFkZDQ4OWRhMzcyNjEwNmMyMjE2ZWIyLnNldENvbnRlbnQoaHRtbF9jYzA2NDk1YzMzMGM0YTljOTA4ZjNjOGVjMDQzNjgwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2I3Y2JjMDE4MmMwMTQ3MDdiYjcxNjc4Mzk1YWM1ODY5LmJpbmRQb3B1cChwb3B1cF83YWI1ZmJmN2VhZGQ0ODlkYTM3MjYxMDZjMjIxNmViMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjAxYmJlOTViYjBhNDM5YTk5ZjdlNjljMDQ5NmI5MzcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQyMTk5OTk5Nzg2LCAtNzMuODgwMzg4MDAxNDg3MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0OS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTkxYzZhNzI2NWMxNGMxZDhiZmEyOTI0M2RhZmNhNTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jY2I4YWRkMDdjMzk0OGUzYWZiZGNjNjA3NWE1NWVhZCA9ICQoJzxkaXYgaWQ9Imh0bWxfY2NiOGFkZDA3YzM5NDhlM2FmYmRjYzYwNzVhNTVlYWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTAyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5MWM2YTcyNjVjMTRjMWQ4YmZhMjkyNDNkYWZjYTU5LnNldENvbnRlbnQoaHRtbF9jY2I4YWRkMDdjMzk0OGUzYWZiZGNjNjA3NWE1NWVhZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2IwMWJiZTk1YmIwYTQzOWE5OWY3ZTY5YzA0OTZiOTM3LmJpbmRQb3B1cChwb3B1cF9lOTFjNmE3MjY1YzE0YzFkOGJmYTI5MjQzZGFmY2E1OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMjZmZTRiOWNiYTRhNDQwZjgxYzI0Y2NkYjE2Zjg4ZjggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQzMTc5OTk5NjI0NzQsIC03My44Nzk0NTYwMDIxMzc1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOWY5MGE3ODcwNWE0NGU0YmVmY2NhZWI2YzhmMWI3OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ExYWMxYWFhZTRlODQyODE4NWYyYjZiZGY3MzBkMDAyID0gJCgnPGRpdiBpZD0iaHRtbF9hMWFjMWFhYWU0ZTg0MjgxODVmMmI2YmRmNzMwZDAwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg5MDMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTlmOTBhNzg3MDVhNDRlNGJlZmNjYWViNmM4ZjFiNzguc2V0Q29udGVudChodG1sX2ExYWMxYWFhZTRlODQyODE4NWYyYjZiZGY3MzBkMDAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjZmZTRiOWNiYTRhNDQwZjgxYzI0Y2NkYjE2Zjg4ZjguYmluZFBvcHVwKHBvcHVwX2U5ZjkwYTc4NzA1YTQ0ZTRiZWZjY2FlYjZjOGYxYjc4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jNmFhYTk2M2ExZTA0YzlkYTFhYTE2YzJlZWNmMTgyNSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDQxNDk5OTk2MTY5LCAtNzMuODc4NTI5MDAwODc2ODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1OC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTdkZDkxNjE2ZjdlNDg4NTk5NjY1OGU3OTBhMThhYmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOTFkOTA4N2ZhNDE0YTFkYmQzNmNkNTQ0MGYzMzg3MSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzkxZDkwODdmYTQxNGExZGJkMzZjZDU0NDBmMzM4NzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTA0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U3ZGQ5MTYxNmY3ZTQ4ODU5OTY2NThlNzkwYTE4YWJkLnNldENvbnRlbnQoaHRtbF9jOTFkOTA4N2ZhNDE0YTFkYmQzNmNkNTQ0MGYzMzg3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2M2YWFhOTYzYTFlMDRjOWRhMWFhMTZjMmVlY2YxODI1LmJpbmRQb3B1cChwb3B1cF9lN2RkOTE2MTZmN2U0ODg1OTk2NjU4ZTc5MGExOGFiZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDY5NTM0NDNhYjRmNGI3ZGJkYzM1NjRkYTA5MzM1ZDIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ1MTI5OTk5NzAxLCAtNzMuODc3NTk4MDAzMDYxMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Mi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTliZTUyNGNiYzQ1NDlmOThiZjY0M2RmZThlMmFmY2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMTBjODVlNzdmOTM0MjJlYWViYjUxYjgxMDdlOTllZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZjEwYzg1ZTc3ZjkzNDIyZWFlYmI1MWI4MTA3ZTk5ZWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTA1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5YmU1MjRjYmM0NTQ5Zjk4YmY2NDNkZmU4ZTJhZmNhLnNldENvbnRlbnQoaHRtbF9mMTBjODVlNzdmOTM0MjJlYWViYjUxYjgxMDdlOTllZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Q2OTUzNDQzYWI0ZjRiN2RiZGMzNTY0ZGEwOTMzNWQyLmJpbmRQb3B1cChwb3B1cF8xOWJlNTI0Y2JjNDU0OWY5OGJmNjQzZGZlOGUyYWZjYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNWZlMGNjNzg1NGY0NDcwMzg3YmVkMTIwZjRiMjBjYjMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ2MDk5OTk5MjIyNjYsIC03My44NzY2NjgwMDA1NDE5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YmI0MGRjZDlmMmE0NzA0YjVkMTBhZDIxM2JmZTcwOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QyMmJlODcyMmE5ODQzNDM4NjdhZDgxYjFmZDk1NGI4ID0gJCgnPGRpdiBpZD0iaHRtbF9kMjJiZTg3MjJhOTg0MzQzODY3YWQ4MWIxZmQ5NTRiOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg5MDYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmJiNDBkY2Q5ZjJhNDcwNGI1ZDEwYWQyMTNiZmU3MDguc2V0Q29udGVudChodG1sX2QyMmJlODcyMmE5ODQzNDM4NjdhZDgxYjFmZDk1NGI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNWZlMGNjNzg1NGY0NDcwMzg3YmVkMTIwZjRiMjBjYjMuYmluZFBvcHVwKHBvcHVwXzZiYjQwZGNkOWYyYTQ3MDRiNWQxMGFkMjEzYmZlNzA4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xYmVjNWMyYzBhYjM0Yzk3YjhhMTQ3Yjg5NWUyYzJmMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDcwODk5OTg2MjA5LCAtNzMuODc1NzM5MDAyMjA2MjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2NC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWJhOGI0NTA1M2NjNDBkMmJhYmMzYjQwZjUzN2ExZjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mN2MzYzMxZTM1ZDU0MzA1ODM4ZmNiZGU4MGE2MmNiNyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjdjM2MzMWUzNWQ1NDMwNTgzOGZjYmRlODBhNjJjYjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTA3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFiYThiNDUwNTNjYzQwZDJiYWJjM2I0MGY1MzdhMWYyLnNldENvbnRlbnQoaHRtbF9mN2MzYzMxZTM1ZDU0MzA1ODM4ZmNiZGU4MGE2MmNiNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzFiZWM1YzJjMGFiMzRjOTdiOGExNDdiODk1ZTJjMmYyLmJpbmRQb3B1cChwb3B1cF8xYmE4YjQ1MDUzY2M0MGQyYmFiYzNiNDBmNTM3YTFmMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOTVmMDhjNzg4Mzk5NDNiYTljOTZhYmM0YWYzYjZlNzQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ4MDU5OTk5MDY3OSwgLTczLjg3NDgwOTAwMTQzNDE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1YmE3M2FlMDkwNjQ4Njc5ZDhlYjBkMzZmN2ZhMDI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTE5NTc3ZjkxYWVlNGM5YWEzOWI1N2Q0MzlhMGUwOGYgPSAkKCc8ZGl2IGlkPSJodG1sX2UxOTU3N2Y5MWFlZTRjOWFhMzliNTdkNDM5YTBlMDhmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4OTA4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY1YmE3M2FlMDkwNjQ4Njc5ZDhlYjBkMzZmN2ZhMDI3LnNldENvbnRlbnQoaHRtbF9lMTk1NzdmOTFhZWU0YzlhYTM5YjU3ZDQzOWEwZTA4Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzk1ZjA4Yzc4ODM5OTQzYmE5Yzk2YWJjNGFmM2I2ZTc0LmJpbmRQb3B1cChwb3B1cF82NWJhNzNhZTA5MDY0ODY3OWQ4ZWIwZDM2ZjdmYTAyNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMDY2MjQ5OTI1OTFmNDBmYmE2NzgzMmEwYzk3MmQzZDcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ5MDM5OTk3NzAzOCwgLTczLjg3Mzg3OTAwMzI2NTMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyM2Y1OTc1MDYzYjQ3ZDlhNzFlZDAwNzJkYTEzOTYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDdlOTZiZGVhMDNmNDA2YTg4ZGExZmYyYThmMzdhYjAgPSAkKCc8ZGl2IGlkPSJodG1sXzQ3ZTk2YmRlYTAzZjQwNmE4OGRhMWZmMmE4ZjM3YWIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4OTA5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAyM2Y1OTc1MDYzYjQ3ZDlhNzFlZDAwNzJkYTEzOTYwLnNldENvbnRlbnQoaHRtbF80N2U5NmJkZWEwM2Y0MDZhODhkYTFmZjJhOGYzN2FiMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzA2NjI0OTkyNTkxZjQwZmJhNjc4MzJhMGM5NzJkM2Q3LmJpbmRQb3B1cChwb3B1cF8wMjNmNTk3NTA2M2I0N2Q5YTcxZWQwMDcyZGExMzk2MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNDk4NmJiODNlODEzNGU4MDllZWExZTkwYzRhNTBlYzIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTUxMTM5OTk5OTEyOSwgLTczLjg3MTg4NjAwMDAxNDY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgyNzBlNTdhMDA5YTQyZDBhZjMwOThiMDQ5ZTJhMTE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjg1ZTgxYTg0Mjk0NGY2Y2EzY2UxYjhkZGQ4MTNmYjUgPSAkKCc8ZGl2IGlkPSJodG1sX2Y4NWU4MWE4NDI5NDRmNmNhM2NlMWI4ZGRkODEzZmI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODkxMC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MjcwZTU3YTAwOWE0MmQwYWYzMDk4YjA0OWUyYTExNC5zZXRDb250ZW50KGh0bWxfZjg1ZTgxYTg0Mjk0NGY2Y2EzY2UxYjhkZGQ4MTNmYjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV80OTg2YmI4M2U4MTM0ZTgwOWVlYTFlOTBjNGE1MGVjMi5iaW5kUG9wdXAocG9wdXBfODI3MGU1N2EwMDlhNDJkMGFmMzA5OGIwNDllMmExMTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2RhYjE1ZDgyOWRkMDRjZWFiMWU4NDY0Yjg1YmMzZDEwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU1MjA3OTk5OTg0Mzg1LCAtNzMuODcwOTk1MDAxMDAxNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWJlY2ZhOWMyMjI5NDNlYTg0Y2JhNWExYTUxOWYxNWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMGE2Njk2NDVjMDA0ZDEzODNlMWE3Y2Y0YzNiZjYyOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjBhNjY5NjQ1YzAwNGQxMzgzZTFhN2NmNGMzYmY2MjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTExLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliZWNmYTljMjIyOTQzZWE4NGNiYTVhMWE1MTlmMTViLnNldENvbnRlbnQoaHRtbF8yMGE2Njk2NDVjMDA0ZDEzODNlMWE3Y2Y0YzNiZjYyOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2RhYjE1ZDgyOWRkMDRjZWFiMWU4NDY0Yjg1YmMzZDEwLmJpbmRQb3B1cChwb3B1cF85YmVjZmE5YzIyMjk0M2VhODRjYmE1YTFhNTE5ZjE1YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYTUyODFkNGUzYmUwNGY3Zjk1ODM4ODFmNmMxNjUxYjEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTUwMjk5OTk4NzYyNiwgLTczLjg3MjY5MjAwMDQ2ODE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIxLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNTQxODlhM2NjODY0OTI2OWFkMTE0YmQ1ZTUxZDM0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFjZGNmMTE2MGU0YzRkMmNhNjJjYzgyNDc1MjRiZDUzID0gJCgnPGRpdiBpZD0iaHRtbF8xY2RjZjExNjBlNGM0ZDJjYTYyY2M4MjQ3NTI0YmQ1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg5MjkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzU0MTg5YTNjYzg2NDkyNjlhZDExNGJkNWU1MWQzNDYuc2V0Q29udGVudChodG1sXzFjZGNmMTE2MGU0YzRkMmNhNjJjYzgyNDc1MjRiZDUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYTUyODFkNGUzYmUwNGY3Zjk1ODM4ODFmNmMxNjUxYjEuYmluZFBvcHVwKHBvcHVwXzM1NDE4OWEzY2M4NjQ5MjY5YWQxMTRiZDVlNTFkMzQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83MThiNDEwNGJiNDc0YzYwODE2ZTA1MjA3ZjZiNDQ4NyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MjM2NDk5OTkzMTMxLCAtNzMuODk3Njk5MDAzMzc2NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDY0OTM4NWEyZjBlNDE3MTkyNGJiZTM4YzdkMGU0NGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NmU1MDliZmFlNDM0YjAwOTBjNTFhZGU4ODc4ZGJhMCA9ICQoJzxkaXYgaWQ9Imh0bWxfODZlNTA5YmZhZTQzNGIwMDkwYzUxYWRlODg3OGRiYTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTMwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ2NDkzODVhMmYwZTQxNzE5MjRiYmUzOGM3ZDBlNDRhLnNldENvbnRlbnQoaHRtbF84NmU1MDliZmFlNDM0YjAwOTBjNTFhZGU4ODc4ZGJhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzcxOGI0MTA0YmI0NzRjNjA4MTZlMDUyMDdmNmI0NDg3LmJpbmRQb3B1cChwb3B1cF80NjQ5Mzg1YTJmMGU0MTcxOTI0YmJlMzhjN2QwZTQ0YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOGI3YmVmNTViZDJlNGM0MWEwYTY3YzcxYWIyOGYzNTkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTM5NjA5OTk4ODEyNDQsIC03My44NzE2ODUwMDIzNjIzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYjlhYmNkMDMyNzA0NGZlODRhODk5YjRkNmU2NjgwNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q0NjkyMjE5NTYyMTRiNzBiYjhlNjY4MzA1OGQ1Mjk0ID0gJCgnPGRpdiBpZD0iaHRtbF9kNDY5MjIxOTU2MjE0YjcwYmI4ZTY2ODMwNThkNTI5NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg5NzQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGI5YWJjZDAzMjcwNDRmZTg0YTg5OWI0ZDZlNjY4MDcuc2V0Q29udGVudChodG1sX2Q0NjkyMjE5NTYyMTRiNzBiYjhlNjY4MzA1OGQ1Mjk0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOGI3YmVmNTViZDJlNGM0MWEwYTY3YzcxYWIyOGYzNTkuYmluZFBvcHVwKHBvcHVwX2RiOWFiY2QwMzI3MDQ0ZmU4NGE4OTliNGQ2ZTY2ODA3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hZDljZDRmZWNmMmU0MDc3YWJhNWY5ODAwZWNlM2M5YSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Mzg2MTk5OTg0MDg2LCAtNzMuODcyMDcwMDAyNjQ0NDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjBhMzA4NGMwYTM1NDU5YjkxMTczNThkMWFiMjE4NjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZWQxMmE5MWM3N2U0MjE4YThhYjQ3OWQ1NjdkMDAxYyA9ICQoJzxkaXYgaWQ9Imh0bWxfZmVkMTJhOTFjNzdlNDIxOGE4YWI0NzlkNTY3ZDAwMWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTc1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwYTMwODRjMGEzNTQ1OWI5MTE3MzU4ZDFhYjIxODY0LnNldENvbnRlbnQoaHRtbF9mZWQxMmE5MWM3N2U0MjE4YThhYjQ3OWQ1NjdkMDAxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2FkOWNkNGZlY2YyZTQwNzdhYmE1Zjk4MDBlY2UzYzlhLmJpbmRQb3B1cChwb3B1cF9iMGEzMDg0YzBhMzU0NTliOTExNzM1OGQxYWIyMTg2NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNDA4ZjVhN2VkYzdmNGI5NThjYWFmZjhmYTNjMmJhOTAgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTM2NzE5OTk5NTQ2NTUsIC03My44NzM2NTUwMDM2MDY0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZDM0MTQ2NDRmOTE0ZjRmOTcwY2FkMGQ5MzhmM2Q1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q4Y2M1MDYxYWM3MTQyZWZhYzMwZjMwMGQ3MmVkNzlkID0gJCgnPGRpdiBpZD0iaHRtbF9kOGNjNTA2MWFjNzE0MmVmYWMzMGYzMDBkNzJlZDc5ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg5ODMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWQzNDE0NjQ0ZjkxNGY0Zjk3MGNhZDBkOTM4ZjNkNTAuc2V0Q29udGVudChodG1sX2Q4Y2M1MDYxYWM3MTQyZWZhYzMwZjMwMGQ3MmVkNzlkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNDA4ZjVhN2VkYzdmNGI5NThjYWFmZjhmYTNjMmJhOTAuYmluZFBvcHVwKHBvcHVwX2VkMzQxNDY0NGY5MTRmNGY5NzBjYWQwZDkzOGYzZDUwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV80NDhlNjQzNDZjYTM0NmM5YjY5YTBlZjU5YTk3M2Y4MyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Mzk4NTk5OTk4NTMwNCwgLTczLjg3MjE0MjAwMjYwNzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTlmZGY0ZThjZjJjNGFjYThkZGZjOTU0YjY4ZTU1ZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZWEwZTY1MDBlYWE0ZjViYTRmOTEyMzAwNDExZDEzMiA9ICQoJzxkaXYgaWQ9Imh0bWxfZWVhMGU2NTAwZWFhNGY1YmE0ZjkxMjMwMDQxMWQxMzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTg0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5ZmRmNGU4Y2YyYzRhY2E4ZGRmYzk1NGI2OGU1NWQ2LnNldENvbnRlbnQoaHRtbF9lZWEwZTY1MDBlYWE0ZjViYTRmOTEyMzAwNDExZDEzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzQ0OGU2NDM0NmNhMzQ2YzliNjlhMGVmNTlhOTczZjgzLmJpbmRQb3B1cChwb3B1cF9lOWZkZjRlOGNmMmM0YWNhOGRkZmM5NTRiNjhlNTVkNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfODliYTFmNWJmZTFiNDIzZThiOWE3NTY5M2QzMDAwY2IgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTAzMTkwMDAwMDE0NCwgLTczLjg5ODY1OTAwMzU0MzM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I0ZDBkMjdlOWE2MDQ5M2E5ZjQxZTI1YmU3YWMzMmI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzQxNWViNjI5ZTkwNDBkY2EwOTNhYmQwNDc3NzJhZmEgPSAkKCc8ZGl2IGlkPSJodG1sX2M0MTVlYjYyOWU5MDQwZGNhMDkzYWJkMDQ3NzcyYWZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTA1Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNGQwZDI3ZTlhNjA0OTNhOWY0MWUyNWJlN2FjMzJiOS5zZXRDb250ZW50KGh0bWxfYzQxNWViNjI5ZTkwNDBkY2EwOTNhYmQwNDc3NzJhZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV84OWJhMWY1YmZlMWI0MjNlOGI5YTc1NjkzZDMwMDBjYi5iaW5kUG9wdXAocG9wdXBfYjRkMGQyN2U5YTYwNDkzYTlmNDFlMjViZTdhYzMyYjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2EwYTg1MDZjZTA3YjRiZmY5NzI4NzgyZmM1ODlkNDQ5ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwNDE2OTk5OTE1MjI0LCAtNzMuODk3NzI4MDAyNjI4MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0My4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGE0NDQ0ODM2MzYzNDUzMzhhMzBiOWY0YmIwN2MxYmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNjYwZTMyM2E2YmI0M2FlYmQ4NzA2M2M4NGY3NTk3NSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTY2MGUzMjNhNmJiNDNhZWJkODcwNjNjODRmNzU5NzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5MDUzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhNDQ0NDgzNjM2MzQ1MzM4YTMwYjlmNGJiMDdjMWJlLnNldENvbnRlbnQoaHRtbF9hNjYwZTMyM2E2YmI0M2FlYmQ4NzA2M2M4NGY3NTk3NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2EwYTg1MDZjZTA3YjRiZmY5NzI4NzgyZmM1ODlkNDQ5LmJpbmRQb3B1cChwb3B1cF8wYTQ0NDQ4MzYzNjM0NTMzOGEzMGI5ZjRiYjA3YzFiZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMjBhN2E5ZWYxYjIzNDM4Yjk0ZDFkYmIzNDAwMDRlY2IgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTA1NDE5OTk4MjE4MDYsIC03My44OTY1NDAwMDA4MDAxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZjcxYWNkYzMzY2Q0MDkwYTdmYjk0NTU5NTRlMDk4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlZjM5YmFhMjU0ODRjNjk4ZDQ3YWIyNzJjNzg2NWRjID0gJCgnPGRpdiBpZD0iaHRtbF9lZWYzOWJhYTI1NDg0YzY5OGQ0N2FiMjcyYzc4NjVkYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTkwNTQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2Y3MWFjZGMzM2NkNDA5MGE3ZmI5NDU1OTU0ZTA5OGYuc2V0Q29udGVudChodG1sX2VlZjM5YmFhMjU0ODRjNjk4ZDQ3YWIyNzJjNzg2NWRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjBhN2E5ZWYxYjIzNDM4Yjk0ZDFkYmIzNDAwMDRlY2IuYmluZFBvcHVwKHBvcHVwXzdmNzFhY2RjMzNjZDQwOTBhN2ZiOTQ1NTk1NGUwOThmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8zYTM0MWRjMGYxMmU0NzljYTc4NDhjZWRjZDRiMDJjMSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MDYxOTk5OTk1NTg0NSwgLTczLjg5NTc5OTAwMjE2MjMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IxMjhmODQ3ZGE3NTRiNjJhY2MyOTBjY2RkNzMxNDc4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzIwZmZjOWUyOGEzNGU2NTg1ZTNiYmJlN2Y5YjZkMTEgPSAkKCc8ZGl2IGlkPSJodG1sXzMyMGZmYzllMjhhMzRlNjU4NWUzYmJiZTdmOWI2ZDExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTA1NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTI4Zjg0N2RhNzU0YjYyYWNjMjkwY2NkZDczMTQ3OC5zZXRDb250ZW50KGh0bWxfMzIwZmZjOWUyOGEzNGU2NTg1ZTNiYmJlN2Y5YjZkMTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8zYTM0MWRjMGYxMmU0NzljYTc4NDhjZWRjZDRiMDJjMS5iaW5kUG9wdXAocG9wdXBfYjEyOGY4NDdkYTc1NGI2MmFjYzI5MGNjZGQ3MzE0NzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2I5ZTc2Zjk4OWM0MjQ5MzA4ODhkNmQ3NDEwOTU0YTc4ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwNzE2OTk5OTE5MjIsIC03My44OTQ4OTkwMDEwMTUxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMxLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZmE3MzI4MjNhNmM0MTFhYThlNzY5NTg5NTM2M2FhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNlMGY2MjI1ODVlNjQ3OTRiOTYzNjJiNGVkNTYzOGU1ID0gJCgnPGRpdiBpZD0iaHRtbF8zZTBmNjIyNTg1ZTY0Nzk0Yjk2MzYyYjRlZDU2MzhlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTkwNTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGZhNzMyODIzYTZjNDExYWE4ZTc2OTU4OTUzNjNhYTYuc2V0Q29udGVudChodG1sXzNlMGY2MjI1ODVlNjQ3OTRiOTYzNjJiNGVkNTYzOGU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYjllNzZmOTg5YzQyNDkzMDg4OGQ2ZDc0MTA5NTRhNzguYmluZFBvcHVwKHBvcHVwXzBmYTczMjgyM2E2YzQxMWFhOGU3Njk1ODk1MzYzYWE2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV80NDMyZTY0ZTk2MTY0YjAwYTI2NjMzMDUzYjlkZDg1MSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MDgxMDk5OTk0MzY4LCAtNzMuODkzOTc2MDAwNTQzMjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWZiZGI3NGI2NGRiNGU1ZWI5YjA0OWRiYWYzMThkNDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MjQ2MDZhZGM2Njc0NWU3ODkxMTM3NDgzZGEzMjg5MiA9ICQoJzxkaXYgaWQ9Imh0bWxfODI0NjA2YWRjNjY3NDVlNzg5MTEzNzQ4M2RhMzI4OTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWZiZGI3NGI2NGRiNGU1ZWI5YjA0OWRiYWYzMThkNDYuc2V0Q29udGVudChodG1sXzgyNDYwNmFkYzY2NzQ1ZTc4OTExMzc0ODNkYTMyODkyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNDQzMmU2NGU5NjE2NGIwMGEyNjYzMzA1M2I5ZGQ4NTEuYmluZFBvcHVwKHBvcHVwX2FmYmRiNzRiNjRkYjRlNWViOWIwNDlkYmFmMzE4ZDQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mNjExNTJiOWZlNGE0MmFkOWMzZDgzNmE2MjcwMzg4MCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MDkwNzk5OTc0NTA5LCAtNzMuODkzMDQ4MDAxMTAwNDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNThmM2M0MDZjZDAzNDZlY2JjZGUyOGU5ODM2OTQ0MGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MjQ5MDRiOGZlMzk0NDllYjA4NTY2YmY5YjlkYWFkZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTI0OTA0YjhmZTM5NDQ5ZWIwODU2NmJmOWI5ZGFhZGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNTguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNThmM2M0MDZjZDAzNDZlY2JjZGUyOGU5ODM2OTQ0MGYuc2V0Q29udGVudChodG1sXzUyNDkwNGI4ZmUzOTQ0OWViMDg1NjZiZjliOWRhYWRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZjYxMTUyYjlmZTRhNDJhZDljM2Q4MzZhNjI3MDM4ODAuYmluZFBvcHVwKHBvcHVwXzU4ZjNjNDA2Y2QwMzQ2ZWNiY2RlMjhlOTgzNjk0NDBmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8zY2M2YjgzZjZhMTk0NWQwOThkY2UwMDUyNTY1ZDEzOCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTAwMzk5OTk1NjIsIC03My44OTIxMjEwMDAzMTQ2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMjNjYjkzZTBlMjI0NjhjYTRkMTk5ZDM2YzI4NzAxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzViNzM0ZTk3NmJjZDRlOWFiZWM4Njc3NWFkMDQxY2YxID0gJCgnPGRpdiBpZD0iaHRtbF81YjczNGU5NzZiY2Q0ZTlhYmVjODY3NzVhZDA0MWNmMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTA1OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMjNjYjkzZTBlMjI0NjhjYTRkMTk5ZDM2YzI4NzAxZS5zZXRDb250ZW50KGh0bWxfNWI3MzRlOTc2YmNkNGU5YWJlYzg2Nzc1YWQwNDFjZjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8zY2M2YjgzZjZhMTk0NWQwOThkY2UwMDUyNTY1ZDEzOC5iaW5kUG9wdXAocG9wdXBfYjIzY2I5M2UwZTIyNDY4Y2E0ZDE5OWQzNmMyODcwMWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Y4NjdjZTRlYjljODRjZjhiYzFlNWUxODFjMjYwM2I4ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUxMTAwOTk5OTc0NTc1LCAtNzMuODkxMTg5MDAwMDQ5NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmUwMGZkNzAwMDFmNGI4Mzk3ODQwYmE3ZTcyOWZjN2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOWZkZmE5MjA2NGM0NDgwOTNjZTJmYTU1ODQyNjAxZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDlmZGZhOTIwNjRjNDQ4MDkzY2UyZmE1NTg0MjYwMWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNjAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmUwMGZkNzAwMDFmNGI4Mzk3ODQwYmE3ZTcyOWZjN2Yuc2V0Q29udGVudChodG1sXzA5ZmRmYTkyMDY0YzQ0ODA5M2NlMmZhNTU4NDI2MDFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZjg2N2NlNGViOWM4NGNmOGJjMWU1ZTE4MWMyNjAzYjguYmluZFBvcHVwKHBvcHVwX2ZlMDBmZDcwMDAxZjRiODM5Nzg0MGJhN2U3MjlmYzdmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yZGQ5NTI1ZGQ2YWM0MTc2YjhiYTJlNDdhZDhlZmI3OCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTE5OTk5OTc4OTI3LCAtNzMuODkwMjYyMDAzMzcwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMTQwNzAzNDAwYzI0MjlhODVkMzZmNzUwOTc3M2M4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlNzk1NjZmNzc0YjRhNzU4NmZlN2E1Y2RjNmJlMTFiID0gJCgnPGRpdiBpZD0iaHRtbF80ZTc5NTY2Zjc3NGI0YTc1ODZmZTdhNWNkYzZiZTExYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTkwNjEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzE0MDcwMzQwMGMyNDI5YTg1ZDM2Zjc1MDk3NzNjOGYuc2V0Q29udGVudChodG1sXzRlNzk1NjZmNzc0YjRhNzU4NmZlN2E1Y2RjNmJlMTFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMmRkOTUyNWRkNmFjNDE3NmI4YmEyZTQ3YWQ4ZWZiNzguYmluZFBvcHVwKHBvcHVwX2MxNDA3MDM0MDBjMjQyOWE4NWQzNmY3NTA5NzczYzhmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV81OWI1ODU3ODc1YTM0NzYzYTUyNDRiYzg3NWIwYjliMyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTI5Njk5OTg2MjU5NiwgLTczLjg4OTMzMjAwMDc1NTUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMzZjg0MGE1YjU5NzRiMTI4YmVhZmUyYTk5M2ZjMzgyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzAwM2UxOWQ2Zjg0NDU5YWFjZWQ3ODdhMTljOTAwOWMgPSAkKCc8ZGl2IGlkPSJodG1sXzMwMDNlMTlkNmY4NDQ1OWFhY2VkNzg3YTE5YzkwMDljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTA2Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zM2Y4NDBhNWI1OTc0YjEyOGJlYWZlMmE5OTNmYzM4Mi5zZXRDb250ZW50KGh0bWxfMzAwM2UxOWQ2Zjg0NDU5YWFjZWQ3ODdhMTljOTAwOWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV81OWI1ODU3ODc1YTM0NzYzYTUyNDRiYzg3NWIwYjliMy5iaW5kUG9wdXAocG9wdXBfMzNmODQwYTViNTk3NGIxMjhiZWFmZTJhOTkzZmMzODIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzFhNTA1ZTJlMmZjNjQzYTU4ZTViOGY1Y2NkNWRjYWRkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUxMzk1OTk5Nzk3NTQsIC03My44ODg0MDEwMDMxMzgzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI4LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NzdmZDQ0MTRlZjI0MmY1OTdmYmVkNDA2M2Q2NmQ1NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5ZDk2ZTM5ZGUxMjRlZTNiNDkyYjEzYWZhMDBlN2ZhID0gJCgnPGRpdiBpZD0iaHRtbF84OWQ5NmUzOWRlMTI0ZWUzYjQ5MmIxM2FmYTAwZTdmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTkwNjMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTc3ZmQ0NDE0ZWYyNDJmNTk3ZmJlZDQwNjNkNjZkNTQuc2V0Q29udGVudChodG1sXzg5ZDk2ZTM5ZGUxMjRlZTNiNDkyYjEzYWZhMDBlN2ZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMWE1MDVlMmUyZmM2NDNhNThlNWI4ZjVjY2Q1ZGNhZGQuYmluZFBvcHVwKHBvcHVwXzk3N2ZkNDQxNGVmMjQyZjU5N2ZiZWQ0MDYzZDY2ZDU0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hZTZkYTgxMzBjYWQ0MDAyYmNmNGQ2YTk3ZWRhZjM3YyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTQ5NDk5OTg5MTU3LCAtNzMuODg3NDcwMDAyNzQxMTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyNS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjI2ZjVkZjIzOGFiNGFjZDk5ZTA0ZTNmNjM3ODRkNGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MTY3ZjM4MDY1MjY0MDM1OWI5ZmQxMzZiOGVjMWI2ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNTE2N2YzODA2NTI2NDAzNTliOWZkMTM2YjhlYzFiNmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNjQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjI2ZjVkZjIzOGFiNGFjZDk5ZTA0ZTNmNjM3ODRkNGEuc2V0Q29udGVudChodG1sXzUxNjdmMzgwNjUyNjQwMzU5YjlmZDEzNmI4ZWMxYjZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYWU2ZGE4MTMwY2FkNDAwMmJjZjRkNmE5N2VkYWYzN2MuYmluZFBvcHVwKHBvcHVwXzYyNmY1ZGYyMzhhYjRhY2Q5OWUwNGUzZjYzNzg0ZDRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8zODVlZGExNGIxNjY0OGM0OGFhMjQ0N2RjN2M4YTIwMyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTU5MTk5OTg3MTA0LCAtNzMuODg2NTQzMDAyMDE3NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0Ni4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDUxOTk2NTY5YjVhNDJhODkwNzYyNjY4M2JkNTlhMGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMmQ5MzJmNDM2NzI0ZDE5YjE3YWYxZTJkODkzNzM5ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTJkOTMyZjQzNjcyNGQxOWIxN2FmMWUyZDg5MzczOWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNjUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDUxOTk2NTY5YjVhNDJhODkwNzYyNjY4M2JkNTlhMGYuc2V0Q29udGVudChodG1sXzEyZDkzMmY0MzY3MjRkMTliMTdhZjFlMmQ4OTM3MzllKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMzg1ZWRhMTRiMTY2NDhjNDhhYTI0NDdkYzdjOGEyMDMuYmluZFBvcHVwKHBvcHVwXzA1MTk5NjU2OWI1YTQyYTg5MDc2MjY2ODNiZDU5YTBmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9iOTU5NTBlZTI3ZWY0ZWFiOWNkOWFkMzY0ZWYyZDJiNiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTY4OTk5OTc1NDU2LCAtNzMuODg1NjEzMDAxMTg0MzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzdlNjU3Nzk3MjNiNGQ3MWFmM2FmZTk4ZGE1YTM1M2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81M2E5NWU5ZTZmNjg0YzkyYTRhMjZmMmY0YzMwNDRjOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTNhOTVlOWU2ZjY4NGM5MmE0YTI2ZjJmNGMzMDQ0YzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNjYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzdlNjU3Nzk3MjNiNGQ3MWFmM2FmZTk4ZGE1YTM1M2Yuc2V0Q29udGVudChodG1sXzUzYTk1ZTllNmY2ODRjOTJhNGEyNmYyZjRjMzA0NGM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYjk1OTUwZWUyN2VmNGVhYjljZDlhZDM2NGVmMmQyYjYuYmluZFBvcHVwKHBvcHVwX2M3ZTY1Nzc5NzIzYjRkNzFhZjNhZmU5OGRhNWEzNTNmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV84ZjFhZTJlNTc1OTE0MTFlYmUwMGU5YzVjNjk3ZTQ1ZCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTc4Nzk5OTk5NDM4NCwgLTczLjg4NDY4NDAwMDk3NTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDUxMWE0MGQ1OGIwNDBhZWI3YmRlZjY4NTI5YmE0MGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ODg4OTRhMzMyNTc0ZjBkYTcxOTY1Y2Q0M2FjODExZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNTg4ODk0YTMzMjU3NGYwZGE3MTk2NWNkNDNhYzgxMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNjcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDUxMWE0MGQ1OGIwNDBhZWI3YmRlZjY4NTI5YmE0MGQuc2V0Q29udGVudChodG1sXzU4ODg5NGEzMzI1NzRmMGRhNzE5NjVjZDQzYWM4MTFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOGYxYWUyZTU3NTkxNDExZWJlMDBlOWM1YzY5N2U0NWQuYmluZFBvcHVwKHBvcHVwX2Q1MTFhNDBkNThiMDQwYWViN2JkZWY2ODUyOWJhNDBkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85ZTY1YTI5NGFkMzk0MTM4YTNkMTBlMWIyZGE3YTUzMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTg4NDk5OTg2OTYzLCAtNzMuODgzNzUzMDAwMjMzMjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGM2OWJhZmU0M2M0NDg0Zjg0ZTgwZTJhM2I4NjdlNGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZjFhYmNkMTM0ZDM0MTQxYjM0N2IwYWM1OGZkMGZkMSA9ICQoJzxkaXYgaWQ9Imh0bWxfNWYxYWJjZDEzNGQzNDE0MWIzNDdiMGFjNThmZDBmZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNjguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGM2OWJhZmU0M2M0NDg0Zjg0ZTgwZTJhM2I4NjdlNGIuc2V0Q29udGVudChodG1sXzVmMWFiY2QxMzRkMzQxNDFiMzQ3YjBhYzU4ZmQwZmQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOWU2NWEyOTRhZDM5NDEzOGEzZDEwZTFiMmRhN2E1MzIuYmluZFBvcHVwKHBvcHVwXzRjNjliYWZlNDNjNDQ4NGY4NGU4MGUyYTNiODY3ZTRiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yMzBiNjc2NDc4OTg0NDllOTYxYWQ4Y2ZkNTA0MDljOSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTk4MTk5OTgyNjgzLCAtNzMuODgyODIzMDAwMTQzNDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTUwM2U3N2NmMmE0NDZkNjg4MTExOTgwMjM2NjZiMzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NzE3MzhjMjYyNjA0YTUxOTg2MjBlOWY5OTIyMDhkMSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDcxNzM4YzI2MjYwNGE1MTk4NjIwZTlmOTkyMjA4ZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNjkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTUwM2U3N2NmMmE0NDZkNjg4MTExOTgwMjM2NjZiMzYuc2V0Q29udGVudChodG1sXzQ3MTczOGMyNjI2MDRhNTE5ODYyMGU5Zjk5MjIwOGQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjMwYjY3NjQ3ODk4NDQ5ZTk2MWFkOGNmZDUwNDA5YzkuYmluZFBvcHVwKHBvcHVwX2E1MDNlNzdjZjJhNDQ2ZDY4ODExMTk4MDIzNjY2YjM2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xMDUzNTIxOWNhMTY0NDllODIwYmNhYjBmZmNiZDdiNSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MjA4MDk5OTk4OTEzLCAtNzMuODgxODk0MDAwNzczNDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGZiODIxNjE5Mzk5NGQ5ZTk3OWVkNWUzYzQ3YWQzMTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYWU1OTQ1Y2FlOTI0MjdlYjJjMTAyNTE4ZTM3NGI5YSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWFlNTk0NWNhZTkyNDI3ZWIyYzEwMjUxOGUzNzRiOWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5MDcwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBmYjgyMTYxOTM5OTRkOWU5NzllZDVlM2M0N2FkMzE4LnNldENvbnRlbnQoaHRtbF8xYWU1OTQ1Y2FlOTI0MjdlYjJjMTAyNTE4ZTM3NGI5YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzEwNTM1MjE5Y2ExNjQ0OWU4MjBiY2FiMGZmY2JkN2I1LmJpbmRQb3B1cChwb3B1cF8wZmI4MjE2MTkzOTk0ZDllOTc5ZWQ1ZTNjNDdhZDMxOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMmMwMTdkMWY0NDFkNDI5ZmEzZDhiY2E2YTEzZThiZTYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTIxNzg5OTk3Mzg1OCwgLTczLjg4MDk2MzAwMDg3NTMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwNWIzMTViZjM3ODRmMzVhYzM3Njk4ZmI4ODUzZjNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWRiNzY3MmE3YzJiNGM4YWIxYmRiNTgxMWJiYzI3MGMgPSAkKCc8ZGl2IGlkPSJodG1sX2FkYjc2NzJhN2MyYjRjOGFiMWJkYjU4MTFiYmMyNzBjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDcxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwNWIzMTViZjM3ODRmMzVhYzM3Njk4ZmI4ODUzZjNiLnNldENvbnRlbnQoaHRtbF9hZGI3NjcyYTdjMmI0YzhhYjFiZGI1ODExYmJjMjcwYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzJjMDE3ZDFmNDQxZDQyOWZhM2Q4YmNhNmExM2U4YmU2LmJpbmRQb3B1cChwb3B1cF9jMDViMzE1YmYzNzg0ZjM1YWMzNzY5OGZiODg1M2YzYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMjI3NGFiZDVkZjk1NDgyMTkwZWFhZWNlMWQ0MmUwNWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTIyODQ5OTk5MzMwNSwgLTczLjg4MDAzNDAwMTQwNzIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJiZDIyODljNzc1NDRhY2I4Y2I0NTg3YjZiYTJmMzQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2UwZThhOWMzMmJmNDlmODhjOTRlMzdkZmI1ZWViMjYgPSAkKCc8ZGl2IGlkPSJodG1sX2NlMGU4YTljMzJiZjQ5Zjg4Yzk0ZTM3ZGZiNWVlYjI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDcyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJiZDIyODljNzc1NDRhY2I4Y2I0NTg3YjZiYTJmMzQ3LnNldENvbnRlbnQoaHRtbF9jZTBlOGE5YzMyYmY0OWY4OGM5NGUzN2RmYjVlZWIyNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzIyNzRhYmQ1ZGY5NTQ4MjE5MGVhYWVjZTFkNDJlMDVjLmJpbmRQb3B1cChwb3B1cF8yYmQyMjg5Yzc3NTQ0YWNiOGNiNDU4N2I2YmEyZjM0NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYWVhNGY5YWYwNzJlNDBmMWJlZGJkNjcyMjMwYmFmYzAgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTIzNzI5OTk3NTYxLCAtNzMuODc5MTA0MDAyOTg4OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjEyYTA0MGRlNjVmNDk5ZGI0ZWRmOWEyNDEwZTc1N2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NGQ3ODhmZmZkMDg0ZjIwODljMTEwZDI1NTVhYmY0NyA9ICQoJzxkaXYgaWQ9Imh0bWxfODRkNzg4ZmZmZDA4NGYyMDg5YzExMGQyNTU1YWJmNDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5MDczLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIxMmEwNDBkZTY1ZjQ5OWRiNGVkZjlhMjQxMGU3NTdiLnNldENvbnRlbnQoaHRtbF84NGQ3ODhmZmZkMDg0ZjIwODljMTEwZDI1NTVhYmY0Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2FlYTRmOWFmMDcyZTQwZjFiZWRiZDY3MjIzMGJhZmMwLmJpbmRQb3B1cChwb3B1cF8yMTJhMDQwZGU2NWY0OTlkYjRlZGY5YTI0MTBlNzU3YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfODU3ZDQ5YTRlNTc1NDU1YjhhYTRhOTE4YWVhMmViZWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI0NzA5OTk5NzQzNiwgLTczLjg3ODE3NDAwMTg1NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODg4NjY4MjYzM2UwNGJmMmJiNDMxNWVjOGVlZGVjNzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNjcwMTNmMzIxODA0M2NhYTNlNzY1ZjJkMWE5M2I1OSA9ICQoJzxkaXYgaWQ9Imh0bWxfZTY3MDEzZjMyMTgwNDNjYWEzZTc2NWYyZDFhOTNiNTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5MDc0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg4ODY2ODI2MzNlMDRiZjJiYjQzMTVlYzhlZWRlYzc3LnNldENvbnRlbnQoaHRtbF9lNjcwMTNmMzIxODA0M2NhYTNlNzY1ZjJkMWE5M2I1OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzg1N2Q0OWE0ZTU3NTQ1NWI4YWE0YTkxOGFlYTJlYmVjLmJpbmRQb3B1cChwb3B1cF84ODg2NjgyNjMzZTA0YmYyYmI0MzE1ZWM4ZWVkZWM3NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOTQ0OWE2ZDE1YTk0NGVhMGEwNzY5MmNmODZhNDczMWYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI1Njc5OTk4MTUyMiwgLTczLjg3NzI0NzAwMjc1ODM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkMGQ3ZmU2YzQ2YzQ5Zjc4M2Q2OWUxMmMyZDI2ZmQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDQyNzE3YWZkN2U5NDI2MjkwOGQyNGVlZmIwYzZhOTEgPSAkKCc8ZGl2IGlkPSJodG1sXzQ0MjcxN2FmZDdlOTQyNjI5MDhkMjRlZWZiMGM2YTkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTA3NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDBkN2ZlNmM0NmM0OWY3ODNkNjllMTJjMmQyNmZkMC5zZXRDb250ZW50KGh0bWxfNDQyNzE3YWZkN2U5NDI2MjkwOGQyNGVlZmIwYzZhOTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85NDQ5YTZkMTVhOTQ0ZWEwYTA3NjkyY2Y4NmE0NzMxZi5iaW5kUG9wdXAocG9wdXBfNGQwZDdmZTZjNDZjNDlmNzgzZDY5ZTEyYzJkMjZmZDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzkzY2NhNDA0M2Q1YjRhZGY5NWEzYzExZmEyNDQxNTY2ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUyNjY1OTk5OTEyMDQsIC03My44NzYzMTUwMDAxOTg2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OGI0NDE3ZDQ1ZTc0NmIxOTVmN2FmODIyZmMyODA4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE4ZTUwYjUzMTk0YjQzNzI5NDJhYzQ4YTU4N2E3NzAwID0gJCgnPGRpdiBpZD0iaHRtbF8xOGU1MGI1MzE5NGI0MzcyOTQyYWM0OGE1ODdhNzcwMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTkwNzYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODhiNDQxN2Q0NWU3NDZiMTk1ZjdhZjgyMmZjMjgwODAuc2V0Q29udGVudChodG1sXzE4ZTUwYjUzMTk0YjQzNzI5NDJhYzQ4YTU4N2E3NzAwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOTNjY2E0MDQzZDViNGFkZjk1YTNjMTFmYTI0NDE1NjYuYmluZFBvcHVwKHBvcHVwXzg4YjQ0MTdkNDVlNzQ2YjE5NWY3YWY4MjJmYzI4MDgwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mODNhNjNjNGUyNjQ0NjI3YTJkOTk1YzA1ZmE1ZDAyZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Mjc2Mjk5OTkyNjA5LCAtNzMuODc1Mzg2MDAzMzEwNTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0OS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjJkMzEwM2E3ZmMwNDhlOWI4NWNkZTYxM2M5OGE5MWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNGJiOTczNjM2OTE0ZDFiODFlMDE4MGYzYjEyNTFiNCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjRiYjk3MzYzNjkxNGQxYjgxZTAxODBmM2IxMjUxYjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5MDc3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyZDMxMDNhN2ZjMDQ4ZTliODVjZGU2MTNjOThhOTFhLnNldENvbnRlbnQoaHRtbF9iNGJiOTczNjM2OTE0ZDFiODFlMDE4MGYzYjEyNTFiNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Y4M2E2M2M0ZTI2NDQ2MjdhMmQ5OTVjMDVmYTVkMDJlLmJpbmRQb3B1cChwb3B1cF9iMmQzMTAzYTdmYzA0OGU5Yjg1Y2RlNjEzYzk4YTkxYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNWIyNTU5NjEyMzhkNDg2MmFiYmE1ZTQ0NzMyMzk3NjYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI4NTg5OTk5NTk2OCwgLTczLjg3NDQ1NTAwMjQxNjQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM0MjRmYTc3OTAxZjRlZDlhZmRlMTQzMTA5NGY4MjE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmY4MDk1NGFiMjdlNGEyZGI3NzJkNTRjMzY3NGU3MTYgPSAkKCc8ZGl2IGlkPSJodG1sX2JmODA5NTRhYjI3ZTRhMmRiNzcyZDU0YzM2NzRlNzE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDc4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0MjRmYTc3OTAxZjRlZDlhZmRlMTQzMTA5NGY4MjE4LnNldENvbnRlbnQoaHRtbF9iZjgwOTU0YWIyN2U0YTJkYjc3MmQ1NGMzNjc0ZTcxNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzViMjU1OTYxMjM4ZDQ4NjJhYmJhNWU0NDczMjM5NzY2LmJpbmRQb3B1cChwb3B1cF8zNDI0ZmE3NzkwMWY0ZWQ5YWZkZTE0MzEwOTRmODIxOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMThjOWE5NjRjZmNmNDQ5ZjkzOWU2M2Q2ZWNlYjJjZmYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI5NjE5OTk4MTY4OSwgLTczLjg3MzUyODAwMjcxMTE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAwMzRkYTEwZTJkMjRlMDdhYWJjMTJkZGVkYjc0YTNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOThlMmQ0NWU5Y2UyNGU3NzgxNTVhOTgxYjY4M2ZkNGMgPSAkKCc8ZGl2IGlkPSJodG1sXzk4ZTJkNDVlOWNlMjRlNzc4MTU1YTk4MWI2ODNmZDRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDc5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwMzRkYTEwZTJkMjRlMDdhYWJjMTJkZGVkYjc0YTNjLnNldENvbnRlbnQoaHRtbF85OGUyZDQ1ZTljZTI0ZTc3ODE1NWE5ODFiNjgzZmQ0Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzE4YzlhOTY0Y2ZjZjQ0OWY5MzllNjNkNmVjZWIyY2ZmLmJpbmRQb3B1cChwb3B1cF8wMDM0ZGExMGUyZDI0ZTA3YWFiYzEyZGRlZGI3NGEzYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZjE5MjUyYWE0M2ExNGRlMzlmN2JhNjlhOWE3YzExZWUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTMxNDE5OTk4Mjk4OCwgLTczLjg3MjYxNDAwMTY2MjQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5N2YwMWQ2YTRhZTQxYmY4ODdmZWUyNTc5OTI1OWIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTE5MjkyMjYzZjJhNGYyYWIxZmMzMWM1MjliNjIwYjUgPSAkKCc8ZGl2IGlkPSJodG1sXzUxOTI5MjI2M2YyYTRmMmFiMWZjMzFjNTI5YjYyMGI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTA4MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zOTdmMDFkNmE0YWU0MWJmODg3ZmVlMjU3OTkyNTliMS5zZXRDb250ZW50KGh0bWxfNTE5MjkyMjYzZjJhNGYyYWIxZmMzMWM1MjliNjIwYjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mMTkyNTJhYTQzYTE0ZGUzOWY3YmE2OWE5YTdjMTFlZS5iaW5kUG9wdXAocG9wdXBfMzk3ZjAxZDZhNGFlNDFiZjg4N2ZlZTI1Nzk5MjU5YjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzdkOGZhMmEzYzEwNTQ4NWFiMjMxNGJiYzgxNDMwZTkyID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUzNTYzOTk5ODIxNywgLTczLjg3MDY5NTAwMjUxNTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2Q0MWZjZjk0ZjM1NDY1NjlkMmVhMDFkNGE2MDc0MjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOGEyMmYzZTgwMTk0MmFjOWQ0YTk0ZDg5ZTk3MDU2MiA9ICQoJzxkaXYgaWQ9Imh0bWxfMThhMjJmM2U4MDE5NDJhYzlkNGE5NGQ4OWU5NzA1NjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5MDgxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdkNDFmY2Y5NGYzNTQ2NTY5ZDJlYTAxZDRhNjA3NDI2LnNldENvbnRlbnQoaHRtbF8xOGEyMmYzZTgwMTk0MmFjOWQ0YTk0ZDg5ZTk3MDU2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzdkOGZhMmEzYzEwNTQ4NWFiMjMxNGJiYzgxNDMwZTkyLmJpbmRQb3B1cChwb3B1cF83ZDQxZmNmOTRmMzU0NjU2OWQyZWEwMWQ0YTYwNzQyNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZjJiMWYzYmQyMjNiNDM1ZTgxMGE0ODkyZmI0Y2VhYmMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTMzMjU5OTk5ODAzMDUsIC03My44NzE3OTIwMDA5MzUwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NzcyZDY1Y2ExN2Y0NjllYmZkZmY1ODFmODEyMjc0MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY3MGFmOWE2ZWY0ZjRhNjBiMjI5MjczOTgxNjgwOTlmID0gJCgnPGRpdiBpZD0iaHRtbF82NzBhZjlhNmVmNGY0YTYwYjIyOTI3Mzk4MTY4MDk5ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTA5MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NzcyZDY1Y2ExN2Y0NjllYmZkZmY1ODFmODEyMjc0MS5zZXRDb250ZW50KGh0bWxfNjcwYWY5YTZlZjRmNGE2MGIyMjkyNzM5ODE2ODA5OWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mMmIxZjNiZDIyM2I0MzVlODEwYTQ4OTJmYjRjZWFiYy5iaW5kUG9wdXAocG9wdXBfODc3MmQ2NWNhMTdmNDY5ZWJmZGZmNTgxZjgxMjI3NDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Y5NDZmNmY0ZTQ0NzQ4OGZiMzhlNDAwZTYyN2E3MTg3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwNDE3OTk5OTkxNjgsIC03My44OTcyODQwMDI4OTA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdjNjA3NTNkYjI5MTRlMjI4MWUwZTQyMzg3MWQ4MDM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDFhZjVmZmNjMzlkNGQ1Yjg5MTlmYjQxNjdmNGVjNTMgPSAkKCc8ZGl2IGlkPSJodG1sXzAxYWY1ZmZjYzM5ZDRkNWI4OTE5ZmI0MTY3ZjRlYzUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTA5My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YzYwNzUzZGIyOTE0ZTIyODFlMGU0MjM4NzFkODAzOC5zZXRDb250ZW50KGh0bWxfMDFhZjVmZmNjMzlkNGQ1Yjg5MTlmYjQxNjdmNGVjNTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mOTQ2ZjZmNGU0NDc0ODhmYjM4ZTQwMGU2MjdhNzE4Ny5iaW5kUG9wdXAocG9wdXBfN2M2MDc1M2RiMjkxNGUyMjgxZTBlNDIzODcxZDgwMzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2IxMzhlNDRlYzk5NzRiOGJiNGNmMTFjZTU2ZTcwNTA3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5NDQ4OTk5NzgzNzQ1LCAtNzMuODk1NjMyMDAyMjMxMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDZhZTMzNTdmYTk4NGI2Y2I5Yzc4NjQzZjM5ZTg5NTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZmJhZjM4MGZkMTg0NDZjOTkxMjE3YzBiMDQ5YmFlYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNWZiYWYzODBmZDE4NDQ2Yzk5MTIxN2MwYjA0OWJhZWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5MTg0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA2YWUzMzU3ZmE5ODRiNmNiOWM3ODY0M2YzOWU4OTUyLnNldENvbnRlbnQoaHRtbF81ZmJhZjM4MGZkMTg0NDZjOTkxMjE3YzBiMDQ5YmFlYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2IxMzhlNDRlYzk5NzRiOGJiNGNmMTFjZTU2ZTcwNTA3LmJpbmRQb3B1cChwb3B1cF8wNmFlMzM1N2ZhOTg0YjZjYjljNzg2NDNmMzllODk1MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMDc5MzUzNmVkODk5NDQzM2E3NWQxNGEzODhiY2U1Y2IgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDk0MzE5OTk5NzM3MTYsIC03My44OTU4NzUwMDI3NTY1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MTM5NjI0NzcxNjQ0MDA0Yjk5MjU4ZDYyZmZkMGE0YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MxNmE2OTIxYThhNjQyNjZhOTlkZWFmZjM2OWRlZjA4ID0gJCgnPGRpdiBpZD0iaHRtbF9jMTZhNjkyMWE4YTY0MjY2YTk5ZGVhZmYzNjlkZWYwOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTkxODUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDEzOTYyNDc3MTY0NDAwNGI5OTI1OGQ2MmZmZDBhNGMuc2V0Q29udGVudChodG1sX2MxNmE2OTIxYThhNjQyNjZhOTlkZWFmZjM2OWRlZjA4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMDc5MzUzNmVkODk5NDQzM2E3NWQxNGEzODhiY2U1Y2IuYmluZFBvcHVwKHBvcHVwXzQxMzk2MjQ3NzE2NDQwMDRiOTkyNThkNjJmZmQwYTRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hYWMwOGEyZTlkNzE0ZGFkYWMxZDg2YmJhMWU1OWMzMCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0OTUxNTk5OTczNDYyNiwgLTczLjg5NDY5MzAwMjM5MzY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q0YWY1MmFkNzFiZDQ2MTBhNDgzZTg1NzQ0NGZmOTUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWU5MTUyMGY0OTk1NDM1MWJkMjQwZmFiYjA1YTVjZGUgPSAkKCc8ZGl2IGlkPSJodG1sXzVlOTE1MjBmNDk5NTQzNTFiZDI0MGZhYmIwNWE1Y2RlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTE4Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNGFmNTJhZDcxYmQ0NjEwYTQ4M2U4NTc0NDRmZjk1MS5zZXRDb250ZW50KGh0bWxfNWU5MTUyMGY0OTk1NDM1MWJkMjQwZmFiYjA1YTVjZGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9hYWMwOGEyZTlkNzE0ZGFkYWMxZDg2YmJhMWU1OWMzMC5iaW5kUG9wdXAocG9wdXBfZDRhZjUyYWQ3MWJkNDYxMGE0ODNlODU3NDQ0ZmY5NTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2FkMjEwNDNkNTI1YjQyZDhiYjk1MGE2ODkwNGQyZTUwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4NDkzOTk5OTE3NzgsIC03My44OTc5MTcwMDI4NDUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QyYTQ4YTc0MDY3NzQ2YjQ4NWVmNjVlZDJkMjQ0YTAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTczMDc2NjQ2OGE1NDczYmJmNjBmNTcwOGMwNGFhN2UgPSAkKCc8ZGl2IGlkPSJodG1sX2E3MzA3NjY0NjhhNTQ3M2JiZjYwZjU3MDhjMDRhYTdlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ2MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMmE0OGE3NDA2Nzc0NmI0ODVlZjY1ZWQyZDI0NGEwMi5zZXRDb250ZW50KGh0bWxfYTczMDc2NjQ2OGE1NDczYmJmNjBmNTcwOGMwNGFhN2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9hZDIxMDQzZDUyNWI0MmQ4YmI5NTBhNjg5MDRkMmU1MC5iaW5kUG9wdXAocG9wdXBfZDJhNDhhNzQwNjc3NDZiNDg1ZWY2NWVkMmQyNDRhMDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzI2ODUxMDBkMjgzYTRlNzFhYjk2OTQxMWFmZWQ5NmMzID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4NDA4OTk5Nzk0NzIsIC03My44OTc2MzIwMDE3MjQ1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMmNlNzllNDcwODY0Y2ZlYjU4ZjBjNGEzNzViMGQ3NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY2YjdiN2M2NDY1MTQ5NjVhMmNkYTE1OGUwZDM4NjE1ID0gJCgnPGRpdiBpZD0iaHRtbF82NmI3YjdjNjQ2NTE0OTY1YTJjZGExNThlMGQzODYxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk0NjIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDJjZTc5ZTQ3MDg2NGNmZWI1OGYwYzRhMzc1YjBkNzQuc2V0Q29udGVudChodG1sXzY2YjdiN2M2NDY1MTQ5NjVhMmNkYTE1OGUwZDM4NjE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjY4NTEwMGQyODNhNGU3MWFiOTY5NDExYWZlZDk2YzMuYmluZFBvcHVwKHBvcHVwXzAyY2U3OWU0NzA4NjRjZmViNThmMGM0YTM3NWIwZDc0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hMmNmOTdiYjJkNDg0NmZiODJkNmE0NDVkMGY2OWQ5YyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODQ0MTk5OTkzODgzLCAtNzMuODk2NzM2MDAxMjc3MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGI0YzU3ODBkODFmNDYzNjkzNGJiYmMzZjQxMTZiZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YjU5OWJjZWNmMzk0NjdkOTRmOWI1ZmIxOWIyNWMyOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNWI1OTliY2VjZjM5NDY3ZDk0ZjliNWZiMTliMjVjMjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDYzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiNGM1NzgwZDgxZjQ2MzY5MzRiYmJjM2Y0MTE2YmQ5LnNldENvbnRlbnQoaHRtbF81YjU5OWJjZWNmMzk0NjdkOTRmOWI1ZmIxOWIyNWMyOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2EyY2Y5N2JiMmQ0ODQ2ZmI4MmQ2YTQ0NWQwZjY5ZDljLmJpbmRQb3B1cChwb3B1cF80YjRjNTc4MGQ4MWY0NjM2OTM0YmJiYzNmNDExNmJkOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTMyZWEzOGRhOWYyNGI1MmI2ZWI1ZjA2Mzc3OGMxZmIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg1OTI5OTk4MzgwNCwgLTczLjg5NTM1MTAwMDkzODM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QwZGFmOTkwZmZmMDQxMGQ4YWViOWY3NTI0NGU2ZjQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTIwMTBjZWUwOTQ4NDczODg2MGNjMzEwYTRhYzE5OWIgPSAkKCc8ZGl2IGlkPSJodG1sXzkyMDEwY2VlMDk0ODQ3Mzg4NjBjYzMxMGE0YWMxOTliIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ2NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMGRhZjk5MGZmZjA0MTBkOGFlYjlmNzUyNDRlNmY0My5zZXRDb250ZW50KGh0bWxfOTIwMTBjZWUwOTQ4NDczODg2MGNjMzEwYTRhYzE5OWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV81MzJlYTM4ZGE5ZjI0YjUyYjZlYjVmMDYzNzc4YzFmYi5iaW5kUG9wdXAocG9wdXBfZDBkYWY5OTBmZmYwNDEwZDhhZWI5Zjc1MjQ0ZTZmNDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzg5MGZiNjE2MjYyZDQwYmRhZTEwYTM2NmExYThmZWViID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4Njc5OTk5OTMwNDc0LCAtNzMuODk0NTQwMDAyODE5NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGZhMTYzNmViODQ0NGY5Zjk0NjhiYzA3ZDkzMjYzZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Y2QzOTY4OWJiZTk0N2UyODgzNDNiMTVhZTgxZjkzNCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWNkMzk2ODliYmU5NDdlMjg4MzQzYjE1YWU4MWY5MzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDY1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmYTE2MzZlYjg0NDRmOWY5NDY4YmMwN2Q5MzI2M2YzLnNldENvbnRlbnQoaHRtbF85Y2QzOTY4OWJiZTk0N2UyODgzNDNiMTVhZTgxZjkzNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzg5MGZiNjE2MjYyZDQwYmRhZTEwYTM2NmExYThmZWViLmJpbmRQb3B1cChwb3B1cF9kZmExNjM2ZWI4NDQ0ZjlmOTQ2OGJjMDdkOTMyNjNmMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfY2IzMTA4MjE1YjgzNGIzZTk1YTBjYTI3ZWNlMzIwZjQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg3NzA5OTk5MDc5MjYsIC03My44OTM2MDcwMDE1NjYxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYmU1NTY2Y2IzZjg0ZmZmYTIwN2YxNzYwYzIyOTkyMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjYWRhZDRmNTRjNzRlN2E4MDhlMDAwN2Y3YzMyNDI0ID0gJCgnPGRpdiBpZD0iaHRtbF9hY2FkYWQ0ZjU0Yzc0ZTdhODA4ZTAwMDdmN2MzMjQyNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk0NjYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2JlNTU2NmNiM2Y4NGZmZmEyMDdmMTc2MGMyMjk5MjMuc2V0Q29udGVudChodG1sX2FjYWRhZDRmNTRjNzRlN2E4MDhlMDAwN2Y3YzMyNDI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfY2IzMTA4MjE1YjgzNGIzZTk1YTBjYTI3ZWNlMzIwZjQuYmluZFBvcHVwKHBvcHVwXzNiZTU1NjZjYjNmODRmZmZhMjA3ZjE3NjBjMjI5OTIzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9iMDNjNGZjYmNhOTQ0ZmYyYTkzZWRjYTRkZWNhOWEzOSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODczMzk5OTgwNDA1LCAtNzMuODkzOTg1MDAxMjU3OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODBjOGQ0NDdkODczNDUzYjk3NjlkZGMwNDI0N2JjOTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzg4MjU5MTQ2MWU0ZjUxYTFkMDFlNWEwOGZhOTJjNSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzM4ODI1OTE0NjFlNGY1MWExZDAxZTVhMDhmYTkyYzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDY3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgwYzhkNDQ3ZDg3MzQ1M2I5NzY5ZGRjMDQyNDdiYzkyLnNldENvbnRlbnQoaHRtbF9jMzg4MjU5MTQ2MWU0ZjUxYTFkMDFlNWEwOGZhOTJjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2IwM2M0ZmNiY2E5NDRmZjJhOTNlZGNhNGRlY2E5YTM5LmJpbmRQb3B1cChwb3B1cF84MGM4ZDQ0N2Q4NzM0NTNiOTc2OWRkYzA0MjQ3YmM5MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOTBkNjg2N2EzZDQ5NGIxZjkwZTIzMGNjZjM3ZTgxYzUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg4NjI5OTk3NjQzNCwgLTczLjg5MjcwODAwMTA4MDY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNzAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI0Y2YwZGEyZWE0NjRjZjliYjQzMjE4MzFlNThiYzdkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmRlMGUwNzAzM2M3NDJjNDg1ZDA4MzdjZTAwNDkwZmIgPSAkKCc8ZGl2IGlkPSJodG1sX2JkZTBlMDcwMzNjNzQyYzQ4NWQwODM3Y2UwMDQ5MGZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ2OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNGNmMGRhMmVhNDY0Y2Y5YmI0MzIxODMxZTU4YmM3ZC5zZXRDb250ZW50KGh0bWxfYmRlMGUwNzAzM2M3NDJjNDg1ZDA4MzdjZTAwNDkwZmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85MGQ2ODY3YTNkNDk0YjFmOTBlMjMwY2NmMzdlODFjNS5iaW5kUG9wdXAocG9wdXBfMjRjZjBkYTJlYTQ2NGNmOWJiNDMyMTgzMWU1OGJjN2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzM3MTUxMzRhMTRmMTQwMjBhZmI0ZDE5MTFjNGE1YzIwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4OTY0OTk5NzQzMzgsIC03My44OTE3NDgwMDI0MTMxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMDBiZjM3MzdlNjE0YzAyOTNhMjYzMDAxNWE2YTk4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA2N2NiMWQ0MzVlNDRkZDdhZGQ1Mjg4NjI0NzExYjA3ID0gJCgnPGRpdiBpZD0iaHRtbF8wNjdjYjFkNDM1ZTQ0ZGQ3YWRkNTI4ODYyNDcxMWIwNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk0NjkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTAwYmYzNzM3ZTYxNGMwMjkzYTI2MzAwMTVhNmE5OGYuc2V0Q29udGVudChodG1sXzA2N2NiMWQ0MzVlNDRkZDdhZGQ1Mjg4NjI0NzExYjA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMzcxNTEzNGExNGYxNDAyMGFmYjRkMTkxMWM0YTVjMjAuYmluZFBvcHVwKHBvcHVwX2EwMGJmMzczN2U2MTRjMDI5M2EyNjMwMDE1YTZhOThmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xNWZlOWRhMTFmMWI0ZWI0OWFmODA4ODJkMGU3NDU5MSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODk1OTk5OTc5NDQyLCAtNzMuODkxNzk5MDAzNTg2MDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTcyMTZmMjcxNzJiNDY1MGE2OTY3ZmU0NjI0MDE5NGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNTg4MDk2NmIxMTI0ZTEyYTZmM2ZjYzFmMzgxMGQ1MiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzU4ODA5NjZiMTEyNGUxMmE2ZjNmY2MxZjM4MTBkNTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDcwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U3MjE2ZjI3MTcyYjQ2NTBhNjk2N2ZlNDYyNDAxOTRlLnNldENvbnRlbnQoaHRtbF9jNTg4MDk2NmIxMTI0ZTEyYTZmM2ZjYzFmMzgxMGQ1Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzE1ZmU5ZGExMWYxYjRlYjQ5YWY4MDg4MmQwZTc0NTkxLmJpbmRQb3B1cChwb3B1cF9lNzIxNmYyNzE3MmI0NjUwYTY5NjdmZTQ2MjQwMTk0ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYWVkMzQwNzc3ZWI4NDhhYWI3YzE2ZmMzNTFiNjQ4ZjcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDkwNTY5OTk5ODAyNiwgLTczLjg5MDg2NTAwMzEyMzYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJlNGI5N2NhY2Y5OTRkZjY5YmYzNmNjNTRlMjBiNTNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTRlNDE0NjFmODY2NDBmZjk2MmZlOTgxNTJiMjllMTUgPSAkKCc8ZGl2IGlkPSJodG1sX2E0ZTQxNDYxZjg2NjQwZmY5NjJmZTk4MTUyYjI5ZTE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ3MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZTRiOTdjYWNmOTk0ZGY2OWJmMzZjYzU0ZTIwYjUzYS5zZXRDb250ZW50KGh0bWxfYTRlNDE0NjFmODY2NDBmZjk2MmZlOTgxNTJiMjllMTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9hZWQzNDA3NzdlYjg0OGFhYjdjMTZmYzM1MWI2NDhmNy5iaW5kUG9wdXAocG9wdXBfMmU0Yjk3Y2FjZjk5NGRmNjliZjM2Y2M1NGUyMGI1M2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNjNDVjZTRhYzYxYTQyZTFiOGUyNmI0M2NmZmEyOGZjID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5MDYwOTk5NzQ4ODE0LCAtNzMuODkwODI0MDAwNjgxNzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0Ni4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDE3MGJhZjRlZjM3NDUwYjk1NGZmZjA1ZjFlZTU5ODAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MWUxOWNhZTMxZjU0ODJiODYwMWVjMDc3MWU5NTVhYyA9ICQoJzxkaXYgaWQ9Imh0bWxfOTFlMTljYWUzMWY1NDgyYjg2MDFlYzA3NzFlOTU1YWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDcyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQxNzBiYWY0ZWYzNzQ1MGI5NTRmZmYwNWYxZWU1OTgwLnNldENvbnRlbnQoaHRtbF85MWUxOWNhZTMxZjU0ODJiODYwMWVjMDc3MWU5NTVhYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzNjNDVjZTRhYzYxYTQyZTFiOGUyNmI0M2NmZmEyOGZjLmJpbmRQb3B1cChwb3B1cF80MTcwYmFmNGVmMzc0NTBiOTU0ZmZmMDVmMWVlNTk4MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZWVjNGFlMjZiZmFlNDBjN2I2ODZhNWY1MDdiZGEzZjMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDkxNTM5OTk4NjI3OCwgLTczLjg4OTkzMjAwMzI2MzUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5YTk0NDdhM2NkODRjMjU4ZmQ4ZjBhODAzOWVlNGNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2NiMjVjZDFiMTNhNDQ4YThkZTg3ZmI0ZDI3OWI0MjUgPSAkKCc8ZGl2IGlkPSJodG1sX2NjYjI1Y2QxYjEzYTQ0OGE4ZGU4N2ZiNGQyNzliNDI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5NDczLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E5YTk0NDdhM2NkODRjMjU4ZmQ4ZjBhODAzOWVlNGNlLnNldENvbnRlbnQoaHRtbF9jY2IyNWNkMWIxM2E0NDhhOGRlODdmYjRkMjc5YjQyNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2VlYzRhZTI2YmZhZTQwYzdiNjg2YTVmNTA3YmRhM2YzLmJpbmRQb3B1cChwb3B1cF9hOWE5NDQ3YTNjZDg0YzI1OGZkOGYwYTgwMzllZTRjZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZjEwOGY2MzhjNDE1NDJlMjhkNzM3YzIyZGQ4YTBhMWEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDkyNDQ5OTk3NzI5NCwgLTczLjg4OTAyMDAwMTMxODEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwN2FmMzkyYmQ4NzQyNDdhMTNhYTcyNTAzMjlhNGQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjkxMzcwYzEwNzlkNDJlYzkwNmI0YmY3ZTdkZDMzYWYgPSAkKCc8ZGl2IGlkPSJodG1sXzI5MTM3MGMxMDc5ZDQyZWM5MDZiNGJmN2U3ZGQzM2FmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5NDc0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQwN2FmMzkyYmQ4NzQyNDdhMTNhYTcyNTAzMjlhNGQzLnNldENvbnRlbnQoaHRtbF8yOTEzNzBjMTA3OWQ0MmVjOTA2YjRiZjdlN2RkMzNhZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2YxMDhmNjM4YzQxNTQyZTI4ZDczN2MyMmRkOGEwYTFhLmJpbmRQb3B1cChwb3B1cF80MDdhZjM5MmJkODc0MjQ3YTEzYWE3MjUwMzI5YTRkMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOTkwNzM3NTA0N2MxNDNjNWEyNzE0YTY5MDVjZTdiYmUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDkzNTU5OTk4NTczLCAtNzMuODg4MDI5MDAyNzk4MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzMS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmU0N2U3MjFiNWJmNDI5YWEwZDA0NTE2ZjMwYmJlNDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMzQ5MTM0ZThjN2I0ZmRlYTFkNGI2OTJiMjA1YjVmNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjM0OTEzNGU4YzdiNGZkZWExZDRiNjkyYjIwNWI1ZjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTk0NzUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmU0N2U3MjFiNWJmNDI5YWEwZDA0NTE2ZjMwYmJlNDcuc2V0Q29udGVudChodG1sX2YzNDkxMzRlOGM3YjRmZGVhMWQ0YjY5MmIyMDViNWY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOTkwNzM3NTA0N2MxNDNjNWEyNzE0YTY5MDVjZTdiYmUuYmluZFBvcHVwKHBvcHVwX2ZlNDdlNzIxYjViZjQyOWFhMGQwNDUxNmYzMGJiZTQ3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV82YzUwYmVmYTJmN2Q0Y2JmODcyYTg5ZTM4Y2MyZjZmOSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0OTQ1Mzk5OTc3OTM4NCwgLTczLjg4NzA5ODAwMzE3NDYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkODFiNThmNmY5ZjRmMDdiNjMwOTFjYzUxNWY1YTY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWQ3MjdiYmMzOGZjNGE5ZTk1NjFjNDA1NGFlMzgzYmYgPSAkKCc8ZGl2IGlkPSJodG1sXzlkNzI3YmJjMzhmYzRhOWU5NTYxYzQwNTRhZTM4M2JmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ3Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZDgxYjU4ZjZmOWY0ZjA3YjYzMDkxY2M1MTVmNWE2Ni5zZXRDb250ZW50KGh0bWxfOWQ3MjdiYmMzOGZjNGE5ZTk1NjFjNDA1NGFlMzgzYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV82YzUwYmVmYTJmN2Q0Y2JmODcyYTg5ZTM4Y2MyZjZmOS5iaW5kUG9wdXAocG9wdXBfOGQ4MWI1OGY2ZjlmNGYwN2I2MzA5MWNjNTE1ZjVhNjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2M4MzI5MzIxNWNmMzQxZTNhN2MxYTk4OWJhZmNkNGI2ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5NTUxOTk5NzUwMzcsIC03My44ODYxNjgwMDA1MzAyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI4LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMDJlZjg4ZmUzMDg0Y2NmYWFjYjRjMGU1OGZkNDE0YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFlNzc0Mjg1MGViMDQ5OGE5MzlhMTZhODA5YzcyYzkzID0gJCgnPGRpdiBpZD0iaHRtbF8xZTc3NDI4NTBlYjA0OThhOTM5YTE2YTgwOWM3MmM5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTQ3Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMDJlZjg4ZmUzMDg0Y2NmYWFjYjRjMGU1OGZkNDE0Yi5zZXRDb250ZW50KGh0bWxfMWU3NzQyODUwZWIwNDk4YTkzOWExNmE4MDljNzJjOTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9jODMyOTMyMTVjZjM0MWUzYTdjMWE5ODliYWZjZDRiNi5iaW5kUG9wdXAocG9wdXBfZDAyZWY4OGZlMzA4NGNjZmFhY2I0YzBlNThmZDQxNGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzEzOGFiNTQwMzg5MTQ3YjJhZGU2MGRkNTA5MTRlMjQzID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5NjUwOTk5Nzg2ODYsIC03My44ODUyNDEwMDM0MzkyNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDU1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzllZGFhMGE0MGY0YmFkYTU4Y2I1MjAzNDBkNjcwZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVhYzdlYmQxMzRjZTQxYmE4NmY4YzdiYjEzZjVjZGRkID0gJCgnPGRpdiBpZD0iaHRtbF81YWM3ZWJkMTM0Y2U0MWJhODZmOGM3YmIxM2Y1Y2RkZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTQ3OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYzllZGFhMGE0MGY0YmFkYTU4Y2I1MjAzNDBkNjcwZi5zZXRDb250ZW50KGh0bWxfNWFjN2ViZDEzNGNlNDFiYTg2ZjhjN2JiMTNmNWNkZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xMzhhYjU0MDM4OTE0N2IyYWRlNjBkZDUwOTE0ZTI0My5iaW5kUG9wdXAocG9wdXBfMWM5ZWRhYTBhNDBmNGJhZGE1OGNiNTIwMzQwZDY3MGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzUwZjEwYzgzMzY3NTRkZmRiNjA5MjBmMDQ0YzcxYTc1ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5NzQ0OTk5OTQwMTUsIC03My44ODQzMTEwMDIyMzMyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OTlmNTJhNDhkMjE0N2YyOGI5NjIzZGFiZTAxOGEyNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg1NGFlOWE4OGM4MTRlOTdiNmI0OGFiYzM5MTcwY2I1ID0gJCgnPGRpdiBpZD0iaHRtbF84NTRhZTlhODhjODE0ZTk3YjZiNDhhYmMzOTE3MGNiNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTQ3OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OTlmNTJhNDhkMjE0N2YyOGI5NjIzZGFiZTAxOGEyNC5zZXRDb250ZW50KGh0bWxfODU0YWU5YTg4YzgxNGU5N2I2YjQ4YWJjMzkxNzBjYjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV81MGYxMGM4MzM2NzU0ZGZkYjYwOTIwZjA0NGM3MWE3NS5iaW5kUG9wdXAocG9wdXBfOTk5ZjUyYTQ4ZDIxNDdmMjhiOTYyM2RhYmUwMThhMjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNjODZlNWU2NjhhZTQzNTBhYjMyZGE5OTNiMTU5ZjMwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5ODQ0OTk5ODMzMTY1LCAtNzMuODgzMzgwMDAyNTg3NzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzVlNTMwYmM4MThiNGQ3NTllYzRlNjgzYTI1Y2I3N2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNGJlMDQwNWE0YmM0OWEyYmQ2MGNhZDU5NjM1MWUzNiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTRiZTA0MDVhNGJjNDlhMmJkNjBjYWQ1OTYzNTFlMzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDgwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1ZTUzMGJjODE4YjRkNzU5ZWM0ZTY4M2EyNWNiNzdhLnNldENvbnRlbnQoaHRtbF8xNGJlMDQwNWE0YmM0OWEyYmQ2MGNhZDU5NjM1MWUzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzNjODZlNWU2NjhhZTQzNTBhYjMyZGE5OTNiMTU5ZjMwLmJpbmRQb3B1cChwb3B1cF8zNWU1MzBiYzgxOGI0ZDc1OWVjNGU2ODNhMjVjYjc3YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNGRhNWU5OTIwZGRmNDNlNzkxMGIxM2RiMzAyYzcwODEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDk5Mzk5OTk4OTQ0OSwgLTczLjg4MjQ1MTAwMTIxMjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg1Mzc1NTM1YTRhMDQyOGU5NDE3YTU1ZWNjOWI0MWIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWM3ZjcwYzJiY2IzNDc3Njg4OWZkZDliODY1Zjc2MWIgPSAkKCc8ZGl2IGlkPSJodG1sXzljN2Y3MGMyYmNiMzQ3NzY4ODlmZGQ5Yjg2NWY3NjFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ4MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NTM3NTUzNWE0YTA0MjhlOTQxN2E1NWVjYzliNDFiMS5zZXRDb250ZW50KGh0bWxfOWM3ZjcwYzJiY2IzNDc3Njg4OWZkZDliODY1Zjc2MWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV80ZGE1ZTk5MjBkZGY0M2U3OTEwYjEzZGIzMDJjNzA4MS5iaW5kUG9wdXAocG9wdXBfODUzNzU1MzVhNGEwNDI4ZTk0MTdhNTVlY2M5YjQxYjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzQyNjM3NGE2ZmYwNjRkOTg5ZmJhMzhlNjJmMTIyYmFiID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwMDM4OTk5OTM5OTYsIC03My44ODE1MjAwMDE0MTA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgwYjE2Nzg5MGU2MDQ5ZmViYzA1YjkyNWE5MDQ3ZDI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWZmNTNlMGQ0OGIyNDdkZDg4YTEwM2RjYzRhODY0Y2QgPSAkKCc8ZGl2IGlkPSJodG1sXzlmZjUzZTBkNDhiMjQ3ZGQ4OGExMDNkY2M0YTg2NGNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ4Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MGIxNjc4OTBlNjA0OWZlYmMwNWI5MjVhOTA0N2QyOS5zZXRDb250ZW50KGh0bWxfOWZmNTNlMGQ0OGIyNDdkZDg4YTEwM2RjYzRhODY0Y2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV80MjYzNzRhNmZmMDY0ZDk4OWZiYTM4ZTYyZjEyMmJhYi5iaW5kUG9wdXAocG9wdXBfODBiMTY3ODkwZTYwNDlmZWJjMDViOTI1YTkwNDdkMjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzFiNmM0Y2NjZGVkYTQ2ODRiMjAyYjVkMzM3NTgyMTI3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwMTM3OTk5OTAyMDksIC03My44ODA1OTMwMDEzOTc0MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MjYxY2ZjZmQ1NDE0MDhlOWFiNWNlNjUxZmEyM2UzOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0NjRlNjIyMjYwMzRhYmViNDQ2MDM3NmY3YmUyZjNmID0gJCgnPGRpdiBpZD0iaHRtbF9hNDY0ZTYyMjI2MDM0YWJlYjQ0NjAzNzZmN2JlMmYzZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk0ODMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDI2MWNmY2ZkNTQxNDA4ZTlhYjVjZTY1MWZhMjNlMzguc2V0Q29udGVudChodG1sX2E0NjRlNjIyMjYwMzRhYmViNDQ2MDM3NmY3YmUyZjNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMWI2YzRjY2NkZWRhNDY4NGIyMDJiNWQzMzc1ODIxMjcuYmluZFBvcHVwKHBvcHVwXzQyNjFjZmNmZDU0MTQwOGU5YWI1Y2U2NTFmYTIzZTM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mYTA4MDIwNWRiMzI0OTkwOTI2NDc2ZjNiN2QzOTQ2ZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MDIzNjk5OTc1NjIzLCAtNzMuODc5NjYyMDAzMjU5MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODBlMzU3ZmE2MmQ4NDMyZTg5MmE5MjVjNzAxNzY0ZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YmE3YTZmNGI0ZWI0MGJlOTM2ZmZhYmI5ZGFmY2FjOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNGJhN2E2ZjRiNGViNDBiZTkzNmZmYWJiOWRhZmNhYzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDg0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgwZTM1N2ZhNjJkODQzMmU4OTJhOTI1YzcwMTc2NGVlLnNldENvbnRlbnQoaHRtbF80YmE3YTZmNGI0ZWI0MGJlOTM2ZmZhYmI5ZGFmY2FjOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2ZhMDgwMjA1ZGIzMjQ5OTA5MjY0NzZmM2I3ZDM5NDZlLmJpbmRQb3B1cChwb3B1cF84MGUzNTdmYTYyZDg0MzJlODkyYTkyNWM3MDE3NjRlZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZTAxY2MyNjMxNmRhNDhkNTgyNTQwNjEyZGMxZGE3ZTQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTAzMzM5OTk4OTkwMzQsIC03My44Nzg3MzIwMDIxMTQyNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MmU0OTQ1MjIxYjc0NzNhOGVmYzBhMTM2ZWMyOTM2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVlNDg3OWVjZGYwYzRkZDc4ZmU4ZmUwNjBlZTA2Mjk5ID0gJCgnPGRpdiBpZD0iaHRtbF81ZTQ4NzllY2RmMGM0ZGQ3OGZlOGZlMDYwZWUwNjI5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk0ODUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDJlNDk0NTIyMWI3NDczYThlZmMwYTEzNmVjMjkzNjAuc2V0Q29udGVudChodG1sXzVlNDg3OWVjZGYwYzRkZDc4ZmU4ZmUwNjBlZTA2Mjk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZTAxY2MyNjMxNmRhNDhkNTgyNTQwNjEyZGMxZGE3ZTQuYmluZFBvcHVwKHBvcHVwXzQyZTQ5NDUyMjFiNzQ3M2E4ZWZjMGExMzZlYzI5MzYwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83Zjc3MDUwM2E1YjQ0OTdlOGI5YmFkZjcxYTVhMjhlOCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MDQzMTk5OTg1NjgxNSwgLTczLjg3NzgwMjAwMDAyMjUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2MGQxZTBmNTE2NjQ1YzJiZGJmZmY2YjA4ODdjN2QzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2NmYWRkNTYxYTM1NDIwZGI0MDFhZjFjYTJlNTc5ZTAgPSAkKCc8ZGl2IGlkPSJodG1sXzNjZmFkZDU2MWEzNTQyMGRiNDAxYWYxY2EyZTU3OWUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ4Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjBkMWUwZjUxNjY0NWMyYmRiZmZmNmIwODg3YzdkMy5zZXRDb250ZW50KGh0bWxfM2NmYWRkNTYxYTM1NDIwZGI0MDFhZjFjYTJlNTc5ZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV83Zjc3MDUwM2E1YjQ0OTdlOGI5YmFkZjcxYTVhMjhlOC5iaW5kUG9wdXAocG9wdXBfMzYwZDFlMGY1MTY2NDVjMmJkYmZmZjZiMDg4N2M3ZDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzkzYzhiMmJiODMzNjQ4MzBiZWE2NDZhNDRhNWE5OTVhID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwNTI5OTk5ODgwNDg0LCAtNzMuODc2ODc2MDAxMzgyNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGZmZTkzOGQ5YTk4NDUzYWIyOTI2MjI3ZmM3MzU4YTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZmQ3MmU4YjZhNDQ0YzVmODlhMDE3YjllY2Y4ZjY2YiA9ICQoJzxkaXYgaWQ9Imh0bWxfM2ZkNzJlOGI2YTQ0NGM1Zjg5YTAxN2I5ZWNmOGY2NmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDg3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmZmU5MzhkOWE5ODQ1M2FiMjkyNjIyN2ZjNzM1OGExLnNldENvbnRlbnQoaHRtbF8zZmQ3MmU4YjZhNDQ0YzVmODlhMDE3YjllY2Y4ZjY2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzkzYzhiMmJiODMzNjQ4MzBiZWE2NDZhNDRhNWE5OTVhLmJpbmRQb3B1cChwb3B1cF9kZmZlOTM4ZDlhOTg0NTNhYjI5MjYyMjdmYzczNThhMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNmU4ZmRlMWU2MTBkNGI4Yzg3MjdkMDViOTBmNTlkNTggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTA2MjY5OTk3OTAyNCwgLTczLjg3NTk0NTAwMzEzMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWNjZWFkY2UyN2Y3NDIzZjgzNTEyZGVkNGUwYjBlYWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMzYzYTc4N2NiY2Y0YmI0YWMyYjRhMzlmNjc4OTQ1NiA9ICQoJzxkaXYgaWQ9Imh0bWxfMzM2M2E3ODdjYmNmNGJiNGFjMmI0YTM5ZjY3ODk0NTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDg4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzljY2VhZGNlMjdmNzQyM2Y4MzUxMmRlZDRlMGIwZWFjLnNldENvbnRlbnQoaHRtbF8zMzYzYTc4N2NiY2Y0YmI0YWMyYjRhMzlmNjc4OTQ1Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzZlOGZkZTFlNjEwZDRiOGM4NzI3ZDA1YjkwZjU5ZDU4LmJpbmRQb3B1cChwb3B1cF85Y2NlYWRjZTI3Zjc0MjNmODM1MTJkZWQ0ZTBiMGVhYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMGYxNWQ0YjBiOTBhNDA1ZTgwNGYzNDQ3NjJlYThjYmUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTA3MjQ5OTk3NTY0MywgLTczLjg3NTAxNTAwMDAyNDc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhMWNmYmZjZjkxYTQxZGU4MWQ5NThkMTIzOTAwZGY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWEwYWViOTJmMjEyNGIwY2JhYzk4ZmVkNzc2OWM5MDYgPSAkKCc8ZGl2IGlkPSJodG1sX2FhMGFlYjkyZjIxMjRiMGNiYWM5OGZlZDc3NjljOTA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ4OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYTFjZmJmY2Y5MWE0MWRlODFkOTU4ZDEyMzkwMGRmNS5zZXRDb250ZW50KGh0bWxfYWEwYWViOTJmMjEyNGIwY2JhYzk4ZmVkNzc2OWM5MDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wZjE1ZDRiMGI5MGE0MDVlODA0ZjM0NDc2MmVhOGNiZS5iaW5kUG9wdXAocG9wdXBfZGExY2ZiZmNmOTFhNDFkZTgxZDk1OGQxMjM5MDBkZjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzlkZTViMjQ4OTlhYTQxZTE5YTEwNjJhZmE2NTM2MzJmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwODIyOTk5OTA1NTY2LCAtNzMuODc0MDg1MDAxMzg3MTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDlkNTY4YTI2ZDA5NGRkOTg5YjQyNDZhZWM5NDA4NDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MmE5OTdlZTdhMmE0MDMzYTIwNmY2MTBhZDk1YTc0MyA9ICQoJzxkaXYgaWQ9Imh0bWxfODJhOTk3ZWU3YTJhNDAzM2EyMDZmNjEwYWQ5NWE3NDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDkwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ5ZDU2OGEyNmQwOTRkZDk4OWI0MjQ2YWVjOTQwODQ3LnNldENvbnRlbnQoaHRtbF84MmE5OTdlZTdhMmE0MDMzYTIwNmY2MTBhZDk1YTc0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzlkZTViMjQ4OTlhYTQxZTE5YTEwNjJhZmE2NTM2MzJmLmJpbmRQb3B1cChwb3B1cF80OWQ1NjhhMjZkMDk0ZGQ5ODliNDI0NmFlYzk0MDg0NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMmMxODZmZGM5N2U1NGJjY2JiOTJmYTE5NmUzNjRiMTAgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTA5MTQ5OTk5NTEyMzUsIC03My44NzMxNjAwMDI5NjQzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MTYzNDY4NDY4YzM0YzhlOTM4YjBhYTIzNzJjOTk1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBkMjdkM2NlYTUwMjQ1ZDlhYTkyYTM1ZGI2ZDkwNTE0ID0gJCgnPGRpdiBpZD0iaHRtbF8wZDI3ZDNjZWE1MDI0NWQ5YWE5MmEzNWRiNmQ5MDUxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk0OTEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTE2MzQ2ODQ2OGMzNGM4ZTkzOGIwYWEyMzcyYzk5NTkuc2V0Q29udGVudChodG1sXzBkMjdkM2NlYTUwMjQ1ZDlhYTkyYTM1ZGI2ZDkwNTE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMmMxODZmZGM5N2U1NGJjY2JiOTJmYTE5NmUzNjRiMTAuYmluZFBvcHVwKHBvcHVwXzkxNjM0Njg0NjhjMzRjOGU5MzhiMGFhMjM3MmM5OTU5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8wNmQxNjQ3MzllYTg0YWFiYjczMTYxZTYyNWVmYmFiOCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTA0NDk5OTkzNDA0NSwgLTczLjg3MjIxMDAwMDIxMzY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E0ZGY2MWE2Y2NhNTRlNjhiYTZiYTI4ODcxYTI0MGM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTY3YTgyYjE4ODMyNGE3YzhhNjU3NDBkYTg4ZWVjMTYgPSAkKCc8ZGl2IGlkPSJodG1sX2U2N2E4MmIxODgzMjRhN2M4YTY1NzQwZGE4OGVlYzE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ5Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNGRmNjFhNmNjYTU0ZTY4YmE2YmEyODg3MWEyNDBjNS5zZXRDb250ZW50KGh0bWxfZTY3YTgyYjE4ODMyNGE3YzhhNjU3NDBkYTg4ZWVjMTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wNmQxNjQ3MzllYTg0YWFiYjczMTYxZTYyNWVmYmFiOC5iaW5kUG9wdXAocG9wdXBfYTRkZjYxYTZjY2E1NGU2OGJhNmJhMjg4NzFhMjQwYzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzg2MjM5NjM3YWU5NDRmYWQ4OWY3ODBlODM1OWM1Y2NlID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUxMjYwOTk5NzgwMTY1LCAtNzMuODcxNjYzMDAwMzAzNDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWE5NDczYWU3MWQzNGFjMGI1OGJmNjVlNjg3MWY3ZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZmE4NzM2N2UyMjQ0NGE1OGVjMDk2NTg4YjI4MTIzMyA9ICQoJzxkaXYgaWQ9Imh0bWxfY2ZhODczNjdlMjI0NDRhNThlYzA5NjU4OGIyODEyMzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NTE0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VhOTQ3M2FlNzFkMzRhYzBiNThiZjY1ZTY4NzFmN2Q2LnNldENvbnRlbnQoaHRtbF9jZmE4NzM2N2UyMjQ0NGE1OGVjMDk2NTg4YjI4MTIzMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzg2MjM5NjM3YWU5NDRmYWQ4OWY3ODBlODM1OWM1Y2NlLmJpbmRQb3B1cChwb3B1cF9lYTk0NzNhZTcxZDM0YWMwYjU4YmY2NWU2ODcxZjdkNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZmQ3YTFjMmYxYzI3NGYxNDk5OWMzMzllYjJiMDg0NmMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg1NDY5OTk5OTAxMSwgLTczLjg5NTg0MDAwMjg0ODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODNmYTk1M2I2Y2JlNGI5ZGI4MDQzMDQ5OTZkOThjM2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzBlOGZmZGRmZTY0NGY4OTQ2Zjg2Y2VjZWQ2MWFhZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYzMwZThmZmRkZmU2NDRmODk0NmY4NmNlY2VkNjFhYWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NTE1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgzZmE5NTNiNmNiZTRiOWRiODA0MzA0OTk2ZDk4YzNiLnNldENvbnRlbnQoaHRtbF9jMzBlOGZmZGRmZTY0NGY4OTQ2Zjg2Y2VjZWQ2MWFhZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2ZkN2ExYzJmMWMyNzRmMTQ5OTljMzM5ZWIyYjA4NDZjLmJpbmRQb3B1cChwb3B1cF84M2ZhOTUzYjZjYmU0YjlkYjgwNDMwNDk5NmQ5OGMzYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMmEwZWJiZDA5MDA0NGYwZTgzOGNkMWRlZmZmOTE4ZDYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTE0NDM5OTk5MzM1ODUsIC03My44NzA4OTIwMDI2MTQ4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lM2E4M2JkZGQ1Nzg0YzNlOTgxM2M4MDEyOTU1ZGQxZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhmNDczNDhhOTlmZTQ4MWRiYWMwNGY4ZDM4ODI3YjAwID0gJCgnPGRpdiBpZD0iaHRtbF84ZjQ3MzQ4YTk5ZmU0ODFkYmFjMDRmOGQzODgyN2IwMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk1MTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTNhODNiZGRkNTc4NGMzZTk4MTNjODAxMjk1NWRkMWQuc2V0Q29udGVudChodG1sXzhmNDczNDhhOTlmZTQ4MWRiYWMwNGY4ZDM4ODI3YjAwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMmEwZWJiZDA5MDA0NGYwZTgzOGNkMWRlZmZmOTE4ZDYuYmluZFBvcHVwKHBvcHVwX2UzYTgzYmRkZDU3ODRjM2U5ODEzYzgwMTI5NTVkZDFkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xMTdmMTZhMjgyNjY0MDkwOTAxMGI2ZGE4OWU4N2IzNCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODUyMjk5OTk0NzYzLCAtNzMuODk2MDU3MDAwMzAwMzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzRlNDdkYzAwMTg5NGUwNWEzYzA3ZmY2ZjI2OWExYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YjNkMTcyZGExMDA0Yzg4OGYxNmNmZDg1ZWQyNDA3MiA9ICQoJzxkaXYgaWQ9Imh0bWxfN2IzZDE3MmRhMTAwNGM4ODhmMTZjZmQ4NWVkMjQwNzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NTE5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0ZTQ3ZGMwMDE4OTRlMDVhM2MwN2ZmNmYyNjlhMWM0LnNldENvbnRlbnQoaHRtbF83YjNkMTcyZGExMDA0Yzg4OGYxNmNmZDg1ZWQyNDA3Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzExN2YxNmEyODI2NjQwOTA5MDEwYjZkYTg5ZTg3YjM0LmJpbmRQb3B1cChwb3B1cF8zNGU0N2RjMDAxODk0ZTA1YTNjMDdmZjZmMjY5YTFjNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNzljMjNhNTljNmNkNDY0MzkyY2Y0MmY0MzkzM2E5MTkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg0OTY5OTk4MzEyOTYsIC03My44OTYzMDEwMDAyMzYxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZWJlOThkYzc4Mjk0Mzk4ODlmNmY5M2NkZmI3NTI2YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmYjZiMDI1NDE5NDQxOWY5NDhhMWFhNDJiNTQyNDE0ID0gJCgnPGRpdiBpZD0iaHRtbF80ZmI2YjAyNTQxOTQ0MTlmOTQ4YTFhYTQyYjU0MjQxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk1MjAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGViZTk4ZGM3ODI5NDM5ODg5ZjZmOTNjZGZiNzUyNmIuc2V0Q29udGVudChodG1sXzRmYjZiMDI1NDE5NDQxOWY5NDhhMWFhNDJiNTQyNDE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNzljMjNhNTljNmNkNDY0MzkyY2Y0MmY0MzkzM2E5MTkuYmluZFBvcHVwKHBvcHVwXzhlYmU5OGRjNzgyOTQzOTg4OWY2ZjkzY2RmYjc1MjZiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jZjIyNWNjMTIxNTQ0NWFjYWFjNjJhNTAwMTdhOWU1MyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzEzNDk5OTc1ODYxLCAtNzMuODkyNDA5MDAyNTMwMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1NS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWNhMjUzMzdiMmZhNGI2NmI0Y2ZlNzU1Yjg2NzgxNjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYjExOGVlNDRiZTY0Njg0YTQ0ZDRmZDc3ZTk2Njc1MyA9ICQoJzxkaXYgaWQ9Imh0bWxfZGIxMThlZTQ0YmU2NDY4NGE0NGQ0ZmQ3N2U5NjY3NTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NTI5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVjYTI1MzM3YjJmYTRiNjZiNGNmZTc1NWI4Njc4MTY4LnNldENvbnRlbnQoaHRtbF9kYjExOGVlNDRiZTY0Njg0YTQ0ZDRmZDc3ZTk2Njc1Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2NmMjI1Y2MxMjE1NDQ1YWNhYWM2MmE1MDAxN2E5ZTUzLmJpbmRQb3B1cChwb3B1cF81Y2EyNTMzN2IyZmE0YjY2YjRjZmU3NTViODY3ODE2OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNjUwMjY4ZjQyOGYxNDU1MTgyNmIwNzJiNjNkMDZmMDcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDcyMzc5OTk5Njg0MSwgLTczLjg5MTUwNTAwMjQ0Nzc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBkZGZiMGNmMzU4NDQxNGNhODUwNzg2ZTRiMTA0ZGIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjQ5NjdlZDI0MWY3NDRlODk1Yzg1NjE2OWIxZjU2Y2EgPSAkKCc8ZGl2IGlkPSJodG1sX2Y0OTY3ZWQyNDFmNzQ0ZTg5NWM4NTYxNjliMWY1NmNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTUzMC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZGRmYjBjZjM1ODQ0MTRjYTg1MDc4NmU0YjEwNGRiMS5zZXRDb250ZW50KGh0bWxfZjQ5NjdlZDI0MWY3NDRlODk1Yzg1NjE2OWIxZjU2Y2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV82NTAyNjhmNDI4ZjE0NTUxODI2YjA3MmI2M2QwNmYwNy5iaW5kUG9wdXAocG9wdXBfMGRkZmIwY2YzNTg0NDE0Y2E4NTA3ODZlNGIxMDRkYjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzIzZDlhODgyMGM3YTQ5ZjdiN2Q4YWEyMzdkYzA3OGE2ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MzQyOTk5OTAwODQsIC03My44OTA1NzYwMDAyMTc3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MzQ2NDhiYTgzMmQ0MGFmYTVhYzNmM2Q0ZGUzNTYwYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk1NTNhMjM4N2Q0NjQxNTliZDEyMDI3ZjIzM2E1Y2ZhID0gJCgnPGRpdiBpZD0iaHRtbF85NTUzYTIzODdkNDY0MTU5YmQxMjAyN2YyMzNhNWNmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk1MzEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzM0NjQ4YmE4MzJkNDBhZmE1YWMzZjNkNGRlMzU2MGMuc2V0Q29udGVudChodG1sXzk1NTNhMjM4N2Q0NjQxNTliZDEyMDI3ZjIzM2E1Y2ZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjNkOWE4ODIwYzdhNDlmN2I3ZDhhYTIzN2RjMDc4YTYuYmluZFBvcHVwKHBvcHVwXzczNDY0OGJhODMyZDQwYWZhNWFjM2YzZDRkZTM1NjBjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9kZjBiNWUzMzI3NDQ0YTc2YjdlZGU5OTAxNzQ3NTA2OSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzQ0NTk5OTkxOTA5NCwgLTczLjg4OTY1MTAwMDc2NjY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEyNzdmNzIxZWM1ZTRmZGJiOTRlOTBhZTAzNDc5Nzg4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDQyNGRiZTNkNDk4NGFjZmFiNWNlNDdkMjNiYTJhOWMgPSAkKCc8ZGl2IGlkPSJodG1sXzQ0MjRkYmUzZDQ5ODRhY2ZhYjVjZTQ3ZDIzYmEyYTljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTUzMi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMjc3ZjcyMWVjNWU0ZmRiYjk0ZTkwYWUwMzQ3OTc4OC5zZXRDb250ZW50KGh0bWxfNDQyNGRiZTNkNDk4NGFjZmFiNWNlNDdkMjNiYTJhOWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9kZjBiNWUzMzI3NDQ0YTc2YjdlZGU5OTAxNzQ3NTA2OS5iaW5kUG9wdXAocG9wdXBfMTI3N2Y3MjFlYzVlNGZkYmI5NGU5MGFlMDM0Nzk3ODgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzlkMGE3YmYxZDgwMDQyYTc4MTYyOTYyMGZhMmM4MjRkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NTQyOTk5NzgxNTQsIC03My44ODg3NTYwMDMxMDIxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81N2EwYzE2YjdmMTk0YWU3YjZkYWQxMGUxM2E5YWEyNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VmOGQ2M2Y1NjliOTRjNzc5NGIyZjJlZDM2NmRjZjU5ID0gJCgnPGRpdiBpZD0iaHRtbF9lZjhkNjNmNTY5Yjk0Yzc3OTRiMmYyZWQzNjZkY2Y1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk1MzMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTdhMGMxNmI3ZjE5NGFlN2I2ZGFkMTBlMTNhOWFhMjYuc2V0Q29udGVudChodG1sX2VmOGQ2M2Y1NjliOTRjNzc5NGIyZjJlZDM2NmRjZjU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOWQwYTdiZjFkODAwNDJhNzgxNjI5NjIwZmEyYzgyNGQuYmluZFBvcHVwKHBvcHVwXzU3YTBjMTZiN2YxOTRhZTdiNmRhZDEwZTEzYTlhYTI2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV80NjhhZjZiNzUwODU0MjdhYjNkZDAzMDNlOTc3NmVmYSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzU2MDk5OTc3NDA5NSwgLTczLjg5ODMzNjAwMDc4NjczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyYTQzNzJjY2VlZTQzNWI4MDgxY2ExNmNiZTBmNjc5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzQxYmQ4MThlMjlhNDMzNWJmODVjZmM1ZTJjNmFkZDMgPSAkKCc8ZGl2IGlkPSJodG1sXzM0MWJkODE4ZTI5YTQzMzViZjg1Y2ZjNWUyYzZhZGQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTUzNy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMmE0MzcyY2NlZWU0MzViODA4MWNhMTZjYmUwZjY3OS5zZXRDb250ZW50KGh0bWxfMzQxYmQ4MThlMjlhNDMzNWJmODVjZmM1ZTJjNmFkZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV80NjhhZjZiNzUwODU0MjdhYjNkZDAzMDNlOTc3NmVmYS5iaW5kUG9wdXAocG9wdXBfZjJhNDM3MmNjZWVlNDM1YjgwODFjYTE2Y2JlMGY2NzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzc5ZDY0MDdiNzVmNDRiNTBhZjQ2ZDJkNzZmMWEyMzExID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NTg5OTk5ODI5MDc0LCAtNzMuODk3NDgzMDAxODE2MjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmY5N2VhMzVhZGM4NDMyNDlkMWQxNzJhZGYzOTFjNmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMTE4ZGJiMjc1MzI0NDM3YTJkOWQxMWI3MWE1ZDUzMCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjExOGRiYjI3NTMyNDQzN2EyZDlkMTFiNzFhNWQ1MzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NTM4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmOTdlYTM1YWRjODQzMjQ5ZDFkMTcyYWRmMzkxYzZiLnNldENvbnRlbnQoaHRtbF9mMTE4ZGJiMjc1MzI0NDM3YTJkOWQxMWI3MWE1ZDUzMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzc5ZDY0MDdiNzVmNDRiNTBhZjQ2ZDJkNzZmMWEyMzExLmJpbmRQb3B1cChwb3B1cF9iZjk3ZWEzNWFkYzg0MzI0OWQxZDE3MmFkZjM5MWM2YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOWJjNTNmZjg1NTdlNDYxMmJkZGE0MDc1YWE4NTU0ZmEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDc2MjI5OTk5ODQ0OCwgLTczLjg5NjU3NzAwMDg1MjE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwYmExOWI5NjAxNzQ5Nzk4NjUyNTUwNzc4MzA2Zjk3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTM1MjE1MDM3NWY0NGQ1NWIyZTk3ODZjNzhiMWMyZjAgPSAkKCc8ZGl2IGlkPSJodG1sXzEzNTIxNTAzNzVmNDRkNTViMmU5Nzg2Yzc4YjFjMmYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTUzOS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MGJhMTliOTYwMTc0OTc5ODY1MjU1MDc3ODMwNmY5Ny5zZXRDb250ZW50KGh0bWxfMTM1MjE1MDM3NWY0NGQ1NWIyZTk3ODZjNzhiMWMyZjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85YmM1M2ZmODU1N2U0NjEyYmRkYTQwNzVhYTg1NTRmYS5iaW5kUG9wdXAocG9wdXBfNzBiYTE5Yjk2MDE3NDk3OTg2NTI1NTA3NzgzMDZmOTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Q3YTVjNDk3ZTFmNTRjNGI4ZDViZDk1MmUyNjc5ODMwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NTc0OTk5ODI0MDc0LCAtNzMuODk1ODI5MDAyODQ3NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzc3NTA0MWY3YTFhNDQxOWJjMDNhYzg4MmRkZTllYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZjM5OGJkNzBhOWU0NGI2YTIyZjBiZGNjY2NmOTAxMCA9ICQoJzxkaXYgaWQ9Imh0bWxfM2YzOThiZDcwYTllNDRiNmEyMmYwYmRjY2NjZjkwMTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NTQwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM3NzUwNDFmN2ExYTQ0MTliYzAzYWM4ODJkZGU5ZWM0LnNldENvbnRlbnQoaHRtbF8zZjM5OGJkNzBhOWU0NGI2YTIyZjBiZGNjY2NmOTAxMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Q3YTVjNDk3ZTFmNTRjNGI4ZDViZDk1MmUyNjc5ODMwLmJpbmRQb3B1cChwb3B1cF8zNzc1MDQxZjdhMWE0NDE5YmMwM2FjODgyZGRlOWVjNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZjRiYzI1MDc1NmQyNDBjM2JiZmQxMzc4NWM0NTQzNzkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDcwMTQ5OTk5NjY0LCAtNzMuODk1NTMwMDAzMDk5ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjBmMTg0NTc2NWVkNDhmZWIxODA3ZDQ1YzE0ZDA3ZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MzFkMGNhZGMyOTY0YmJhODNkZTZhZDFiZGMyOWEzNCA9ICQoJzxkaXYgaWQ9Imh0bWxfNjMxZDBjYWRjMjk2NGJiYTgzZGU2YWQxYmRjMjlhMzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5Njg0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwZjE4NDU3NjVlZDQ4ZmViMTgwN2Q0NWMxNGQwN2RiLnNldENvbnRlbnQoaHRtbF82MzFkMGNhZGMyOTY0YmJhODNkZTZhZDFiZGMyOWEzNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Y0YmMyNTA3NTZkMjQwYzNiYmZkMTM3ODVjNDU0Mzc5LmJpbmRQb3B1cChwb3B1cF8yMGYxODQ1NzY1ZWQ0OGZlYjE4MDdkNDVjMTRkMDdkYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfN2QxODVjMmFhZWYzNDc3MWJkZTkyNzY5NzNkY2EwM2MgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDc0ODA5OTk4MzI4OTUsIC03My44NzIwNjgwMDA0Mzc0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZGU3OGJhMTk5N2Q0OTJlYTgxNDkzYjkyODFmZjczNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1ZjBiZTQzMzM2YzQ4Y2FiNGI3NWRiYWE4MTliYjI4ID0gJCgnPGRpdiBpZD0iaHRtbF8wNWYwYmU0MzMzNmM0OGNhYjRiNzVkYmFhODE5YmIyOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk5OTUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2RlNzhiYTE5OTdkNDkyZWE4MTQ5M2I5MjgxZmY3Mzcuc2V0Q29udGVudChodG1sXzA1ZjBiZTQzMzM2YzQ4Y2FiNGI3NWRiYWE4MTliYjI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfN2QxODVjMmFhZWYzNDc3MWJkZTkyNzY5NzNkY2EwM2MuYmluZFBvcHVwKHBvcHVwXzNkZTc4YmExOTk3ZDQ5MmVhODE0OTNiOTI4MWZmNzM3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jODNjYWU0NmJjZmI0YWVkOTVlMDJjYmQ5ZjUwMzk5YiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzY1NDk5OTg5MDkzLCAtNzMuODcwNzA5MDAxNTAyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYmYxMTk3NWNjZGU0ZDA5OTllYTM2OWY4YWZjZGEwYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlNzJiNzhjNWNlNDQzMWFiMWE0Yzg2MzU2ODk4OGU2ID0gJCgnPGRpdiBpZD0iaHRtbF80ZTcyYjc4YzVjZTQ0MzFhYjFhNGM4NjM1Njg5ODhlNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk5OTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2JmMTE5NzVjY2RlNGQwOTk5ZWEzNjlmOGFmY2RhMGEuc2V0Q29udGVudChodG1sXzRlNzJiNzhjNWNlNDQzMWFiMWE0Yzg2MzU2ODk4OGU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYzgzY2FlNDZiY2ZiNGFlZDk1ZTAyY2JkOWY1MDM5OWIuYmluZFBvcHVwKHBvcHVwXzNiZjExOTc1Y2NkZTRkMDk5OWVhMzY5ZjhhZmNkYTBhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8zZTNkNzQ4YTUxODg0Y2E0OWY4NDVlNTk4NmQzZjE3NCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODE1Njk5OTkyOTEyLCAtNzMuODcyMjIwMDAwODMzNjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWQ4YjI5NDQ0N2U1NGU5MTk3YWI1MjdlODNjYjk2NzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYmM5ZDFhNzBiMjY0NmNhYmM2ZjY0N2RmMjFmNTI4NSA9ICQoJzxkaXYgaWQ9Imh0bWxfMGJjOWQxYTcwYjI2NDZjYWJjNmY2NDdkZjIxZjUyODUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjYwMDA4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkOGIyOTQ0NDdlNTRlOTE5N2FiNTI3ZTgzY2I5Njc3LnNldENvbnRlbnQoaHRtbF8wYmM5ZDFhNzBiMjY0NmNhYmM2ZjY0N2RmMjFmNTI4NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzNlM2Q3NDhhNTE4ODRjYTQ5Zjg0NWU1OTg2ZDNmMTc0LmJpbmRQb3B1cChwb3B1cF9lZDhiMjk0NDQ3ZTU0ZTkxOTdhYjUyN2U4M2NiOTY3NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZGM1ZDdhZTU0MDNhNGUwNDkzZjZjYWQxZWIxYjFlNzcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDgzMDc5OTk5MDc0MDQsIC03My44NzEwMzAwMDI1ODQ1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNTZlOTAwNGNlMDU0NjAyOWRlMzQ5YTIyYTliNzhmMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxZmRiYjQwMjY4MTQ2NDJhODU0ZTMwZmE5NDhmODQ1ID0gJCgnPGRpdiBpZD0iaHRtbF9kMWZkYmI0MDI2ODE0NjQyYTg1NGUzMGZhOTQ4Zjg0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjAwMDkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjU2ZTkwMDRjZTA1NDYwMjlkZTM0OWEyMmE5Yjc4ZjIuc2V0Q29udGVudChodG1sX2QxZmRiYjQwMjY4MTQ2NDJhODU0ZTMwZmE5NDhmODQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZGM1ZDdhZTU0MDNhNGUwNDkzZjZjYWQxZWIxYjFlNzcuYmluZFBvcHVwKHBvcHVwX2I1NmU5MDA0Y2UwNTQ2MDI5ZGUzNDlhMjJhOWI3OGYyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yZDcyZmE1ODYxYjQ0ZjY0OTFhMmI1NjA4NDAyM2ZjNSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODE1NDk5OTg1NzIzLCAtNzMuODcwOTU5MDAxNzQ2NDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzAzN2JmZTFjMzk4NGQ4ZTgxOThlYjJlOTQ0YTAyZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MjM3MjBlNzEyMWM0YWE3OTI2YzgzNzJlNDExMDhlOCA9ICQoJzxkaXYgaWQ9Imh0bWxfOTIzNzIwZTcxMjFjNGFhNzkyNmM4MzcyZTQxMTA4ZTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjYwMDEwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwMzdiZmUxYzM5ODRkOGU4MTk4ZWIyZTk0NGEwMmU0LnNldENvbnRlbnQoaHRtbF85MjM3MjBlNzEyMWM0YWE3OTI2YzgzNzJlNDExMDhlOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzJkNzJmYTU4NjFiNDRmNjQ5MWEyYjU2MDg0MDIzZmM1LmJpbmRQb3B1cChwb3B1cF9jMDM3YmZlMWMzOTg0ZDhlODE5OGViMmU5NDRhMDJlNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOGEzNWRhYWJiODg5NGQyYmFlNDJkNzQzOGM1ZTIxOGQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDk2Nzg5OTk5MTUxMywgLTczLjg5ODQ3NzAwMDc1Nzk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QyZTk2MTg1NjU5YzQ4OGViYzU5NjYyMmFjM2I5Nzg2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDg4ZTk3Y2Q2MmJmNGMyZWE2ZmRhYmE2MzRmNjlhMzYgPSAkKCc8ZGl2IGlkPSJodG1sXzA4OGU5N2NkNjJiZjRjMmVhNmZkYWJhNjM0ZjY5YTM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42MzU4MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMmU5NjE4NTY1OWM0ODhlYmM1OTY2MjJhYzNiOTc4Ni5zZXRDb250ZW50KGh0bWxfMDg4ZTk3Y2Q2MmJmNGMyZWE2ZmRhYmE2MzRmNjlhMzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV84YTM1ZGFhYmI4ODk0ZDJiYWU0MmQ3NDM4YzVlMjE4ZC5iaW5kUG9wdXAocG9wdXBfZDJlOTYxODU2NTljNDg4ZWJjNTk2NjIyYWMzYjk3ODYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzA2Y2FiY2Y5MzMzNDRhNTU4M2E1NTU5ZDMzYWJlODIxID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5Mjk5OTk5OTUzNzMsIC03My44OTc1NzcwMDEwMDE4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YWQ1Mzc0MjU3MTY0YzI4YjUzYTY3MGYyMDM2ZjFkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2YTAzNjU2ZmQ1NDRmZmJhNzE5OGU2MmNkNTI5NDRjID0gJCgnPGRpdiBpZD0iaHRtbF9mNmEwMzY1NmZkNTQ0ZmZiYTcxOThlNjJjZDUyOTQ0YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjM3ODQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGFkNTM3NDI1NzE2NGMyOGI1M2E2NzBmMjAzNmYxZGQuc2V0Q29udGVudChodG1sX2Y2YTAzNjU2ZmQ1NDRmZmJhNzE5OGU2MmNkNTI5NDRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMDZjYWJjZjkzMzM0NGE1NTgzYTU1NTlkMzNhYmU4MjEuYmluZFBvcHVwKHBvcHVwXzhhZDUzNzQyNTcxNjRjMjhiNTNhNjcwZjIwMzZmMWRkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jZWQwODE0ODVhYTU0OGQwYmI1OTI5YmU3NDhjMThjMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1OTg2NDk5OTgxOTkwNCwgLTczLjg5ODQ4NTAwMzIzNjcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5NWRmZGMzYjZkZDQwMjE4MjdkZTQ2M2EwNDljODFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGZlYWM1YTZkNmYyNGQzMThjNTU2MDkzMTgzNGU1MWMgPSAkKCc8ZGl2IGlkPSJodG1sXzRmZWFjNWE2ZDZmMjRkMzE4YzU1NjA5MzE4MzRlNTFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42NDIzNC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOTVkZmRjM2I2ZGQ0MDIxODI3ZGU0NjNhMDQ5YzgxYS5zZXRDb250ZW50KGh0bWxfNGZlYWM1YTZkNmYyNGQzMThjNTU2MDkzMTgzNGU1MWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9jZWQwODE0ODVhYTU0OGQwYmI1OTI5YmU3NDhjMThjMi5iaW5kUG9wdXAocG9wdXBfZjk1ZGZkYzNiNmRkNDAyMTgyN2RlNDYzYTA0OWM4MWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2I0ZDEwMTE5NWU1NDQ2Yjg5OWRhZDdjNzE5NWUwMmQzID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU0NjkwOTk5OTQyNTQsIC03My44OTg2NDEwMDA1ODcyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZGUxODEwNWFjZDU0NTc1YTBmYTU5MDUwNzhkYzhmNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZhMGVkMTkwNzNjNDQ5ZjRiNjFlMzJkYjUzNmY5ZDY3ID0gJCgnPGRpdiBpZD0iaHRtbF9mYTBlZDE5MDczYzQ0OWY0YjYxZTMyZGI1MzZmOWQ2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjQyNDAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWRlMTgxMDVhY2Q1NDU3NWEwZmE1OTA1MDc4ZGM4ZjUuc2V0Q29udGVudChodG1sX2ZhMGVkMTkwNzNjNDQ5ZjRiNjFlMzJkYjUzNmY5ZDY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYjRkMTAxMTk1ZTU0NDZiODk5ZGFkN2M3MTk1ZTAyZDMuYmluZFBvcHVwKHBvcHVwXzVkZTE4MTA1YWNkNTQ1NzVhMGZhNTkwNTA3OGRjOGY1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83NGFmMjI5MzhkZjI0NGYxODAwZTQxZTM3MWFiNWI3OSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0OTc2NDk5OTg2MzUxLCAtNzMuODk2MDk5MDAwMTg4MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmNjZTI3YWY5YTYwNDk5YWFjMWZiYWY5M2IzMjY3OWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZTdjNjk5MGU3Yjk0OWU0YjNkNWExZGM5OGNkMjNkNSA9ICQoJzxkaXYgaWQ9Imh0bWxfYmU3YzY5OTBlN2I5NDllNGIzZDVhMWRjOThjZDIzZDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY0NDUzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJjY2UyN2FmOWE2MDQ5OWFhYzFmYmFmOTNiMzI2NzlmLnNldENvbnRlbnQoaHRtbF9iZTdjNjk5MGU3Yjk0OWU0YjNkNWExZGM5OGNkMjNkNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzc0YWYyMjkzOGRmMjQ0ZjE4MDBlNDFlMzcxYWI1Yjc5LmJpbmRQb3B1cChwb3B1cF8yY2NlMjdhZjlhNjA0OTlhYWMxZmJhZjkzYjMyNjc5ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYThmODIwZjMwYTdmNDM3MThkOGQ1ZmIwNzMwYWI5NzAgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDkwMDQ5OTk5ODIzMjYsIC03My44OTY4OTgwMDAzNzk4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMDU2ZWYyMGIxNGU0ZWYxODU5NGIwYjExYWQ3OTBmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IxMjA5MmQ5NGJhYzRlMmQ4Y2NiZTM5NGY0ZTg1ZjA3ID0gJCgnPGRpdiBpZD0iaHRtbF9iMTIwOTJkOTRiYWM0ZTJkOGNjYmUzOTRmNGU4NWYwNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjQ1MTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjA1NmVmMjBiMTRlNGVmMTg1OTRiMGIxMWFkNzkwZjguc2V0Q29udGVudChodG1sX2IxMjA5MmQ5NGJhYzRlMmQ4Y2NiZTM5NGY0ZTg1ZjA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYThmODIwZjMwYTdmNDM3MThkOGQ1ZmIwNzMwYWI5NzAuYmluZFBvcHVwKHBvcHVwXzIwNTZlZjIwYjE0ZTRlZjE4NTk0YjBiMTFhZDc5MGY4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83ZTFjYWZmZDNlYzA0ODc1OGU3Y2E2ZGUyODJjYTNmYiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0OTM0Nzk5OTkxOTI2LCAtNzMuODk2ODc2MDAyNDUwMThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGNhZWYxNDllOGFiNDY0NmI4YzU2MTUyMDU0YTdjMzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMGEyMzQyNDM2ZTI0NDRiYWZmNmY1NzY1NzZjOTVkNSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDBhMjM0MjQzNmUyNDQ0YmFmZjZmNTc2NTc2Yzk1ZDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY0NTI5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRjYWVmMTQ5ZThhYjQ2NDZiOGM1NjE1MjA1NGE3YzMyLnNldENvbnRlbnQoaHRtbF9kMGEyMzQyNDM2ZTI0NDRiYWZmNmY1NzY1NzZjOTVkNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzdlMWNhZmZkM2VjMDQ4NzU4ZTdjYTZkZTI4MmNhM2ZiLmJpbmRQb3B1cChwb3B1cF80Y2FlZjE0OWU4YWI0NjQ2YjhjNTYxNTIwNTRhN2MzMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYTI3NTNkYzVlYWNkNDM5NDlhMzM1YmI0MzI5YTg2ODggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg4MzI5OTk3Mzc2MTYsIC03My44OTU1MDEwMDA2MTQ3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZTVjNTA0ZTM5OWU0ZDVlYjk0MmUwM2M5MzA5NDZjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1YjI2MmExYWJhMTRhMmNhYzZiOTE2NGYzMmZmNzhlID0gJCgnPGRpdiBpZD0iaHRtbF8wNWIyNjJhMWFiYTE0YTJjYWM2YjkxNjRmMzJmZjc4ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjQ1MzcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWU1YzUwNGUzOTllNGQ1ZWI5NDJlMDNjOTMwOTQ2Yzkuc2V0Q29udGVudChodG1sXzA1YjI2MmExYWJhMTRhMmNhYzZiOTE2NGYzMmZmNzhlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYTI3NTNkYzVlYWNkNDM5NDlhMzM1YmI0MzI5YTg2ODguYmluZFBvcHVwKHBvcHVwX2FlNWM1MDRlMzk5ZTRkNWViOTQyZTAzYzkzMDk0NmM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV84YTRjMTg2NTFiZjg0MzhlYmUxOGM1M2Q4MDA4YzVjNSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODMwNzk5OTgxNzk2LCAtNzMuODk1MjU1MDAzNDYyMTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGUxMzc2NjgzODU0NDdhYTgzMmFmZGIxMmNlOWUxMTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTFmOWZmM2JiYmY0NDVhYWEyOGQyYWM1ZjAxMTU3MSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTUxZjlmZjNiYmJmNDQ1YWFhMjhkMmFjNWYwMTE1NzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY0NTM4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRlMTM3NjY4Mzg1NDQ3YWE4MzJhZmRiMTJjZTllMTE4LnNldENvbnRlbnQoaHRtbF8xNTFmOWZmM2JiYmY0NDVhYWEyOGQyYWM1ZjAxMTU3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzhhNGMxODY1MWJmODQzOGViZTE4YzUzZDgwMDhjNWM1LmJpbmRQb3B1cChwb3B1cF80ZTEzNzY2ODM4NTQ0N2FhODMyYWZkYjEyY2U5ZTExOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDBhYTg3MmQwNWMwNDUxOGEwM2MwOWM5YjcyNmE4OTkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDc2OTE5OTk3ODMyMiwgLTczLjg5Mzc5NzAwMDk2OTE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNzMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkYjhmYjQ0ZWVkODQ5MzBhYjExMDVjNzMwNzhlYjczID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzU5NjBiYTY1YWVkNDlkMWEzNGEzZjUwNjY0ZTY2ZDUgPSAkKCc8ZGl2IGlkPSJodG1sX2M1OTYwYmE2NWFlZDQ5ZDFhMzRhM2Y1MDY2NGU2NmQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42NTAyMy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZGI4ZmI0NGVlZDg0OTMwYWIxMTA1YzczMDc4ZWI3My5zZXRDb250ZW50KGh0bWxfYzU5NjBiYTY1YWVkNDlkMWEzNGEzZjUwNjY0ZTY2ZDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9kMGFhODcyZDA1YzA0NTE4YTAzYzA5YzliNzI2YTg5OS5iaW5kUG9wdXAocG9wdXBfNGRiOGZiNDRlZWQ4NDkzMGFiMTEwNWM3MzA3OGViNzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNlYThkNTVjNjZiMTQ4Y2NiNGU0M2Q0OGZmMTJjZTZkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MDM4OTk5OTIzNDI2LCAtNzMuODg5NTcxMDAyOTEwODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0OS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTgwYmI0MzM4MjI2NDVhYWJmMTI5OWFlMzU1MDAzMzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMTE4MmFjNWNiNGQ0OWFhOTMyNzczMDExZWI1ZTY2OSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTExODJhYzVjYjRkNDlhYTkzMjc3MzAxMWViNWU2NjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNjU2MjAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTgwYmI0MzM4MjI2NDVhYWJmMTI5OWFlMzU1MDAzMzguc2V0Q29udGVudChodG1sXzExMTgyYWM1Y2I0ZDQ5YWE5MzI3NzMwMTFlYjVlNjY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfM2VhOGQ1NWM2NmIxNDhjY2I0ZTQzZDQ4ZmYxMmNlNmQuYmluZFBvcHVwKHBvcHVwXzU4MGJiNDMzODIyNjQ1YWFiZjEyOTlhZTM1NTAwMzM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85MzE0OWIwMDRhODg0ZGJmOWM2NzM3YTU5ODZlZjgyNSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzEzMzk5OTg5NzE1LCAtNzMuODg4Njc4MDAyNTAxMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0Ni4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWU5NTBjZThjYzZjNDM0MTgyZTY4ZTEzZWJlOGRlNDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNDM0OTk3OTE1ODk0ZTVmOTdkMmJmYzFmZTBjNWE5YyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjQzNDk5NzkxNTg5NGU1Zjk3ZDJiZmMxZmUwYzVhOWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNjU4MzQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWU5NTBjZThjYzZjNDM0MTgyZTY4ZTEzZWJlOGRlNDAuc2V0Q29udGVudChodG1sX2Y0MzQ5OTc5MTU4OTRlNWY5N2QyYmZjMWZlMGM1YTljKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOTMxNDliMDA0YTg4NGRiZjljNjczN2E1OTg2ZWY4MjUuYmluZFBvcHVwKHBvcHVwXzllOTUwY2U4Y2M2YzQzNDE4MmU2OGUxM2ViZThkZTQwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9iYWU4NDkwZjBmZjM0YTY1ODBmYmY0Y2FjNDM3MzZmZiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzE2Njk5OTc5Mjg5NiwgLTczLjg4NzgwMDAwMTk1MjI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkMTc4NGU0NDhhYTRiNjY5MDdmMWIwOWQxODFkNDE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGIyYjE1ZjAzMjJiNDg0NDlhNjkzN2VmZTM4ZDgzZmEgPSAkKCc8ZGl2IGlkPSJodG1sXzhiMmIxNWYwMzIyYjQ4NDQ5YTY5MzdlZmUzOGQ4M2ZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42NTk2Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZDE3ODRlNDQ4YWE0YjY2OTA3ZjFiMDlkMTgxZDQxNS5zZXRDb250ZW50KGh0bWxfOGIyYjE1ZjAzMjJiNDg0NDlhNjkzN2VmZTM4ZDgzZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9iYWU4NDkwZjBmZjM0YTY1ODBmYmY0Y2FjNDM3MzZmZi5iaW5kUG9wdXAocG9wdXBfOGQxNzg0ZTQ0OGFhNGI2NjkwN2YxYjA5ZDE4MWQ0MTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNlNDVmM2ZjYmQ1NTRhM2ZhOTJiZjk1YTMzZGFjOWQyID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3Mjg3MDAwMDAyNjQsIC03My44ODc2MDYwMDI5NzE2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NjI0NWY4NjMyNDY0MGZhOTRkNTZmODI1MGVkYWRlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdkNjg4Y2IyMjBlNDQyZTg4NmFhNGI5OTYxOTgwZDZhID0gJCgnPGRpdiBpZD0iaHRtbF83ZDY4OGNiMjIwZTQ0MmU4ODZhYTRiOTk2MTk4MGQ2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjAwNS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NjI0NWY4NjMyNDY0MGZhOTRkNTZmODI1MGVkYWRlNy5zZXRDb250ZW50KGh0bWxfN2Q2ODhjYjIyMGU0NDJlODg2YWE0Yjk5NjE5ODBkNmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8zZTQ1ZjNmY2JkNTU0YTNmYTkyYmY5NWEzM2RhYzlkMi5iaW5kUG9wdXAocG9wdXBfNzYyNDVmODYzMjQ2NDBmYTk0ZDU2ZjgyNTBlZGFkZTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzE5ZDM5MzM5NjBiNDQ4ZDZhODUzODhjNjAxMjc0Y2YyID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MzQwOTk5OTQwMDg2LCAtNzMuODg2NzE3MDAzNTY4NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2MS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTQ2NGQ5MjJkMTZjNGUyZGEwNGFhMDE5OWZlOTQ5YzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NWQ2ZDdhNDdlN2I0MmQ5YjZhYTllYjU2M2Q2NTMwMyA9ICQoJzxkaXYgaWQ9Imh0bWxfNjVkNmQ3YTQ3ZTdiNDJkOWI2YWE5ZWI1NjNkNjUzMDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNjYxMTEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTQ2NGQ5MjJkMTZjNGUyZGEwNGFhMDE5OWZlOTQ5Yzkuc2V0Q29udGVudChodG1sXzY1ZDZkN2E0N2U3YjQyZDliNmFhOWViNTYzZDY1MzAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMTlkMzkzMzk2MGI0NDhkNmE4NTM4OGM2MDEyNzRjZjIuYmluZFBvcHVwKHBvcHVwXzk0NjRkOTIyZDE2YzRlMmRhMDRhYTAxOTlmZTk0OWM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jYjkzODkxOGJiYWY0YTMxODgyNTU4MzU3OTBjZDU1ZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzQzOTk5OTc2OTg3LCAtNzMuODg1Nzg3MDAyODc4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZTU5MzljODA0ZjY0MGM2YWZlZWZkMzc1NjU2YjBjOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ4OTAxOWE3ZmExMTQ1ODE4OGQxM2NiOTg3MjQ5N2ZhID0gJCgnPGRpdiBpZD0iaHRtbF80ODkwMTlhN2ZhMTE0NTgxODhkMTNjYjk4NzI0OTdmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjMzOS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZTU5MzljODA0ZjY0MGM2YWZlZWZkMzc1NjU2YjBjOC5zZXRDb250ZW50KGh0bWxfNDg5MDE5YTdmYTExNDU4MTg4ZDEzY2I5ODcyNDk3ZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9jYjkzODkxOGJiYWY0YTMxODgyNTU4MzU3OTBjZDU1ZS5iaW5kUG9wdXAocG9wdXBfNWU1OTM5YzgwNGY2NDBjNmFmZWVmZDM3NTY1NmIwYzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2YxODk1NTRiOGIxYjQ5MjJhMTg5OTA4NGVlNDU4NTg3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NTM0OTk5Nzc0NTksIC03My44ODQ4NTUwMDMzMTM3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUyLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOThjODZkNzAzNzE0YTk3YmU0ZTJmZDBjMzhiNGZlZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzM2Q1YjM1YWQwYjRkNzg4OWYxYTEwN2YxMDU3OTg1ID0gJCgnPGRpdiBpZD0iaHRtbF81MzNkNWIzNWFkMGI0ZDc4ODlmMWExMDdmMTA1Nzk4NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjQ0OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOThjODZkNzAzNzE0YTk3YmU0ZTJmZDBjMzhiNGZlZS5zZXRDb250ZW50KGh0bWxfNTMzZDViMzVhZDBiNGQ3ODg5ZjFhMTA3ZjEwNTc5ODUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mMTg5NTU0YjhiMWI0OTIyYTE4OTkwODRlZTQ1ODU4Ny5iaW5kUG9wdXAocG9wdXBfZTk4Yzg2ZDcwMzcxNGE5N2JlNGUyZmQwYzM4YjRmZWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2I4ZGMwMGFiOGNhMDQ4YjlhY2Q0NDNjMjBhOWVhODViID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NjI5OTk5ODQ3MjYsIC03My44ODM5MzYwMDA4MTY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDc2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMGYwM2M5YmZlNmQ0ZjM1YTUyMzNmNWM1M2NmYzgyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EzYjBkMDAyMTA1MDQ3MDA5MzI4YTlkMTNjYzc4NWYzID0gJCgnPGRpdiBpZD0iaHRtbF9hM2IwZDAwMjEwNTA0NzAwOTMyOGE5ZDEzY2M3ODVmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjYzMS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMGYwM2M5YmZlNmQ0ZjM1YTUyMzNmNWM1M2NmYzgyYS5zZXRDb250ZW50KGh0bWxfYTNiMGQwMDIxMDUwNDcwMDkzMjhhOWQxM2NjNzg1ZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9iOGRjMDBhYjhjYTA0OGI5YWNkNDQzYzIwYTllYTg1Yi5iaW5kUG9wdXAocG9wdXBfMzBmMDNjOWJmZTZkNGYzNWE1MjMzZjVjNTNjZmM4MmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2I5YmQyN2EwYjgyZDQ5Zjc5NGQ4NGI1NTc0MGE1ZmZmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MTkxOTk5Nzc3NjcsIC03My44ODI4OTMwMDIxMzE1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZDFmMDVjZTc0MWI0NzA3YjVhYzUzMTk0MzMzZTZkYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFlZTQ3ZjlkNWE3NTQyNzg5N2FkYTZlYzIyMGUwNTkyID0gJCgnPGRpdiBpZD0iaHRtbF8xZWU0N2Y5ZDVhNzU0Mjc4OTdhZGE2ZWMyMjBlMDU5MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjY3MTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmQxZjA1Y2U3NDFiNDcwN2I1YWM1MzE5NDMzM2U2ZGIuc2V0Q29udGVudChodG1sXzFlZTQ3ZjlkNWE3NTQyNzg5N2FkYTZlYzIyMGUwNTkyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYjliZDI3YTBiODJkNDlmNzk0ZDg0YjU1NzQwYTVmZmYuYmluZFBvcHVwKHBvcHVwX2ZkMWYwNWNlNzQxYjQ3MDdiNWFjNTMxOTQzMzNlNmRiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85OGJjYWQ3MTlkNjg0NDk0OWFiNDVlNGYyMWUwZjA3MiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzczMzk5OTg3NTQyLCAtNzMuODgyOTk5MDAzMjU3NTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Mi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWVjZDU0YzRhYjdlNGNhOWFmYmE3ZTMzZjEzMDRlOTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYTcwMDhiMTQ3NDc0MjYyOGNhZDE3MDlmN2JmMGI1ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfZWE3MDA4YjE0NzQ3NDI2MjhjYWQxNzA5ZjdiZjBiNWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNjY3MTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWVjZDU0YzRhYjdlNGNhOWFmYmE3ZTMzZjEzMDRlOTkuc2V0Q29udGVudChodG1sX2VhNzAwOGIxNDc0NzQyNjI4Y2FkMTcwOWY3YmYwYjVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOThiY2FkNzE5ZDY4NDQ5NDlhYjQ1ZTRmMjFlMGYwNzIuYmluZFBvcHVwKHBvcHVwXzFlY2Q1NGM0YWI3ZTRjYTlhZmJhN2UzM2YxMzA0ZTk5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV82Y2M5YWUyYmRmYTY0NjBlODFlMzEwYmMyMjg0OTJlYSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzgyOTk5OTk5NzE1LCAtNzMuODgyMDcxMDAzNDQyNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjE5Yzc4NGUzZDQyNGQxOTg0ZDQ1NTg3NDg4ZWI3YTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYzE3ZDdlYjhlMDE0ZDI0YmJhMDk5NjA1NWQxMDc3ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfY2MxN2Q3ZWI4ZTAxNGQyNGJiYTA5OTYwNTVkMTA3N2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNjY5MjYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjE5Yzc4NGUzZDQyNGQxOTg0ZDQ1NTg3NDg4ZWI3YTguc2V0Q29udGVudChodG1sX2NjMTdkN2ViOGUwMTRkMjRiYmEwOTk2MDU1ZDEwNzdkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNmNjOWFlMmJkZmE2NDYwZTgxZTMxMGJjMjI4NDkyZWEuYmluZFBvcHVwKHBvcHVwXzIxOWM3ODRlM2Q0MjRkMTk4NGQ0NTU4NzQ4OGViN2E4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9kNTM2YTQyNjhkZDI0NWM2OWUyOTBjMGJjYmFlYjA1YSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzkyNjk5OTgxMTEwNiwgLTczLjg4MTEzNzAwMDkxNTczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNjEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3YzE1MzZmYmUwZjRhNWM5ZmZiNzQwOGQxNjE4ZTQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWY4ODI0MzdmMGU2NGQ5ODgxNzA5YmYwMjE4YjE1ZGEgPSAkKCc8ZGl2IGlkPSJodG1sX2VmODgyNDM3ZjBlNjRkOTg4MTcwOWJmMDIxOGIxNWRhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDY3MTI1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3YzE1MzZmYmUwZjRhNWM5ZmZiNzQwOGQxNjE4ZTQwLnNldENvbnRlbnQoaHRtbF9lZjg4MjQzN2YwZTY0ZDk4ODE3MDliZjAyMThiMTVkYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Q1MzZhNDI2OGRkMjQ1YzY5ZTI5MGMwYmNiYWViMDVhLmJpbmRQb3B1cChwb3B1cF9kN2MxNTM2ZmJlMGY0YTVjOWZmYjc0MDhkMTYxOGU0MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOTZkNjNhZmYwY2EyNGYyOGEzMTUxMThmYTYyMjIzYjEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDgwMjQ5OTk3NTM2MywgLTczLjg4MDIwNjAwMDE5OTg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc5MGM0ODI0N2U1NTRjYjdhNjUzMTYxYjk2ZmU2YjExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjM3MmI2NTRkODc4NDQ3ODk3NTdkOTY2YzZmNTgyYmYgPSAkKCc8ZGl2IGlkPSJodG1sXzYzNzJiNjU0ZDg3ODQ0Nzg5NzU3ZDk2NmM2ZjU4MmJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42NzMwNi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83OTBjNDgyNDdlNTU0Y2I3YTY1MzE2MWI5NmZlNmIxMS5zZXRDb250ZW50KGh0bWxfNjM3MmI2NTRkODc4NDQ3ODk3NTdkOTY2YzZmNTgyYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85NmQ2M2FmZjBjYTI0ZjI4YTMxNTExOGZhNjIyMjNiMS5iaW5kUG9wdXAocG9wdXBfNzkwYzQ4MjQ3ZTU1NGNiN2E2NTMxNjFiOTZmZTZiMTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNiYTk1NTQzOTAzODQ2OTI4NDEzYjZiZDcyNDAyMzk2ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4MTIzOTk5ODk3NTMsIC03My44NzkyNzgwMDEyNjYzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI4LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYTc1MmIyNjBhOWU0M2RkYTE4MmNlNWFkOWU3YjZhNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJjMTMyM2ZkMDY3MTQzY2Q4ZmRkMmY4YjE3MjE3MTlhID0gJCgnPGRpdiBpZD0iaHRtbF8yYzEzMjNmZDA2NzE0M2NkOGZkZDJmOGIxNzIxNzE5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Njc0NzkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGE3NTJiMjYwYTllNDNkZGExODJjZTVhZDllN2I2YTUuc2V0Q29udGVudChodG1sXzJjMTMyM2ZkMDY3MTQzY2Q4ZmRkMmY4YjE3MjE3MTlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfM2JhOTU1NDM5MDM4NDY5Mjg0MTNiNmJkNzI0MDIzOTYuYmluZFBvcHVwKHBvcHVwX2RhNzUyYjI2MGE5ZTQzZGRhMTgyY2U1YWQ5ZTdiNmE1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85YTQxYTE2YzZiMjE0YjI1YmE0MGUyZWZkZTY0NzRmOCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODIxNTk5OTg4NDM0NCwgLTczLjg3ODQwNjAwMzM4ODczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmNzMyZTUyYzI0MzQ4MTE4MTM2ODljMzg5N2IxYjIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzY3YmJkYzk2OTY4NDExMmJmZWY2ZGNjZWY0ODE2NDMgPSAkKCc8ZGl2IGlkPSJodG1sXzc2N2JiZGM5Njk2ODQxMTJiZmVmNmRjY2VmNDgxNjQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDY3NjEwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBmNzMyZTUyYzI0MzQ4MTE4MTM2ODljMzg5N2IxYjIzLnNldENvbnRlbnQoaHRtbF83NjdiYmRjOTY5Njg0MTEyYmZlZjZkY2NlZjQ4MTY0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzlhNDFhMTZjNmIyMTRiMjViYTQwZTJlZmRlNjQ3NGY4LmJpbmRQb3B1cChwb3B1cF8wZjczMmU1MmMyNDM0ODExODEzNjg5YzM4OTdiMWIyMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYmU1NTkxYmMxNDVmNDExMzg5YWViMzkwN2U4Y2Y5ZTcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDgzMTg5OTk5MDU0NywgLTczLjg3NzQxNjAwMjMyODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2Q4MDI1NDRmNDM3NDk2YTg1ZDE2YjNmZjExODcwNDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNTFjMGZmY2ZiOTE0ZDY1YTU4ZjhkMmI2ZjM2ZDRiOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjUxYzBmZmNmYjkxNGQ2NWE1OGY4ZDJiNmYzNmQ0YjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY3ODY3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNkODAyNTQ0ZjQzNzQ5NmE4NWQxNmIzZmYxMTg3MDQ0LnNldENvbnRlbnQoaHRtbF8yNTFjMGZmY2ZiOTE0ZDY1YTU4ZjhkMmI2ZjM2ZDRiOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2JlNTU5MWJjMTQ1ZjQxMTM4OWFlYjM5MDdlOGNmOWU3LmJpbmRQb3B1cChwb3B1cF8zZDgwMjU0NGY0Mzc0OTZhODVkMTZiM2ZmMTE4NzA0NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZTg5ZjMyNzdjMTRlNGRmOGIwZjU1N2UzNzQ2NDM2NzkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg0MTU5OTk5MDk2MDQsIC03My44NzY0ODAwMDExMDY0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODFkNWMxZWZjMWY0ZGJlOGYyY2M3MWQ0Nzc3NGEwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5MzU3NjFiZTZhNzQzNGNiMzRlNWE2NjZkNmZiMDkxID0gJCgnPGRpdiBpZD0iaHRtbF9mOTM1NzYxYmU2YTc0MzRjYjM0ZTVhNjY2ZDZmYjA5MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Njc5OTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTgxZDVjMWVmYzFmNGRiZThmMmNjNzFkNDc3NzRhMDIuc2V0Q29udGVudChodG1sX2Y5MzU3NjFiZTZhNzQzNGNiMzRlNWE2NjZkNmZiMDkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZTg5ZjMyNzdjMTRlNGRmOGIwZjU1N2UzNzQ2NDM2NzkuYmluZFBvcHVwKHBvcHVwXzk4MWQ1YzFlZmMxZjRkYmU4ZjJjYzcxZDQ3Nzc0YTAyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV81ODVmODZiNWNkOTA0OWEyYmJhOGJmNGE2ZmE4NzVhZiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODUyMDk5OTk2NjkxNCwgLTczLjg3NTQ4OTAwMTQzODY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3NzQ2YzAyMGY5YTQ2OWNhMTQxZTg3YmM3Y2ExNWMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQ4YmU0MDlmODNhNGNjMWE5MjU4ODliZmNmOTY2OTggPSAkKCc8ZGl2IGlkPSJodG1sXzU0OGJlNDA5ZjgzYTRjYzFhOTI1ODg5YmZjZjk2Njk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42ODE3NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80Nzc0NmMwMjBmOWE0NjljYTE0MWU4N2JjN2NhMTVjMy5zZXRDb250ZW50KGh0bWxfNTQ4YmU0MDlmODNhNGNjMWE5MjU4ODliZmNmOTY2OTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV81ODVmODZiNWNkOTA0OWEyYmJhOGJmNGE2ZmE4NzVhZi5iaW5kUG9wdXAocG9wdXBfNDc3NDZjMDIwZjlhNDY5Y2ExNDFlODdiYzdjYTE1YzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2ZkMTU5ZjRjMzg4YzQzYmM5N2UxNjYzYzQ4M2U2NGZmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5Mzk5OTk5NzQ0MjcsIC03My44NzU3MjQwMDE5OTI3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNGMyMDc2ODI0ODg0ZGZkOWQ5Y2FiNmMxM2FiZTMxYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFjYjk4YTY0ZTVlODRmZjdhN2VkZDg2Zjc4ZmZjMzBjID0gJCgnPGRpdiBpZD0iaHRtbF8xY2I5OGE2NGU1ZTg0ZmY3YTdlZGQ4NmY3OGZmYzMwYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjgxNzcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTRjMjA3NjgyNDg4NGRmZDlkOWNhYjZjMTNhYmUzMWMuc2V0Q29udGVudChodG1sXzFjYjk4YTY0ZTVlODRmZjdhN2VkZDg2Zjc4ZmZjMzBjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZmQxNTlmNGMzODhjNDNiYzk3ZTE2NjNjNDgzZTY0ZmYuYmluZFBvcHVwKHBvcHVwXzE0YzIwNzY4MjQ4ODRkZmQ5ZDljYWI2YzEzYWJlMzFjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85NTYxYTk5ODQyMTY0YjNjODMwYzkxMDgxNzlkMTEyYSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MDA5Nzk5OTk5NTM3NiwgLTczLjg3NDkwMjAwMDM1ODAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZmM2NkYjQ4NTExMDRjYmE4NDY2OTY1ZjBmNWViNTc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGE0Yjg4ZjZlZmZlNGY1YjkzNzJkOTg1NmNhYzViZmMgPSAkKCc8ZGl2IGlkPSJodG1sXzRhNGI4OGY2ZWZmZTRmNWI5MzcyZDk4NTZjYWM1YmZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42ODI2NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZjNjZGI0ODUxMTA0Y2JhODQ2Njk2NWYwZjVlYjU3NC5zZXRDb250ZW50KGh0bWxfNGE0Yjg4ZjZlZmZlNGY1YjkzNzJkOTg1NmNhYzViZmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85NTYxYTk5ODQyMTY0YjNjODMwYzkxMDgxNzlkMTEyYS5iaW5kUG9wdXAocG9wdXBfNmYzY2RiNDg1MTEwNGNiYTg0NjY5NjVmMGY1ZWI1NzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzgxMzJkMWZiNTc0ZjQyYmFiYzU0MThjNDNhNzI2ZmI1ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4NjEzOTk5ODkzMTI0LCAtNzMuODc0NjI5MDAyMjQwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjNkOTNkODI3ZDQ1NDcwYjg3MDZiZDZiOGE2MTFjMzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MWNhOWI3ZWNlZDI0ZDEwYTVkOThkNDUzMzkwOTc3NCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzFjYTliN2VjZWQyNGQxMGE1ZDk4ZDQ1MzM5MDk3NzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY4MjY2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIzZDkzZDgyN2Q0NTQ3MGI4NzA2YmQ2YjhhNjExYzM2LnNldENvbnRlbnQoaHRtbF83MWNhOWI3ZWNlZDI0ZDEwYTVkOThkNDUzMzkwOTc3NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzgxMzJkMWZiNTc0ZjQyYmFiYzU0MThjNDNhNzI2ZmI1LmJpbmRQb3B1cChwb3B1cF8yM2Q5M2Q4MjdkNDU0NzBiODcwNmJkNmI4YTYxMWMzNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYmRiZjRkNWJmMDI3NDljODkzMjViMzZkZmVmYTczMzcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTA0MTI5OTk4NjMyMTUsIC03My44NzQwMTIwMDA5OTQ0MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYzBlMWJjN2E5MWQ0Nzg1OGMxYjNlZjQwYTU0ZDUyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgwMTU4MzZlMTM0NzRmMDc5MzA1OGY0MDg3MjljMTdmID0gJCgnPGRpdiBpZD0iaHRtbF84MDE1ODM2ZTEzNDc0ZjA3OTMwNThmNDA4NzI5YzE3ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Njg0MDkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmMwZTFiYzdhOTFkNDc4NThjMWIzZWY0MGE1NGQ1MmUuc2V0Q29udGVudChodG1sXzgwMTU4MzZlMTM0NzRmMDc5MzA1OGY0MDg3MjljMTdmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYmRiZjRkNWJmMDI3NDljODkzMjViMzZkZmVmYTczMzcuYmluZFBvcHVwKHBvcHVwXzJjMGUxYmM3YTkxZDQ3ODU4YzFiM2VmNDBhNTRkNTJlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mMDE5YmQ5MGE1M2M0NTMyYTllYWYwMGQ4MzljNjY3NSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODcxNjk5OTc3NTczLCAtNzMuODczNzAxMDAwODAyNTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0Ni4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWJmY2E0MzNkM2I2NDRlOGE1ZTlhMWM1MTQyODkyY2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMDc4ZmJlZGY5MDU0ZTg1ODQ3YWNhNmNhODJkOTA0NCA9ICQoJzxkaXYgaWQ9Imh0bWxfYTA3OGZiZWRmOTA1NGU4NTg0N2FjYTZjYTgyZDkwNDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY4NDExLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViZmNhNDMzZDNiNjQ0ZThhNWU5YTFjNTE0Mjg5MmNhLnNldENvbnRlbnQoaHRtbF9hMDc4ZmJlZGY5MDU0ZTg1ODQ3YWNhNmNhODJkOTA0NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2YwMTliZDkwYTUzYzQ1MzJhOWVhZjAwZDgzOWM2Njc1LmJpbmRQb3B1cChwb3B1cF81YmZjYTQzM2QzYjY0NGU4YTVlOWExYzUxNDI4OTJjYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOTgyOGJkZWFjYzQzNGE3Y2IxNTU0ZDM4ZDA2MThlOTYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDc4NzE5OTk4MjkxMTUsIC03My44NzIxNTUwMDM1NzEzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83Yjc4OWFiMjAyNGU0ZjNlYmM4NTgxZWQwMzZkMTllMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VmOGIzM2Y3NmI2ODQxOTk4NjAwMjE2NmY0YmQyZDVlID0gJCgnPGRpdiBpZD0iaHRtbF9lZjhiMzNmNzZiNjg0MTk5ODYwMDIxNjZmNGJkMmQ1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Njg0ODcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2I3ODlhYjIwMjRlNGYzZWJjODU4MWVkMDM2ZDE5ZTEuc2V0Q29udGVudChodG1sX2VmOGIzM2Y3NmI2ODQxOTk4NjAwMjE2NmY0YmQyZDVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOTgyOGJkZWFjYzQzNGE3Y2IxNTU0ZDM4ZDA2MThlOTYuYmluZFBvcHVwKHBvcHVwXzdiNzg5YWIyMDI0ZTRmM2ViYzg1ODFlZDAzNmQxOWUxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xYWM5ZWRlNTY4MTQ0YTFmOGE5YzkxZTU3NGM5MDQ3NiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODg1MTk5OTc1NTEwNCwgLTczLjg3MjM3MzAwMDExNzE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5NGQwYjQ2NTVkZjRkYmE4YjIzYjdkMzE0NzMyMGI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDdkZWIyMWIwMjVlNGRiYjlmNzBiMzhjYmEwZTc3ZjEgPSAkKCc8ZGl2IGlkPSJodG1sXzA3ZGViMjFiMDI1ZTRkYmI5ZjcwYjM4Y2JhMGU3N2YxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42ODQ5My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOTRkMGI0NjU1ZGY0ZGJhOGIyM2I3ZDMxNDczMjBiNy5zZXRDb250ZW50KGh0bWxfMDdkZWIyMWIwMjVlNGRiYjlmNzBiMzhjYmEwZTc3ZjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xYWM5ZWRlNTY4MTQ0YTFmOGE5YzkxZTU3NGM5MDQ3Ni5iaW5kUG9wdXAocG9wdXBfZjk0ZDBiNDY1NWRmNGRiYThiMjNiN2QzMTQ3MzIwYjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzE2OTYzOTNiZjk2ZDQ1ZjU4YTUzMzc4MjUwMmI1MmZkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwNzM0OTk5OTEyMDc2LCAtNzMuODczMTE5MDAyMjc2MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDE0ZDE5YWE2MWMxNGY1YTg5ZTU1NWY0NjBkZDAyYTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZmNlYjZmYTE0MTk0YjBlODcyZGViNjYzYTBiYmY3YSA9ICQoJzxkaXYgaWQ9Imh0bWxfOGZjZWI2ZmExNDE5NGIwZTg3MmRlYjY2M2EwYmJmN2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY4NTIxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxNGQxOWFhNjFjMTRmNWE4OWU1NTVmNDYwZGQwMmEwLnNldENvbnRlbnQoaHRtbF84ZmNlYjZmYTE0MTk0YjBlODcyZGViNjYzYTBiYmY3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzE2OTYzOTNiZjk2ZDQ1ZjU4YTUzMzc4MjUwMmI1MmZkLmJpbmRQb3B1cChwb3B1cF8wMTRkMTlhYTYxYzE0ZjVhODllNTU1ZjQ2MGRkMDJhMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMzZhNjI1YzNhYzJiNDU1YmE3ZGQ2ZDYwNDY2ODRjY2IgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg4MTI5OTk5Mzk5NiwgLTczLjg3Mjc3NDAwMjM1MTI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzYjkzMmFmZjZhMTQyZTJiODg4N2I0MDAyMWUwZjU5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmZjYzNiNGM3YjExNGViOGI5NjI0YjA4MTdmZmRlY2QgPSAkKCc8ZGl2IGlkPSJodG1sXzJmY2MzYjRjN2IxMTRlYjhiOTYyNGIwODE3ZmZkZWNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42ODUyMy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81M2I5MzJhZmY2YTE0MmUyYjg4ODdiNDAwMjFlMGY1OS5zZXRDb250ZW50KGh0bWxfMmZjYzNiNGM3YjExNGViOGI5NjI0YjA4MTdmZmRlY2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8zNmE2MjVjM2FjMmI0NTViYTdkZDZkNjA0NjY4NGNjYi5iaW5kUG9wdXAocG9wdXBfNTNiOTMyYWZmNmExNDJlMmI4ODg3YjQwMDIxZTBmNTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzYxZTU1MzhiYzhjNzQxOWY4NzlhZWI4NmUwMWVkNDU2ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4OTk4OTk5ODk0LCAtNzMuODc0NTg0MDAwMTcyOTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzcyNDI0YTgyZjVkNGQ2MWIzYTVhZmI5MzE2YmY2N2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84OTliMTUyZTgzYzY0N2VkODc4YmYyODUzNGJiODhkMCA9ICQoJzxkaXYgaWQ9Imh0bWxfODk5YjE1MmU4M2M2NDdlZDg3OGJmMjg1MzRiYjg4ZDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY4NTM4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc3MjQyNGE4MmY1ZDRkNjFiM2E1YWZiOTMxNmJmNjdlLnNldENvbnRlbnQoaHRtbF84OTliMTUyZTgzYzY0N2VkODc4YmYyODUzNGJiODhkMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzYxZTU1MzhiYzhjNzQxOWY4NzlhZWI4NmUwMWVkNDU2LmJpbmRQb3B1cChwb3B1cF83NzI0MjRhODJmNWQ0ZDYxYjNhNWFmYjkzMTZiZjY3ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMTc2YmM0OTk5Y2I4NGJjZmIzMjljYjZlOWQ3MDk5NmQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg5NTY5OTk5NTE5MzYsIC03My44NzEzNTYwMDE4NTgyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMzljZTIwNWViZWU0ZmNjYjNmMzQyNjgxY2VhYTBkYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRjZmM1NjMyYjU3NDRhMWU4MWQ3MjFiMmQxNTQ4OGYwID0gJCgnPGRpdiBpZD0iaHRtbF80Y2ZjNTYzMmI1NzQ0YTFlODFkNzIxYjJkMTU0ODhmMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Njg2NDYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjM5Y2UyMDVlYmVlNGZjY2IzZjM0MjY4MWNlYWEwZGEuc2V0Q29udGVudChodG1sXzRjZmM1NjMyYjU3NDRhMWU4MWQ3MjFiMmQxNTQ4OGYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMTc2YmM0OTk5Y2I4NGJjZmIzMjljYjZlOWQ3MDk5NmQuYmluZFBvcHVwKHBvcHVwX2YzOWNlMjA1ZWJlZTRmY2NiM2YzNDI2ODFjZWFhMGRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8wMmEwNzgyZThjZWI0Yzc0OGE2YTJjYmMyMGE3MzQyMyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODkwNTk5OTk1MjAxNSwgLTczLjg3MTg0MTAwMTQzNzI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZlMGRlMDczZjZjNjRmNzk4NDJlNmY5MGRkYWE3ZWMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzcxNWM3ZWI0YmQwNGQ1YWJlMWFkY2M0MjYxY2UyZDMgPSAkKCc8ZGl2IGlkPSJodG1sXzc3MTVjN2ViNGJkMDRkNWFiZTFhZGNjNDI2MWNlMmQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42ODY1Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZTBkZTA3M2Y2YzY0Zjc5ODQyZTZmOTBkZGFhN2VjMC5zZXRDb250ZW50KGh0bWxfNzcxNWM3ZWI0YmQwNGQ1YWJlMWFkY2M0MjYxY2UyZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wMmEwNzgyZThjZWI0Yzc0OGE2YTJjYmMyMGE3MzQyMy5iaW5kUG9wdXAocG9wdXBfZmUwZGUwNzNmNmM2NGY3OTg0MmU2ZjkwZGRhYTdlYzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzZkMTIzOThiMjcyZTQyZWNhZGE5MDU5ZWU4MmM1NTMzID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU5MzU3OTk5ODMzMjUsIC03My44NzM1NjYwMDAxODYwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYWQ3NzBmNjNkMjE0YzFkYjljM2QwYWFjNDk1NDA2MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg4MDgxYmYyNDM3MDRmNTM5ZmE4YWVhNzhkNmYxMTAyID0gJCgnPGRpdiBpZD0iaHRtbF84ODA4MWJmMjQzNzA0ZjUzOWZhOGFlYTc4ZDZmMTEwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Njg2NzEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGFkNzcwZjYzZDIxNGMxZGI5YzNkMGFhYzQ5NTQwNjEuc2V0Q29udGVudChodG1sXzg4MDgxYmYyNDM3MDRmNTM5ZmE4YWVhNzhkNmYxMTAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNmQxMjM5OGIyNzJlNDJlY2FkYTkwNTllZTgyYzU1MzMuYmluZFBvcHVwKHBvcHVwXzBhZDc3MGY2M2QyMTRjMWRiOWMzZDBhYWM0OTU0MDYxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83Yjk2MTMzMjZkZTg0MzRlOTVlNWZjZDA3YjFhYWNjNSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1OTY1Nzk5OTczMTI2LCAtNzMuODcyNzEwMDAwMTMwMDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjhjZTIwMzFkZDdmNGUxYzk2YTE3NzRmZDhmZjkzN2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NWVjZjkxOGE3NDA0NzQwYjNmMzk0MjExNDcxNDFhMiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDVlY2Y5MThhNzQwNDc0MGIzZjM5NDIxMTQ3MTQxYTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY4NzIyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY4Y2UyMDMxZGQ3ZjRlMWM5NmExNzc0ZmQ4ZmY5MzdhLnNldENvbnRlbnQoaHRtbF80NWVjZjkxOGE3NDA0NzQwYjNmMzk0MjExNDcxNDFhMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzdiOTYxMzMyNmRlODQzNGU5NWU1ZmNkMDdiMWFhY2M1LmJpbmRQb3B1cChwb3B1cF82OGNlMjAzMWRkN2Y0ZTFjOTZhMTc3NGZkOGZmOTM3YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOWRlMWUzMmYwNGNmNDUxMjljZGJmYjcwMmRmNDFkNmUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTk5NTU5OTk4MjE4OSwgLTczLjg3MTg5NzAwMjE5MDIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4MjgxZGZjNjU5ZTQwZjk5NzBkNzc4ZTdmZTZiZDZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWY2MTdhYTk0MDBjNDgyMDg1ZGYxZjY0ZjQ3MzA1YjggPSAkKCc8ZGl2IGlkPSJodG1sX2VmNjE3YWE5NDAwYzQ4MjA4NWRmMWY2NGY0NzMwNWI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42ODkyMC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yODI4MWRmYzY1OWU0MGY5OTcwZDc3OGU3ZmU2YmQ2Zi5zZXRDb250ZW50KGh0bWxfZWY2MTdhYTk0MDBjNDgyMDg1ZGYxZjY0ZjQ3MzA1YjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85ZGUxZTMyZjA0Y2Y0NTEyOWNkYmZiNzAyZGY0MWQ2ZS5iaW5kUG9wdXAocG9wdXBfMjgyODFkZmM2NTllNDBmOTk3MGQ3NzhlN2ZlNmJkNmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2YzMTc3ZmE3MzM2MzRhMTVhNWUzNWUyZjkwN2FlOGUyID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4NDY3OTk5OTA4NzU1LCAtNzMuODczNTEzMDAzMTIyMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzVlNDgzMjUzOGE4NDVmYmExYWQzOTdjZDQzMmEyMDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NzUyMTY3NTNlMjE0ZDVmYTJhMWJkZTllYzU2NmVjZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDc1MjE2NzUzZTIxNGQ1ZmEyYTFiZGU5ZWM1NjZlY2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY5MTI1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M1ZTQ4MzI1MzhhODQ1ZmJhMWFkMzk3Y2Q0MzJhMjA0LnNldENvbnRlbnQoaHRtbF80NzUyMTY3NTNlMjE0ZDVmYTJhMWJkZTllYzU2NmVjZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2YzMTc3ZmE3MzM2MzRhMTVhNWUzNWUyZjkwN2FlOGUyLmJpbmRQb3B1cChwb3B1cF9jNWU0ODMyNTM4YTg0NWZiYTFhZDM5N2NkNDMyYTIwNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNmNmNmI4OTgyOGU4NDA0MDlmYTQ4M2YxMDgxZWZmYTYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg2ODU5OTk4MjI5MDQsIC03My44NzM5ODMwMDE3OTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FmNGZhMTcwYjU4MDRjNDk5YzI1YjRlOTA3ZjIyOTIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGI5MDc0MTMzZjJkNGVjNjgzY2Q2NGEyMWZjMWM4NjcgPSAkKCc8ZGl2IGlkPSJodG1sXzRiOTA3NDEzM2YyZDRlYzY4M2NkNjRhMjFmYzFjODY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42OTEyNi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZjRmYTE3MGI1ODA0YzQ5OWMyNWI0ZTkwN2YyMjkyMS5zZXRDb250ZW50KGh0bWxfNGI5MDc0MTMzZjJkNGVjNjgzY2Q2NGEyMWZjMWM4NjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV82Y2Y2Yjg5ODI4ZTg0MDQwOWZhNDgzZjEwODFlZmZhNi5iaW5kUG9wdXAocG9wdXBfYWY0ZmExNzBiNTgwNGM0OTljMjViNGU5MDdmMjI5MjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzk0ODM1OTEwNWJkNjQ5MzViNjNkZGQwOGZlMTI3ZDhhID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MjYxOTk5ODY1OTg0LCAtNzMuODc0NDQyMDAxMTE5MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTBjMjU1YWY2M2MzNDQzY2E0ZDNmZWUxNzJjYjRjOGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iODAyYTU1ZTEzNDM0ZGU0ODJmMmFmYzliMjI1MGJiYiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjgwMmE1NWUxMzQzNGRlNDgyZjJhZmM5YjIyNTBiYmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY5MjY3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwYzI1NWFmNjNjMzQ0M2NhNGQzZmVlMTcyY2I0YzhlLnNldENvbnRlbnQoaHRtbF9iODAyYTU1ZTEzNDM0ZGU0ODJmMmFmYzliMjI1MGJiYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzk0ODM1OTEwNWJkNjQ5MzViNjNkZGQwOGZlMTI3ZDhhLmJpbmRQb3B1cChwb3B1cF85MGMyNTVhZjYzYzM0NDNjYTRkM2ZlZTE3MmNiNGM4ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfODFiYmJhNzA2ZTI2NGFjZThmZDE5OTNhYWE5MDk2ZGYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDgxNDA5OTk5MjM0ODYsIC03My44NzY0MTgwMDIwNDExOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YWQ5ODEwNjFjMGY0ZjExYTVmOWU5NzY1MzA4MDAyYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VmMTc4YTVjN2ZkYzQxYTE5OGUzMTM0NjRmOWQ3ZjAxID0gJCgnPGRpdiBpZD0iaHRtbF9lZjE3OGE1YzdmZGM0MWExOThlMzEzNDY0ZjlkN2YwMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjkyNjguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGFkOTgxMDYxYzBmNGYxMWE1ZjllOTc2NTMwODAwMmIuc2V0Q29udGVudChodG1sX2VmMTc4YTVjN2ZkYzQxYTE5OGUzMTM0NjRmOWQ3ZjAxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfODFiYmJhNzA2ZTI2NGFjZThmZDE5OTNhYWE5MDk2ZGYuYmluZFBvcHVwKHBvcHVwXzhhZDk4MTA2MWMwZjRmMTFhNWY5ZTk3NjUzMDgwMDJiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xYzRhOTY3YWU3NTE0NGE4YjJkYjhkN2I4NzBkZTZkMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODM2ODk5OTc1Njk2LCAtNzMuODc2OTI1MDAwNDY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY5MGEzNzZlNDJjYTRmOGNiMjM1ZWU3M2UzZWZlYjQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWM5NGYwMWM4NzRkNDdjMGI3ZTc2NTU4NWJjOGEwMDEgPSAkKCc8ZGl2IGlkPSJodG1sXzljOTRmMDFjODc0ZDQ3YzBiN2U3NjU1ODViYzhhMDAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDY5MjY5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY5MGEzNzZlNDJjYTRmOGNiMjM1ZWU3M2UzZWZlYjQ0LnNldENvbnRlbnQoaHRtbF85Yzk0ZjAxYzg3NGQ0N2MwYjdlNzY1NTg1YmM4YTAwMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzFjNGE5NjdhZTc1MTQ0YThiMmRiOGQ3Yjg3MGRlNmQyLmJpbmRQb3B1cChwb3B1cF82OTBhMzc2ZTQyY2E0ZjhjYjIzNWVlNzNlM2VmZWI0NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNzk5NjZkZmM4ZGQ3NDkyODk4YTcxMmNmYmQxODkzMTYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDc3Nzc5OTk3OTQ1MiwgLTczLjg4MjU2OTAwMjQ5ODY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA0OTRhNWU2YmE5ODQzNDc4MWRjMmE1ZTliNmY1YWYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmNiYjdiZWY5Mjk5NGI5OTg0M2MwNzllYmFhYTdmMDkgPSAkKCc8ZGl2IGlkPSJodG1sX2JjYmI3YmVmOTI5OTRiOTk4NDNjMDc5ZWJhYWE3ZjA5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij44NDQyMC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNDk0YTVlNmJhOTg0MzQ3ODFkYzJhNWU5YjZmNWFmMS5zZXRDb250ZW50KGh0bWxfYmNiYjdiZWY5Mjk5NGI5OTg0M2MwNzllYmFhYTdmMDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV83OTk2NmRmYzhkZDc0OTI4OThhNzEyY2ZiZDE4OTMxNi5iaW5kUG9wdXAocG9wdXBfMDQ5NGE1ZTZiYTk4NDM0NzgxZGMyYTVlOWI2ZjVhZjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzFjYjYzMGY3MjE1YzRlNzc5MjZmYWMyZTZhMGRlYTdhID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MDM5OTk5OTcxOTgsIC03My44ODI5ODkwMDE3MDA3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMxLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YmVhYTU5ZTZmZWQ0NmIwYjhiZGRiODI2OWQ0YzRhMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjZDUzMjc5NTRiNDQ3YWZiNTM2MDY3YTViZDNlZmZmID0gJCgnPGRpdiBpZD0iaHRtbF9hY2Q1MzI3OTU0YjQ0N2FmYjUzNjA2N2E1YmQzZWZmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ODQ0MjMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGJlYWE1OWU2ZmVkNDZiMGI4YmRkYjgyNjlkNGM0YTEuc2V0Q29udGVudChodG1sX2FjZDUzMjc5NTRiNDQ3YWZiNTM2MDY3YTViZDNlZmZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMWNiNjMwZjcyMTVjNGU3NzkyNmZhYzJlNmEwZGVhN2EuYmluZFBvcHVwKHBvcHVwXzhiZWFhNTllNmZlZDQ2YjBiOGJkZGI4MjY5ZDRjNGExKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9lMzNlYTcxOGUwMDA0MTQyOTYzMzRkZWQxNTg2NzYyYSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0Nzg2NDk5OTc0NDA3NCwgLTczLjg3Mzk3ODAwMDc2NjQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjMWNhMjYzYzFhMjQyZDFiMTgyYTQyMzZlZmE0ODFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWI2YzRjZjc5MjViNGZmNGI1YjkxNzZmYjcwOGJkNTcgPSAkKCc8ZGl2IGlkPSJodG1sXzliNmM0Y2Y3OTI1YjRmZjRiNWI5MTc2ZmI3MDhiZDU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij44NDQ1Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYzFjYTI2M2MxYTI0MmQxYjE4MmE0MjM2ZWZhNDgxZi5zZXRDb250ZW50KGh0bWxfOWI2YzRjZjc5MjViNGZmNGI1YjkxNzZmYjcwOGJkNTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9lMzNlYTcxOGUwMDA0MTQyOTYzMzRkZWQxNTg2NzYyYS5iaW5kUG9wdXAocG9wdXBfMmMxY2EyNjNjMWEyNDJkMWIxODJhNDIzNmVmYTQ4MWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzE1ZTQ4ZTVhZjFlZjQ2OWU4OTRiOThmOGJlNjgwNjlmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NTEwOTk5OTM2MzksIC03My44NzY3ODkwMDIyMDY3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xODQxMjk0YjA4ZTI0MjFkOGY1ZjdlMmIzMTQ1NmI5ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0MjFkYWMyN2YxZDRkNzNiM2JkZmZkMDZhOGFmMjAyID0gJCgnPGRpdiBpZD0iaHRtbF83NDIxZGFjMjdmMWQ0ZDczYjNiZGZmZDA2YThhZjIwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ODQ5MzUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTg0MTI5NGIwOGUyNDIxZDhmNWY3ZTJiMzE0NTZiOWUuc2V0Q29udGVudChodG1sXzc0MjFkYWMyN2YxZDRkNzNiM2JkZmZkMDZhOGFmMjAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMTVlNDhlNWFmMWVmNDY5ZTg5NGI5OGY4YmU2ODA2OWYuYmluZFBvcHVwKHBvcHVwXzE4NDEyOTRiMDhlMjQyMWQ4ZjVmN2UyYjMxNDU2YjllKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hYTYxOTNlZTEzYjA0OGE5Yjk2OTdiYmZlZWEwOTZlYyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzAzMzk5OTc1MDIxLCAtNzMuODc5MzYzMDAxNTI5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNWFjNTFkMTJjY2Q0YThiODc5MzEyN2NhMDkyYzc5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNiMjYzOGE4OGE4YzRmZjI4YjFkNjk0YmYyZGE3NzViID0gJCgnPGRpdiBpZD0iaHRtbF8zYjI2MzhhODhhOGM0ZmYyOGIxZDY5NGJmMmRhNzc1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ODUxMTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTVhYzUxZDEyY2NkNGE4Yjg3OTMxMjdjYTA5MmM3OTguc2V0Q29udGVudChodG1sXzNiMjYzOGE4OGE4YzRmZjI4YjFkNjk0YmYyZGE3NzViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYWE2MTkzZWUxM2IwNDhhOWI5Njk3YmJmZWVhMDk2ZWMuYmluZFBvcHVwKHBvcHVwX2E1YWM1MWQxMmNjZDRhOGI4NzkzMTI3Y2EwOTJjNzk4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hNTVhODlmNDRmYTA0YjYzYjRiYzI3MGI1MGRhMWUzMyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzkwODk5OTg1NzAxLCAtNzMuODgxMzA0MDAyMDY5MDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTlhZDA4Y2FiYWI4NGQ4OTg5Njc2YjhmNTJiNjBmMGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NTE3NDA0YTViMDY0YThjOWE2NzRmNmE5NWFiYmE0OCA9ICQoJzxkaXYgaWQ9Imh0bWxfNDUxNzQwNGE1YjA2NGE4YzlhNjc0ZjZhOTVhYmJhNDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjg1MTE2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E5YWQwOGNhYmFiODRkODk4OTY3NmI4ZjUyYjYwZjBlLnNldENvbnRlbnQoaHRtbF80NTE3NDA0YTViMDY0YThjOWE2NzRmNmE5NWFiYmE0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2E1NWE4OWY0NGZhMDRiNjNiNGJjMjcwYjUwZGExZTMzLmJpbmRQb3B1cChwb3B1cF9hOWFkMDhjYWJhYjg0ZDg5ODk2NzZiOGY1MmI2MGYwZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjc5NDEzNWFlZjM0NGExZGI5ZjA2MDk3YzFjZTdjMGQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDkwNjM5OTk3ODcsIC03My44NzAzNzkwMDM0OTE2OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZmE3NGQzMGQxYTA0NTVmYmVjMTMyNzNlNGQxNjQxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVkODk3MjUyOGFlMDRiMGNhNWUwM2U1NzU5MDdhM2Y1ID0gJCgnPGRpdiBpZD0iaHRtbF81ZDg5NzI1MjhhZTA0YjBjYTVlMDNlNTc1OTA3YTNmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ODc0NzguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWZhNzRkMzBkMWEwNDU1ZmJlYzEzMjczZTRkMTY0MWUuc2V0Q29udGVudChodG1sXzVkODk3MjUyOGFlMDRiMGNhNWUwM2U1NzU5MDdhM2Y1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYjc5NDEzNWFlZjM0NGExZGI5ZjA2MDk3YzFjZTdjMGQuYmluZFBvcHVwKHBvcHVwX2FmYTc0ZDMwZDFhMDQ1NWZiZWMxMzI3M2U0ZDE2NDFlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xNTQ1ZTNlNTllODM0ZDU3YTM4Nzc3NThlYzJiMmIzOCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzYzODk5OTgxMjg2NCwgLTczLjg3ODg5MjAwMjQ4MTE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0ZmVhY2UwNWU4MjQwYjRhNDljNTVlMTljZmM1OTU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2E4OTJhMDE3OTZkNGI1OGE2MTE1ZTYzZjU3ZjcyNTMgPSAkKCc8ZGl2IGlkPSJodG1sXzdhODkyYTAxNzk2ZDRiNThhNjExNWU2M2Y1N2Y3MjUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij44ODI1NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNGZlYWNlMDVlODI0MGI0YTQ5YzU1ZTE5Y2ZjNTk1Ny5zZXRDb250ZW50KGh0bWxfN2E4OTJhMDE3OTZkNGI1OGE2MTE1ZTYzZjU3ZjcyNTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xNTQ1ZTNlNTllODM0ZDU3YTM4Nzc3NThlYzJiMmIzOC5iaW5kUG9wdXAocG9wdXBfZjRmZWFjZTA1ZTgyNDBiNGE0OWM1NWUxOWNmYzU5NTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2I3ZjQ5NGYxM2ViZDQwODZiYTk3ZmFlNjhkM2VjYmRkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4NzU3OTk5OTA4Njc2LCAtNzMuODczMzAzMDAyMjY3MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODI1ODRmOWQyY2NmNGQxNmI5M2U5ODQ3OTJiZDlkN2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNDIwYzgzNjc5YmE0YzE4YTgyNWExMWYzOGQ2NGFhZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjQyMGM4MzY3OWJhNGMxOGE4MjVhMTFmMzhkNjRhYWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjkxMDQ1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgyNTg0ZjlkMmNjZjRkMTZiOTNlOTg0NzkyYmQ5ZDdmLnNldENvbnRlbnQoaHRtbF9iNDIwYzgzNjc5YmE0YzE4YTgyNWExMWYzOGQ2NGFhZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2I3ZjQ5NGYxM2ViZDQwODZiYTk3ZmFlNjhkM2VjYmRkLmJpbmRQb3B1cChwb3B1cF84MjU4NGY5ZDJjY2Y0ZDE2YjkzZTk4NDc5MmJkOWQ3ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYzQ1MWYyZGRlODYxNDk3OThkYTk0YmNjN2E2ZDljYTMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg3MDA5OTk5NDc4LCAtNzMuODk2MTY4MDAxNjc1MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODE2YmQzZmEyNTNiNGE2Njk3N2E3YWI2ZjI1YmFlNTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xM2FkNWY2YjVhNDY0YWM5OGQ0ZDViNTBkZmUzNTYwZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTNhZDVmNmI1YTQ2NGFjOThkNGQ1YjUwZGZlMzU2MGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjkxNDk1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxNmJkM2ZhMjUzYjRhNjY5NzdhN2FiNmYyNWJhZTU5LnNldENvbnRlbnQoaHRtbF8xM2FkNWY2YjVhNDY0YWM5OGQ0ZDViNTBkZmUzNTYwZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2M0NTFmMmRkZTg2MTQ5Nzk4ZGE5NGJjYzdhNmQ5Y2EzLmJpbmRQb3B1cChwb3B1cF84MTZiZDNmYTI1M2I0YTY2OTc3YTdhYjZmMjViYWU1OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYTMzZGFiZmE0YTM2NGUyNzg4OGJlZmJlZGQ1MjEzOGMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg4MzQ5OTk3NDkxNjQsIC03My44OTY0NTQwMDE1MzIzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZGJjOWNmMmY0ZjQ0YTBkODljOGFkOGEzNDA3NmVkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmYjg4YTAzYWYxYjRlNzI4MTZmMzA0ZThjYjE2MjBkID0gJCgnPGRpdiBpZD0iaHRtbF80ZmI4OGEwM2FmMWI0ZTcyODE2ZjMwNGU4Y2IxNjIwZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+OTE0OTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGRiYzljZjJmNGY0NGEwZDg5YzhhZDhhMzQwNzZlZDEuc2V0Q29udGVudChodG1sXzRmYjg4YTAzYWYxYjRlNzI4MTZmMzA0ZThjYjE2MjBkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYTMzZGFiZmE0YTM2NGUyNzg4OGJlZmJlZGQ1MjEzOGMuYmluZFBvcHVwKHBvcHVwX2RkYmM5Y2YyZjRmNDRhMGQ4OWM4YWQ4YTM0MDc2ZWQxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV84YTM2MTY3Njk5NDA0YTM4OTQwMzY3YTAxNTcxM2QxZCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODQzODk5OTkyNjcxLCAtNzMuODc2MjUyMDAxODg0NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjc0MDQwYTE5ZDIxNGVhNzk3ZTZhMGZjNTE2MDU4MWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YjNlYzIwYmM2NzY0OTZiODA3MGM2YTlkY2E2MWVjNCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWIzZWMyMGJjNjc2NDk2YjgwNzBjNmE5ZGNhNjFlYzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjkxODgwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY3NDA0MGExOWQyMTRlYTc5N2U2YTBmYzUxNjA1ODFkLnNldENvbnRlbnQoaHRtbF85YjNlYzIwYmM2NzY0OTZiODA3MGM2YTlkY2E2MWVjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzhhMzYxNjc2OTk0MDRhMzg5NDAzNjdhMDE1NzEzZDFkLmJpbmRQb3B1cChwb3B1cF82NzQwNDBhMTlkMjE0ZWE3OTdlNmEwZmM1MTYwNTgxZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOGIxNzQ3MDM1YWM1NGU4M2JlY2U1NDBjMDI1MWUwNGUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDgwNjE5OTk4ODIyNCwgLTczLjg3OTgzOTAwMDgxNjg2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNlMTdmMjU3MzgzMzRmYmRiMTRiZjRmNTg2NmNiMzgxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjBlYmY2OWVhZDcxNGUyYTk3ZmYzOTMyZjY4MGZlOTIgPSAkKCc8ZGl2IGlkPSJodG1sXzIwZWJmNjllYWQ3MTRlMmE5N2ZmMzkzMmY2ODBmZTkyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij45NTA4OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZTE3ZjI1NzM4MzM0ZmJkYjE0YmY0ZjU4NjZjYjM4MS5zZXRDb250ZW50KGh0bWxfMjBlYmY2OWVhZDcxNGUyYTk3ZmYzOTMyZjY4MGZlOTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV84YjE3NDcwMzVhYzU0ZTgzYmVjZTU0MGMwMjUxZTA0ZS5iaW5kUG9wdXAocG9wdXBfM2UxN2YyNTczODMzNGZiZGIxNGJmNGY1ODY2Y2IzODEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzYzODFlN2M1Zjc0MzRkMzY4NmZmMDFiMWQ2NWY2MWJmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwMTU3OTk5OTkwODYsIC03My44OTcxNDgwMDI0MjM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFjYzBkODQwOTE5NTQ3MWQ5YWEzMmVhZTc1YzhmODhlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODcxY2RlYzhmYWRhNGNmMGIzMjUwNmYwOTk5Y2MxMDYgPSAkKCc8ZGl2IGlkPSJodG1sXzg3MWNkZWM4ZmFkYTRjZjBiMzI1MDZmMDk5OWNjMTA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4xMDE4NDQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWNjMGQ4NDA5MTk1NDcxZDlhYTMyZWFlNzVjOGY4OGUuc2V0Q29udGVudChodG1sXzg3MWNkZWM4ZmFkYTRjZjBiMzI1MDZmMDk5OWNjMTA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNjM4MWU3YzVmNzQzNGQzNjg2ZmYwMWIxZDY1ZjYxYmYuYmluZFBvcHVwKHBvcHVwXzFjYzBkODQwOTE5NTQ3MWQ5YWEzMmVhZTc1YzhmODhlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xZjYyOGE4ZTI3YTQ0ZTg5OGM2NWQ1NjQ1ODY0NjEyYyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzU5MTk5OTc0NTMyLCAtNzMuODk1NDQxMDAxODI4NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjUxZjUzMjliN2E3NDZhNDk2YThiMjAzYmFjNTkzYWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83OWQyZTY4ZDFmN2U0ZTg4YWYxOTMxODdjNGMxNGFlNiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzlkMmU2OGQxZjdlNGU4OGFmMTkzMTg3YzRjMTRhZTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjEwMTg2NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNTFmNTMyOWI3YTc0NmE0OTZhOGIyMDNiYWM1OTNhYS5zZXRDb250ZW50KGh0bWxfNzlkMmU2OGQxZjdlNGU4OGFmMTkzMTg3YzRjMTRhZTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xZjYyOGE4ZTI3YTQ0ZTg5OGM2NWQ1NjQ1ODY0NjEyYy5iaW5kUG9wdXAocG9wdXBfZjUxZjUzMjliN2E3NDZhNDk2YThiMjAzYmFjNTkzYWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzRkY2I5NTQxZWNjYzRlZDdiMzY3YTJhYmM0ZmI3ZjJiID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU5ODU3OTk5ODUzMTcsIC03My44OTg2ODIwMDIyMDQyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZDEwMTQxY2EwOWY0NDFhYWYxNDE3NWI0YmQwYWRmYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y3MjQ1ZTFhNTI5ZDRmZDdhZjdkMzUzYTM1N2NlNmYzID0gJCgnPGRpdiBpZD0iaHRtbF9mNzI0NWUxYTUyOWQ0ZmQ3YWY3ZDM1M2EzNTdjZTZmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MTI5MzMwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FkMTAxNDFjYTA5ZjQ0MWFhZjE0MTc1YjRiZDBhZGZhLnNldENvbnRlbnQoaHRtbF9mNzI0NWUxYTUyOWQ0ZmQ3YWY3ZDM1M2EzNTdjZTZmMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzRkY2I5NTQxZWNjYzRlZDdiMzY3YTJhYmM0ZmI3ZjJiLmJpbmRQb3B1cChwb3B1cF9hZDEwMTQxY2EwOWY0NDFhYWYxNDE3NWI0YmQwYWRmYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>",
"text/plain": "<folium.folium.Map at 0x21831788fd0>"
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Heatmap\nSimilar to above but just the LPIS locations on top of a heatmap."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "mh = folium.Map(location=[40.75, -73.88], zoom_start =15, tiles='OpenStreetMap')\n\nHeatMap(list(zip(jh0.latitude, jh0.longitude, jh0.personsinjured)), radius = 12).add_to(mh) \n\nfor idx, row in jh0.iterrows():\n if (row.flag_LPIS_ever == 1):\n folium.Circle(location=[row.latitude, row.longitude],\n popup=f'LPIS {row.intersection_id}',\n radius = 10 + row.personsinjured*3\n ).add_to(mh)\n\nmh",
"execution_count": 113,
"outputs": [
{
"data": {
"text/html": "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgPHN0eWxlPiNtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjAgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgdG9wOiAwLjAlOwogICAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9sZWFmbGV0LmdpdGh1Yi5pby9MZWFmbGV0LmhlYXQvZGlzdC9sZWFmbGV0LWhlYXQuanMiPjwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCIgPjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjAgPSBMLm1hcCgKICAgICAgICAnbWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwJywgewogICAgICAgIGNlbnRlcjogWzQwLjc1LCAtNzMuODhdLAogICAgICAgIHpvb206IDE1LAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKCiAgICAKICAgIAogICAgdmFyIHRpbGVfbGF5ZXJfOGUxYWZkZjVjOGY1NDE0OGI5ZjZkZDMxMDViMjRmMzcgPSBMLnRpbGVMYXllcigKICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiCn0pLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAKICAgICAgICAgICAgdmFyIGhlYXRfbWFwXzVlMzcyMjYwY2Y2YzQ0ODQ5MzAxYTBiZmY3N2E2MmIzID0gTC5oZWF0TGF5ZXIoCiAgICAgICAgICAgICAgICBbWzQwLjc1NDIxNjk5OTg0MTMyNiwgLTczLjg5ODE4MTAwMTI3NTE5LCAwXSwgWzQwLjc1NDI4MDk5OTkwNzkwNSwgLTczLjg5NzUwMTAwMjA0Mjk5LCA0OV0sIFs0MC43NTQzODg5OTk5ODg4LCAtNzMuODk2NTIyMDAyOTA2MjEsIDE4XSwgWzQwLjc1NDQ4NDk5OTczODY2NSwgLTczLjg5NTU5MDAwMzAxNzI2LCAxNF0sIFs0MC43NTQ1ODI5OTk3MjgxMiwgLTczLjg5NDY2MTAwMDI5NTkxLCAxNF0sIFs0MC43NTQ2ODA5OTk4MzkyNDUsIC03My44OTM3MzQwMDE2NjM4MywgMTVdLCBbNDAuNzU0Nzc3OTk5ODM2MzM1LCAtNzMuODkyODAzMDAyNjYzNzgsIDEzXSwgWzQwLjc1NDg3Mjk5OTgzNTU0LCAtNzMuODkxODgxMDAyNDg0ODEsIDIwXSwgWzQwLjc1NDk3Mzk5OTkwMzI2LCAtNzMuODkwOTQ4MDAyNzMzNzUsIDEwXSwgWzQwLjc1NTA3MDk5OTkxNzQxNSwgLTczLjg5MDAxMzAwMzUwODM5LCAxMV0sIFs0MC43NTUxNjk5OTk4NzM2NywgLTczLjg4OTA4ODAwMzU4OTk2LCA4XSwgWzQwLjc1NTI2NTk5OTc0MzMsIC03My44ODgxNTcwMDM0MzYwNSwgMTJdLCBbNDAuNzU1MzYyOTk5OTk2NzIsIC03My44ODcyMjgwMDIxMzg0OSwgMTJdLCBbNDAuNzU1NDU5OTk5NzMzMTUsIC03My44ODYyOTgwMDE5MTMxMywgMThdLCBbNDAuNzU1NTU2OTk5NzUxNzcsIC03My44ODUzNjcwMDI3NTQxNSwgMjNdLCBbNDAuNzU1NjU2OTk5OTMxMTksIC03My44ODQ0MzkwMDIzNTMwNiwgN10sIFs0MC43NTU3NTQ5OTk3NDgxNCwgLTczLjg4MzUwNzAwMzM1Mzg3LCAxN10sIFs0MC43NTU4NTM5OTk4NTYwMywgLTczLjg4MjU3OTAwMjc0ODI5LCAxNl0sIFs0MC43NTU5NTE5OTk5MjUxMjQsIC03My44ODE2NDgwMDE2NjYxMiwgMjVdLCBbNDAuNzU2MDQ4OTk5ODQ4MDU1LCAtNzMuODgwNzE5MDAyODg5MDgsIDIyXSwgWzQwLjc1NjE0Njk5OTkzMDk0LCAtNzMuODc5Nzg5MDAzMzY3MzQsIDEwXSwgWzQwLjc1NjI0MDk5OTkwMTE5NSwgLTczLjg3ODg2MTAwMDgxNDUyLCAxNV0sIFs0MC43NTY0Mzg5OTk4MDk2NSwgLTczLjg3Njk5ODAwMjk4OTA4LCAxNF0sIFs0MC43NTY1MzU5OTk4NjIwOCwgLTczLjg3NjA2ODAwMTU3MjU2LCAyMV0sIFs0MC43NTY2MzM5OTk5OTM1NzUsIC03My44NzUxMzkwMDI2MTU0NiwgMTldLCBbNDAuNzU2NzMxOTk5NzgwMjgsIC03My44NzQyMDgwMDEyMzMyNiwgMTJdLCBbNDAuNzU2ODUwOTk5ODY3NzY1LCAtNzMuODczMTExMDAxNjA3OTUsIDNdLCBbNDAuNzU2OTQyOTk5ODk1NDIsIC03My44NzIyMTkwMDMxNDkyLCAxM10sIFs0MC43NTcwMzU5OTk3Mjk0MSwgLTczLjg3MTMyNDAwMDc1MDc3LCAyMl0sIFs0MC43NTcxMzE5OTk5MDczMSwgLTczLjg3MDQxNDAwMzE1NTAyLCA2XSwgWzQwLjc1NjgwMzk5OTc1MjE0NCwgLTczLjg3MzY1NzAwMDI2MTA4LCA0OV0sIFs0MC43NTQxMDk5OTk4MjY3NiwgLTczLjg5ODY5NzAwMzU0Mzk2LCA0XSwgWzQwLjc1OTk3Mzk5OTk0NzA4NiwgLTczLjg5ODQ1NjAwMjgxMzg5LCAwXSwgWzQwLjc1OTk3Mjk5OTg2NjIxLCAtNzMuODk4NjExMDAxMzE4MywgMF0sIFs0MC43NTc5NTQ5OTk5NzE1OCwgLTczLjg5ODE5MjAwMzM4MjI5LCA2XSwgWzQwLjc1ODA1OTk5OTk5Njk3LCAtNzMuODk3MTkxMDAyNDI5NzIsIDRdLCBbNDAuNzU4MTU4OTk5OTAxOTIsIC03My44OTYyNjIwMDEyMDAyNiwgMl0sIFs0MC43NTgyNTQ5OTk5NzU5OSwgLTczLjg5NTMzNjAwMTQ5NjI4LCAxXSwgWzQwLjc1ODM1Mjk5OTkxNzUwNiwgLTczLjg5NDQwMjAwMDY0NTk4LCA4XSwgWzQwLjc1ODQ1MDk5OTkzMzk3LCAtNzMuODkzNDczMDAzNTc3MzYsIDJdLCBbNDAuNzU4NTQ5OTk5OTQ2ODEsIC03My44OTI1MjgwMDA2ODI5NiwgN10sIFs0MC43NTg2NDU5OTk5MjY0NiwgLTczLjg5MTYwOTAwMDAxNTU4LCA0XSwgWzQwLjc1ODc0Mzk5OTkzNTUwNCwgLTczLjg5MDY5MTAwMDQ5MzI5LCA3XSwgWzQwLjc1ODg0MDk5OTgwNTk4LCAtNzMuODg5NzUwMDAyODkxNTcsIDddLCBbNDAuNzU4OTM2OTk5ODI1NCwgLTczLjg4ODgyMzAwMjQxMjcsIDNdLCBbNDAuNzU5MDM2OTk5ODE0MjUsIC03My44ODc4OTMwMDAxMTYxMSwgNl0sIFs0MC43NTkxMzI5OTk4MzMzMiwgLTczLjg4Njk2NTAwMTU1MjM4LCA4XSwgWzQwLjc1OTIzMjk5OTgxNDIxNiwgLTczLjg4NjAzNjAwMDgwMDEyLCAxMV0sIFs0MC43NTkzMjk5OTk4MTA5NSwgLTczLjg4NTEwNjAwMjU0MjQsIDldLCBbNDAuNzU5NDI2OTk5OTgzOCwgLTczLjg4NDE3NjAwMTU2Mjc0LCAxMl0sIFs0MC43NTk1MjU5OTk5Njg3NiwgLTczLjg4MzI0NTAwMTY5NDQsIDEzXSwgWzQwLjc1OTYyMzk5OTc3Njk2LCAtNzMuODgyMzE2MDAwNTc3MjMsIDZdLCBbNDAuNzU5NzIxOTk5ODQ5NTUsIC03My44ODEzODYwMDA0Mzg1MSwgMV0sIFs0MC43NTk4MTg5OTk3MzcyNywgLTczLjg4MDQ1OTAwMjYxMDUsIDZdLCBbNDAuNzU5OTE2OTk5NzQ1NzEsIC03My44Nzk1MjcwMDA4MjYyOSwgN10sIFs0MC43NTY0MDQ5OTk5OTczNywgLTczLjg5NzkxMDAwMDkwMDE3LCA4XSwgWzQwLjc1NjUxMDk5OTg4ODg2LCAtNzMuODk2OTA4MDAzMzYxNzQsIDZdLCBbNDAuNzU2NjA3OTk5OTIzMzYsIC03My44OTU5NzYwMDE2NTc0NCwgM10sIFs0MC43NTY3MTA5OTk5OTkzNTYsIC03My44OTUwNTIwMDA5MTg1MSwgMF0sIFs0MC43NTY3OTQ5OTk3MzM1MzYsIC03My44OTQxMjQwMDI4ODQzMywgM10sIFs0MC43NTY4OTc5OTk5MDU4MjQsIC03My44OTMxODgwMDIxNzgyLCAxMF0sIFs0MC43NTY5ODk5OTk5NDQ5MDYsIC03My44OTIyNjEwMDA1MDQ3NSwgM10sIFs0MC43NTcwOTU5OTk5NTA3MSwgLTczLjg5MTMzMzAwMjQ1MTQyLCA2XSwgWzQwLjc1NzE5Mjk5OTg4MzgxLCAtNzMuODkwNDAzMDAyMTEwNywgNl0sIFs0MC43NTcyOTI5OTk4Njc1MywgLTczLjg4OTQ3MjAwMTQ0Mjg1LCA1XSwgWzQwLjc1NzM4Nzk5OTc5Mjg1NCwgLTczLjg4ODU0NDAwMjI3MDMxLCAxMV0sIFs0MC43NTc0ODQ5OTk4NDIxNTYsIC03My44ODc2MTMwMDExMjI2NSwgOF0sIFs0MC43NTc1ODU5OTk5MDYyOCwgLTczLjg4NjY4NTAwMDgyOTYzLCA5XSwgWzQwLjc1NzY4Mzk5OTc3Njk2NSwgLTczLjg4NTc1MzAwMzQ0MjYsIDZdLCBbNDAuNzU3Nzc5OTk5OTQ4MzEsIC03My44ODQ4MjQwMDI3MTIzNSwgMF0sIFs0MC43NTc4NzY5OTk3NzAwOCwgLTczLjg4Mzg5NzAwMDg3MDY2LCA0XSwgWzQwLjc1Nzk3NTk5OTg2MDgxLCAtNzMuODgyOTY0MDAwODc1MiwgOF0sIFs0MC43NTgwNzM5OTk4NzcwMzQsIC03My44ODIwMzUwMDI5MTAyMywgMjBdLCBbNDAuNzU4MTcwOTk5NzU1MTgsIC03My44ODExMDQwMDA2NTI4MywgM10sIFs0MC43NTgyNjg5OTk4Njg4LCAtNzMuODgwMTc1MDAwODE0MzYsIDhdLCBbNDAuNzU4MzY3OTk5ODYzMDMsIC03My44NzkyNDUwMDAxNjIyLCAwXSwgWzQwLjc1ODQ2Mzk5OTc1NjEzLCAtNzMuODc4MzE1MDAyMjEyNjcsIDExXSwgWzQwLjc1ODU2MTk5OTkyMjM0LCAtNzMuODc3Mzg1MDAxNDk2MTgsIDRdLCBbNDAuNzU4NjU5OTk5OTkzOTI0LCAtNzMuODc2NDU1MDAxNjM5MDcsIDZdLCBbNDAuNzU4Njc5OTk5OTkzMjgsIC03My44NzU1MTEwMDIyNTMyMywgMTNdLCBbNDAuNzU4NTkyOTk5NzU2ODE0LCAtNzMuODc0NTEyMDAxNzM4NjgsIDE5XSwgWzQwLjc1ODY5NDk5OTg4MjgyLCAtNzMuODczNDQ4MDAzNTkxNTIsIDEwXSwgWzQwLjc1ODc5MTk5OTg0NDUxLCAtNzMuODcyNTUyMDAwNzM5MzksIDldLCBbNDAuNzU4ODg1OTk5OTcwMDUsIC03My44NzE2NTYwMDEwNDQ1MSwgNF0sIFs0MC43NTg5ODI5OTk5NjEzMDQsIC03My44NzA3NDcwMDE4NTc5OSwgM10sIFs0MC43NTIyOTM5OTk4Mzc2MywgLTczLjg5ODY5OTAwMDAxMjk3LCAwXSwgWzQwLjc1MjMxNzk5OTgyNDA4LCAtNzMuODk4NDcxMDAwOTU4NDcsIDJdLCBbNDAuNzUyNDU4OTk5OTA3OTQ0LCAtNzMuODk3MTUxMDAwNTkwNTMsIDExXSwgWzQwLjc1MjU1OTk5OTc0MjA1LCAtNzMuODk2MTkyMDAxNjA4MjcsIDJdLCBbNDAuNzUyNjU2OTk5NzU3NDEsIC03My44OTUyNjAwMDM2MDA0NywgMTFdLCBbNDAuNzUyNzU1OTk5OTI3NTksIC03My44OTQzMzAwMDI4NjExNywgNl0sIFs0MC43NTI4NTE5OTk3ODU4NzUsIC03My44OTMzOTgwMDA5NzY1NSwgMTVdLCBbNDAuNzUyOTQ3OTk5NzM5NzMsIC03My44OTI0NzMwMDIwODYwNCwgMTVdLCBbNDAuNzUzMDQ2OTk5ODgyNzUsIC03My44OTE1NDUwMDM1MDExMiwgM10sIFs0MC43NTMxNDQ5OTk4MTU3MjQsIC03My44OTA2MTMwMDEwMzg4MywgOV0sIFs0MC43NTMyNDI5OTk3NTE5NSwgLTczLjg4OTY4NDAwMjM5OTk2LCAxNl0sIFs0MC43NTMzMzk5OTk4MzcwNywgLTczLjg4ODc1NjAwMjQ3Mjk2LCAxNF0sIFs0MC43NTM0Mzc5OTk5OTE5LCAtNzMuODg3ODI0MDAyNTk4NDYsIDE1XSwgWzQwLjc1MzUzNTk5OTgyODYxLCAtNzMuODg2ODk2MDAyNzQyNTMsIDhdLCBbNDAuNzUzNjMzOTk5OTIyOTc1LCAtNzMuODg1OTY1MDAwNzY1OCwgMTJdLCBbNDAuNzUzNzMwOTk5OTY5ODcsIC03My44ODUwMzcwMDA3NTM3NCwgMThdLCBbNDAuNzUzODI4OTk5ODY1MzYsIC03My44ODQxMDYwMDA1MDk5OSwgMTFdLCBbNDAuNzUzOTI1OTk5ODQ1ODksIC03My44ODMxNzcwMDI0NzA0MywgMTBdLCBbNDAuNzU0MDIzOTk5ODA1NDU1LCAtNzMuODgyMjQ2MDAwMzQ3OTIsIDEyXSwgWzQwLjc1NDEyMjk5OTg0MTgyLCAtNzMuODgxMzE1MDAwOTA5NzEsIDEwXSwgWzQwLjc1NDIxOTk5OTk3ODYsIC03My44ODAzODgwMDE0ODcwMywgMTNdLCBbNDAuNzU0MzE3OTk5OTYyNDc0LCAtNzMuODc5NDU2MDAyMTM3NTksIDVdLCBbNDAuNzU0NDE0OTk5OTYxNjksIC03My44Nzg1MjkwMDA4NzY4OCwgMTZdLCBbNDAuNzU0NTEyOTk5OTcwMSwgLTczLjg3NzU5ODAwMzA2MTM0LCAxNF0sIFs0MC43NTQ2MDk5OTk5MjIyNjYsIC03My44NzY2NjgwMDA1NDE5NywgOF0sIFs0MC43NTQ3MDg5OTk4NjIwOSwgLTczLjg3NTczOTAwMjIwNjI2LCAxOF0sIFs0MC43NTQ4MDU5OTk5MDY3OSwgLTczLjg3NDgwOTAwMTQzNDE5LCA4XSwgWzQwLjc1NDkwMzk5OTc3MDM4LCAtNzMuODczODc5MDAzMjY1MzMsIDZdLCBbNDAuNzU1MTEzOTk5OTkxMjksIC03My44NzE4ODYwMDAwMTQ2OCwgM10sIFs0MC43NTUyMDc5OTk5ODQzODUsIC03My44NzA5OTUwMDEwMDE2OSwgOF0sIFs0MC43NTUwMjk5OTk4NzYyNiwgLTczLjg3MjY5MjAwMDQ2ODE4LCAzN10sIFs0MC43NTIzNjQ5OTk5MzEzMSwgLTczLjg5NzY5OTAwMzM3NjUyLCAwXSwgWzQwLjc1Mzk2MDk5OTg4MTI0NCwgLTczLjg3MTY4NTAwMjM2MjM0LCAwXSwgWzQwLjc1Mzg2MTk5OTg0MDg2LCAtNzMuODcyMDcwMDAyNjQ0NDYsIDBdLCBbNDAuNzUzNjcxOTk5OTU0NjU1LCAtNzMuODczNjU1MDAzNjA2NDMsIDFdLCBbNDAuNzUzOTg1OTk5OTg1MzA0LCAtNzMuODcyMTQyMDAyNjA3OSwgMl0sIFs0MC43NTAzMTkwMDAwMDE0NCwgLTczLjg5ODY1OTAwMzU0MzM5LCAyXSwgWzQwLjc1MDQxNjk5OTkxNTIyNCwgLTczLjg5NzcyODAwMjYyODI0LCAxMV0sIFs0MC43NTA1NDE5OTk4MjE4MDYsIC03My44OTY1NDAwMDA4MDAxNiwgNV0sIFs0MC43NTA2MTk5OTk5NTU4NDUsIC03My44OTU3OTkwMDIxNjIzMiwgMF0sIFs0MC43NTA3MTY5OTk5MTkyMiwgLTczLjg5NDg5OTAwMTAxNTE2LCA3XSwgWzQwLjc1MDgxMDk5OTk0MzY4LCAtNzMuODkzOTc2MDAwNTQzMjYsIDRdLCBbNDAuNzUwOTA3OTk5NzQ1MDksIC03My44OTMwNDgwMDExMDA0MiwgOV0sIFs0MC43NTEwMDM5OTk5NTYyLCAtNzMuODkyMTIxMDAwMzE0NjUsIDNdLCBbNDAuNzUxMTAwOTk5OTc0NTc1LCAtNzMuODkxMTg5MDAwMDQ5NzIsIDRdLCBbNDAuNzUxMTk5OTk5Nzg5MjcsIC03My44OTAyNjIwMDMzNzA1LCA4XSwgWzQwLjc1MTI5Njk5OTg2MjU5NiwgLTczLjg4OTMzMjAwMDc1NTUyLCA4XSwgWzQwLjc1MTM5NTk5OTc5NzU0LCAtNzMuODg4NDAxMDAzMTM4MzYsIDZdLCBbNDAuNzUxNDk0OTk5ODkxNTcsIC03My44ODc0NzAwMDI3NDExNCwgNV0sIFs0MC43NTE1OTE5OTk4NzEwNCwgLTczLjg4NjU0MzAwMjAxNzU5LCAxMl0sIFs0MC43NTE2ODk5OTk3NTQ1NiwgLTczLjg4NTYxMzAwMTE4NDM4LCAxMF0sIFs0MC43NTE3ODc5OTk5OTQzODQsIC03My44ODQ2ODQwMDA5NzUzLCA4XSwgWzQwLjc1MTg4NDk5OTg2OTYzLCAtNzMuODgzNzUzMDAwMjMzMjEsIDEwXSwgWzQwLjc1MTk4MTk5OTgyNjgzLCAtNzMuODgyODIzMDAwMTQzNDYsIDNdLCBbNDAuNzUyMDgwOTk5OTg5MTMsIC03My44ODE4OTQwMDA3NzM0NywgOF0sIFs0MC43NTIxNzg5OTk3Mzg1OCwgLTczLjg4MDk2MzAwMDg3NTMxLCA5XSwgWzQwLjc1MjI4NDk5OTkzMzA1LCAtNzMuODgwMDM0MDAxNDA3MjEsIDldLCBbNDAuNzUyMzcyOTk5NzU2MSwgLTczLjg3OTEwNDAwMjk4ODkxLCA2XSwgWzQwLjc1MjQ3MDk5OTk3NDM2LCAtNzMuODc4MTc0MDAxODU3NSwgOV0sIFs0MC43NTI1Njc5OTk4MTUyMiwgLTczLjg3NzI0NzAwMjc1ODM1LCA3XSwgWzQwLjc1MjY2NTk5OTkxMjA0LCAtNzMuODc2MzE1MDAwMTk4NjIsIDldLCBbNDAuNzUyNzYyOTk5OTI2MDksIC03My44NzUzODYwMDMzMTA1NywgMTNdLCBbNDAuNzUyODU4OTk5OTU5NjgsIC03My44NzQ0NTUwMDI0MTY0MSwgMTBdLCBbNDAuNzUyOTYxOTk5ODE2ODksIC03My44NzM1MjgwMDI3MTExNywgOF0sIFs0MC43NTMxNDE5OTk4Mjk4OCwgLTczLjg3MjYxNDAwMTY2MjQ3LCAxNV0sIFs0MC43NTM1NjM5OTk4MjE3LCAtNzMuODcwNjk1MDAyNTE1MiwgM10sIFs0MC43NTMzMjU5OTk5ODAzMDUsIC03My44NzE3OTIwMDA5MzUwNywgMjBdLCBbNDAuNzUwNDE3OTk5OTkxNjgsIC03My44OTcyODQwMDI4OTA2LCAwXSwgWzQwLjc0OTQ0ODk5OTc4Mzc0NSwgLTczLjg5NTYzMjAwMjIzMTExLCAwXSwgWzQwLjc0OTQzMTk5OTk3MzcxNiwgLTczLjg5NTg3NTAwMjc1NjU4LCAwXSwgWzQwLjc0OTUxNTk5OTczNDYyNiwgLTczLjg5NDY5MzAwMjM5MzY3LCAxXSwgWzQwLjc0ODQ5Mzk5OTkxNzc4LCAtNzMuODk3OTE3MDAyODQ1MywgMl0sIFs0MC43NDg0MDg5OTk3OTQ3MiwgLTczLjg5NzYzMjAwMTcyNDU5LCAwXSwgWzQwLjc0ODQ0MTk5OTkzODgzLCAtNzMuODk2NzM2MDAxMjc3MzksIDBdLCBbNDAuNzQ4NTkyOTk5ODM4MDQsIC03My44OTUzNTEwMDA5MzgzOSwgMF0sIFs0MC43NDg2Nzk5OTk5MzA0NzQsIC03My44OTQ1NDAwMDI4MTk1OCwgNF0sIFs0MC43NDg3NzA5OTk5MDc5MjYsIC03My44OTM2MDcwMDE1NjYxNSwgM10sIFs0MC43NDg3MzM5OTk4MDQwNSwgLTczLjg5Mzk4NTAwMTI1Nzk5LCAwXSwgWzQwLjc0ODg2Mjk5OTc2NDM0LCAtNzMuODkyNzA4MDAxMDgwNjUsIDIwXSwgWzQwLjc0ODk2NDk5OTc0MzM4LCAtNzMuODkxNzQ4MDAyNDEzMTQsIDhdLCBbNDAuNzQ4OTU5OTk5Nzk0NDIsIC03My44OTE3OTkwMDM1ODYwNiwgMF0sIFs0MC43NDkwNTY5OTk5ODAyNiwgLTczLjg5MDg2NTAwMzEyMzYxLCAwXSwgWzQwLjc0OTA2MDk5OTc0ODgxNCwgLTczLjg5MDgyNDAwMDY4MTc3LCAxMl0sIFs0MC43NDkxNTM5OTk4NjI3OCwgLTczLjg4OTkzMjAwMzI2MzUyLCAwXSwgWzQwLjc0OTI0NDk5OTc3Mjk0LCAtNzMuODg5MDIwMDAxMzE4MTIsIDBdLCBbNDAuNzQ5MzU1OTk5ODU3MywgLTczLjg4ODAyOTAwMjc5ODE2LCA3XSwgWzQwLjc0OTQ1Mzk5OTc3OTM4NCwgLTczLjg4NzA5ODAwMzE3NDYzLCA1XSwgWzQwLjc0OTU1MTk5OTc1MDM3LCAtNzMuODg2MTY4MDAwNTMwMjIsIDZdLCBbNDAuNzQ5NjUwOTk5Nzg2ODYsIC03My44ODUyNDEwMDM0MzkyNSwgMTVdLCBbNDAuNzQ5NzQ0OTk5OTQwMTUsIC03My44ODQzMTEwMDIyMzMyNiwgMjBdLCBbNDAuNzQ5ODQ0OTk5ODMzMTY1LCAtNzMuODgzMzgwMDAyNTg3NzQsIDIwXSwgWzQwLjc0OTkzOTk5OTg5NDQ5LCAtNzMuODgyNDUxMDAxMjEyMjIsIDEwXSwgWzQwLjc1MDAzODk5OTkzOTk2LCAtNzMuODgxNTIwMDAxNDEwNCwgN10sIFs0MC43NTAxMzc5OTk5MDIwOSwgLTczLjg4MDU5MzAwMTM5NzQxLCAxMF0sIFs0MC43NTAyMzY5OTk3NTYyMywgLTczLjg3OTY2MjAwMzI1OTE2LCA5XSwgWzQwLjc1MDMzMzk5OTg5OTAzNCwgLTczLjg3ODczMjAwMjExNDI1LCAyXSwgWzQwLjc1MDQzMTk5OTg1NjgxNSwgLTczLjg3NzgwMjAwMDAyMjUxLCAxNl0sIFs0MC43NTA1Mjk5OTk4ODA0ODQsIC03My44NzY4NzYwMDEzODI3OCwgMTBdLCBbNDAuNzUwNjI2OTk5NzkwMjQsIC03My44NzU5NDUwMDMxMzAxLCA5XSwgWzQwLjc1MDcyNDk5OTc1NjQzLCAtNzMuODc1MDE1MDAwMDI0NzUsIDldLCBbNDAuNzUwODIyOTk5OTA1NTY2LCAtNzMuODc0MDg1MDAxMzg3MTIsIDRdLCBbNDAuNzUwOTE0OTk5OTUxMjM1LCAtNzMuODczMTYwMDAyOTY0MzcsIDExXSwgWzQwLjc1MTA0NDk5OTkzNDA0NSwgLTczLjg3MjIxMDAwMDIxMzY3LCAwXSwgWzQwLjc1MTI2MDk5OTc4MDE2NSwgLTczLjg3MTY2MzAwMDMwMzQxLCAzXSwgWzQwLjc0ODU0Njk5OTk5MDExLCAtNzMuODk1ODQwMDAyODQ4NywgM10sIFs0MC43NTE0NDM5OTk5MzM1ODUsIC03My44NzA4OTIwMDI2MTQ4MiwgMF0sIFs0MC43NDg1MjI5OTk5NDc2MywgLTczLjg5NjA1NzAwMDMwMDMyLCAwXSwgWzQwLjc0ODQ5Njk5OTgzMTI5NiwgLTczLjg5NjMwMTAwMDIzNjE5LCAwXSwgWzQwLjc0NzEzNDk5OTc1ODYxLCAtNzMuODkyNDA5MDAyNTMwMzYsIDE1XSwgWzQwLjc0NzIzNzk5OTk2ODQxLCAtNzMuODkxNTA1MDAyNDQ3NzYsIDRdLCBbNDAuNzQ3MzQyOTk5OTAwODQsIC03My44OTA1NzYwMDAyMTc3MywgMV0sIFs0MC43NDc0NDU5OTk5MTkwOTQsIC03My44ODk2NTEwMDA3NjY2OCwgM10sIFs0MC43NDc1NDI5OTk3ODE1NCwgLTczLjg4ODc1NjAwMzEwMjEyLCAwXSwgWzQwLjc0NzU2MDk5OTc3NDA5NSwgLTczLjg5ODMzNjAwMDc4NjczLCAxXSwgWzQwLjc0NzU4OTk5OTgyOTA3NCwgLTczLjg5NzQ4MzAwMTgxNjI1LCAwXSwgWzQwLjc0NzYyMjk5OTk4NDQ4LCAtNzMuODk2NTc3MDAwODUyMTksIDJdLCBbNDAuNzQ3NTc0OTk5ODI0MDc0LCAtNzMuODk1ODI5MDAyODQ3NzIsIDBdLCBbNDAuNzQ3MDE0OTk5OTY2NCwgLTczLjg5NTUzMDAwMzA5OTg5LCAwXSwgWzQwLjc0NzQ4MDk5OTgzMjg5NSwgLTczLjg3MjA2ODAwMDQzNzQ0LCAwXSwgWzQwLjc0NzY1NDk5OTg5MDkzLCAtNzMuODcwNzA5MDAxNTAyMiwgMF0sIFs0MC43NDgxNTY5OTk5MjkxMiwgLTczLjg3MjIyMDAwMDgzMzY4LCAxXSwgWzQwLjc0ODMwNzk5OTkwNzQwNCwgLTczLjg3MTAzMDAwMjU4NDU2LCAyXSwgWzQwLjc0ODE1NDk5OTg1NzIzLCAtNzMuODcwOTU5MDAxNzQ2NDYsIDBdLCBbNDAuNzQ5Njc4OTk5OTE1MTMsIC03My44OTg0NzcwMDA3NTc5NiwgMF0sIFs0MC43NDkyOTk5OTk5NTM3MywgLTczLjg5NzU3NzAwMTAwMTg4LCAxM10sIFs0MC43NTk4NjQ5OTk4MTk5MDQsIC03My44OTg0ODUwMDMyMzY3MSwgMF0sIFs0MC43NTQ2OTA5OTk5NDI1NCwgLTczLjg5ODY0MTAwMDU4NzI5LCAwXSwgWzQwLjc0OTc2NDk5OTg2MzUxLCAtNzMuODk2MDk5MDAwMTg4MjksIDBdLCBbNDAuNzQ5MDA0OTk5OTgyMzI2LCAtNzMuODk2ODk4MDAwMzc5ODQsIDBdLCBbNDAuNzQ5MzQ3OTk5OTE5MjYsIC03My44OTY4NzYwMDI0NTAxOCwgMF0sIFs0MC43NDg4MzI5OTk3Mzc2MTYsIC03My44OTU1MDEwMDA2MTQ3MywgMF0sIFs0MC43NDgzMDc5OTk4MTc5NiwgLTczLjg5NTI1NTAwMzQ2MjE3LCAwXSwgWzQwLjc0NzY5MTk5OTc4MzIyLCAtNzMuODkzNzk3MDAwOTY5MTksIDIxXSwgWzQwLjc0NzAzODk5OTkyMzQyNiwgLTczLjg4OTU3MTAwMjkxMDg4LCAxM10sIFs0MC43NDcxMzM5OTk4OTcxNSwgLTczLjg4ODY3ODAwMjUwMTA1LCAxMl0sIFs0MC43NDcxNjY5OTk3OTI4OTYsIC03My44ODc4MDAwMDE5NTIyNywgMF0sIFs0MC43NDcyODcwMDAwMDI2NCwgLTczLjg4NzYwNjAwMjk3MTY0LCAwXSwgWzQwLjc0NzM0MDk5OTk0MDA4NiwgLTczLjg4NjcxNzAwMzU2ODczLCAxN10sIFs0MC43NDc0Mzk5OTk3Njk4NywgLTczLjg4NTc4NzAwMjg3ODUsIDldLCBbNDAuNzQ3NTM0OTk5Nzc0NTksIC03My44ODQ4NTUwMDMzMTM3MywgMTRdLCBbNDAuNzQ3NjI5OTk5ODQ3MjYsIC03My44ODM5MzYwMDA4MTY4MiwgMjJdLCBbNDAuNzQ3MTkxOTk5Nzc3NjcsIC03My44ODI4OTMwMDIxMzE1MiwgMV0sIFs0MC43NDc3MzM5OTk4NzU0MiwgLTczLjg4Mjk5OTAwMzI1NzU1LCAxNF0sIFs0MC43NDc4Mjk5OTk5OTcxNSwgLTczLjg4MjA3MTAwMzQ0Mjc1LCA4XSwgWzQwLjc0NzkyNjk5OTgxMTEwNiwgLTczLjg4MTEzNzAwMDkxNTczLCAxN10sIFs0MC43NDgwMjQ5OTk3NTM2MywgLTczLjg4MDIwNjAwMDE5OTg1LCAxNF0sIFs0MC43NDgxMjM5OTk4OTc1MywgLTczLjg3OTI3ODAwMTI2NjM0LCA2XSwgWzQwLjc0ODIxNTk5OTg4NDM0NCwgLTczLjg3ODQwNjAwMzM4ODczLCAwXSwgWzQwLjc0ODMxODk5OTkwNTQ3LCAtNzMuODc3NDE2MDAyMzI4MSwgOV0sIFs0MC43NDg0MTU5OTk5MDk2MDQsIC03My44NzY0ODAwMDExMDY0NywgMTFdLCBbNDAuNzQ4NTIwOTk5OTY2OTE0LCAtNzMuODc1NDg5MDAxNDM4NjgsIDBdLCBbNDAuNzQ5Mzk5OTk5NzQ0MjcsIC03My44NzU3MjQwMDE5OTI3NSwgMF0sIFs0MC43NTAwOTc5OTk5OTUzNzYsIC03My44NzQ5MDIwMDAzNTgwMywgM10sIFs0MC43NDg2MTM5OTk4OTMxMjQsIC03My44NzQ2MjkwMDIyNDAwNiwgOF0sIFs0MC43NTA0MTI5OTk4NjMyMTUsIC03My44NzQwMTIwMDA5OTQ0MSwgMl0sIFs0MC43NDg3MTY5OTk3NzU3MywgLTczLjg3MzcwMTAwMDgwMjU0LCAxMl0sIFs0MC43NDc4NzE5OTk4MjkxMTUsIC03My44NzIxNTUwMDM1NzEzMSwgMF0sIFs0MC43NDg4NTE5OTk3NTUxMDQsIC03My44NzIzNzMwMDAxMTcxNCwgMTJdLCBbNDAuNzUwNzM0OTk5OTEyMDc2LCAtNzMuODczMTE5MDAyMjc2MzQsIDFdLCBbNDAuNzQ4ODEyOTk5OTM5OTYsIC03My44NzI3NzQwMDIzNTEyNiwgMF0sIFs0MC43NTg5OTg5OTk4OTQsIC03My44NzQ1ODQwMDAxNzI5MiwgOF0sIFs0MC43NDg5NTY5OTk5NTE5MzYsIC03My44NzEzNTYwMDE4NTgyMywgMF0sIFs0MC43NDg5MDU5OTk5NTIwMTUsIC03My44NzE4NDEwMDE0MzcyOSwgMF0sIFs0MC43NTkzNTc5OTk4MzMyNSwgLTczLjg3MzU2NjAwMDE4NjAzLCAwXSwgWzQwLjc1OTY1Nzk5OTczMTI2LCAtNzMuODcyNzEwMDAwMTMwMDMsIDBdLCBbNDAuNzU5OTU1OTk5ODIxODksIC03My44NzE4OTcwMDIxOTAyMiwgMF0sIFs0MC43NDg0Njc5OTk5MDg3NTUsIC03My44NzM1MTMwMDMxMjIwNCwgMl0sIFs0MC43NDg2ODU5OTk4MjI5MDQsIC03My44NzM5ODMwMDE3OTQ0LCAyXSwgWzQwLjc0NzI2MTk5OTg2NTk4NCwgLTczLjg3NDQ0MjAwMTExOTAyLCAzXSwgWzQwLjc0ODE0MDk5OTkyMzQ4NiwgLTczLjg3NjQxODAwMjA0MTE4LCAzXSwgWzQwLjc0ODM2ODk5OTc1Njk2LCAtNzMuODc2OTI1MDAwNDY1LCA2XSwgWzQwLjc0Nzc3Nzk5OTc5NDUyLCAtNzMuODgyNTY5MDAyNDk4NjQsIDRdLCBbNDAuNzQ3MDM5OTk5OTcxOTgsIC03My44ODI5ODkwMDE3MDA3NSwgN10sIFs0MC43NDc4NjQ5OTk3NDQwNzQsIC03My44NzM5NzgwMDA3NjY0MywgNV0sIFs0MC43NDc1MTA5OTk5MzYzOSwgLTczLjg3Njc4OTAwMjIwNjc2LCAyXSwgWzQwLjc0NzAzMzk5OTc1MDIxLCAtNzMuODc5MzYzMDAxNTI5MiwgM10sIFs0MC43NDc5MDg5OTk4NTcwMSwgLTczLjg4MTMwNDAwMjA2OTA5LCAwXSwgWzQwLjc0OTA2Mzk5OTc4NywgLTczLjg3MDM3OTAwMzQ5MTY5LCAxMF0sIFs0MC43NDc2Mzg5OTk4MTI4NjQsIC03My44Nzg4OTIwMDI0ODExNSwgM10sIFs0MC43NDg3NTc5OTk5MDg2NzYsIC03My44NzMzMDMwMDIyNjcxNiwgMV0sIFs0MC43NDg3MDA5OTk5NDc4LCAtNzMuODk2MTY4MDAxNjc1MjIsIDJdLCBbNDAuNzQ4ODM0OTk5NzQ5MTY0LCAtNzMuODk2NDU0MDAxNTMyMzksIDBdLCBbNDAuNzQ4NDM4OTk5OTI2NzEsIC03My44NzYyNTIwMDE4ODQ3MSwgOV0sIFs0MC43NDgwNjE5OTk4ODIyNCwgLTczLjg3OTgzOTAwMDgxNjg2LCA0XSwgWzQwLjc1MDE1Nzk5OTk5MDg2LCAtNzMuODk3MTQ4MDAyNDIzNCwgMF0sIFs0MC43NDc1OTE5OTk3NDUzMiwgLTczLjg5NTQ0MTAwMTgyODcxLCAwXSwgWzQwLjc1OTg1Nzk5OTg1MzE3LCAtNzMuODk4NjgyMDAyMjA0MjQsIDBdXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtaW5PcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgbWF4Wm9vbTogMTgsCiAgICAgICAgICAgICAgICAgICAgbWF4OiAxLjAsCiAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiAxMiwKICAgICAgICAgICAgICAgICAgICBibHVyOiAxNSwKICAgICAgICAgICAgICAgICAgICBncmFkaWVudDogbnVsbAogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hYWMzZTE1ZWFkY2Q0OTY3OTRjNjE1M2IzZDUwNTgwNCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDI4MDk5OTkwNzkwNSwgLTczLjg5NzUwMTAwMjA0Mjk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTU3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wY2E5ODRhMDJmMDc0MzEzODFjYjNmYjQ2MTJhNTY0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JhZjU4YTkxNWFkYTQ4Yjg4N2M1M2RlYjY5ZTdkNTUzID0gJCgnPGRpdiBpZD0iaHRtbF9iYWY1OGE5MTVhZGE0OGI4ODdjNTNkZWI2OWU3ZDU1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDkyOS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wY2E5ODRhMDJmMDc0MzEzODFjYjNmYjQ2MTJhNTY0Ni5zZXRDb250ZW50KGh0bWxfYmFmNThhOTE1YWRhNDhiODg3YzUzZGViNjllN2Q1NTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9hYWMzZTE1ZWFkY2Q0OTY3OTRjNjE1M2IzZDUwNTgwNC5iaW5kUG9wdXAocG9wdXBfMGNhOTg0YTAyZjA3NDMxMzgxY2IzZmI0NjEyYTU2NDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzJlZWIxYTliNWNiMDQ0M2I5MTZjNWJlYjZkZTdmYjU1ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU0NjgwOTk5ODM5MjQ1LCAtNzMuODkzNzM0MDAxNjYzODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1NS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGJjNWJiYjg3NGQxNDI3NDhiYTFkZGQ5ZWY4ZTJkYjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NTcwNzFkODk1OTI0YzA5YmVhODE1MGVjYzAyMWNlYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNDU3MDcxZDg5NTkyNGMwOWJlYTgxNTBlY2MwMjFjZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5MzMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGJjNWJiYjg3NGQxNDI3NDhiYTFkZGQ5ZWY4ZTJkYjQuc2V0Q29udGVudChodG1sXzQ1NzA3MWQ4OTU5MjRjMDliZWE4MTUwZWNjMDIxY2VjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMmVlYjFhOWI1Y2IwNDQzYjkxNmM1YmViNmRlN2ZiNTUuYmluZFBvcHVwKHBvcHVwX2RiYzViYmI4NzRkMTQyNzQ4YmExZGRkOWVmOGUyZGI0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9iMWU0ZmYwNmRhNDg0NTBkOGNjNTJhMmMxMGRjNTRhNiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDc3Nzk5OTgzNjMzNSwgLTczLjg5MjgwMzAwMjY2Mzc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE2MjQ5M2RlZjU2YjQxOTdiZjM2MmEwYTc4Y2Y5ZTVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzQ2MDRhZmM5NTgyNDYxOTg4MDM3YzY4ZDhhMTU2OWMgPSAkKCc8ZGl2IGlkPSJodG1sXzM0NjA0YWZjOTU4MjQ2MTk4ODAzN2M2OGQ4YTE1NjljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTM0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE2MjQ5M2RlZjU2YjQxOTdiZjM2MmEwYTc4Y2Y5ZTVlLnNldENvbnRlbnQoaHRtbF8zNDYwNGFmYzk1ODI0NjE5ODgwMzdjNjhkOGExNTY5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2IxZTRmZjA2ZGE0ODQ1MGQ4Y2M1MmEyYzEwZGM1NGE2LmJpbmRQb3B1cChwb3B1cF8xNjI0OTNkZWY1NmI0MTk3YmYzNjJhMGE3OGNmOWU1ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYzdmMmQ0ZTlkMDgzNDEwN2EyNGEzZWNiZWY5ZTU1OTYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ4NzI5OTk4MzU1NCwgLTczLjg5MTg4MTAwMjQ4NDgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNzAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzOGQ3OWM3OWM1YzQyNDBiOGMxNGY0Y2VmMjM5MzI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTdlZmQyMDg4NmQyNDk1MDg4NDM1ZDdiMDlmMDlmMTggPSAkKCc8ZGl2IGlkPSJodG1sXzE3ZWZkMjA4ODZkMjQ5NTA4ODQzNWQ3YjA5ZjA5ZjE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTM1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzOGQ3OWM3OWM1YzQyNDBiOGMxNGY0Y2VmMjM5MzI0LnNldENvbnRlbnQoaHRtbF8xN2VmZDIwODg2ZDI0OTUwODg0MzVkN2IwOWYwOWYxOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2M3ZjJkNGU5ZDA4MzQxMDdhMjRhM2VjYmVmOWU1NTk2LmJpbmRQb3B1cChwb3B1cF9mMzhkNzljNzljNWM0MjQwYjhjMTRmNGNlZjIzOTMyNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMWEyNjVlYTM2MTcwNGQ1YWEwODdiYzljZDU4YTg4OTIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ5NzM5OTk5MDMyNiwgLTczLjg5MDk0ODAwMjczMzc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VjMThjOTI2ODhhNTRkNzNhZWRjODIyNzgxMGZjMTgwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjA3N2RjNWY0ZWMyNDM0OWI2ZjJjZjlhNTJiNTY2MzggPSAkKCc8ZGl2IGlkPSJodG1sX2YwNzdkYzVmNGVjMjQzNDliNmYyY2Y5YTUyYjU2NjM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTM2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjMThjOTI2ODhhNTRkNzNhZWRjODIyNzgxMGZjMTgwLnNldENvbnRlbnQoaHRtbF9mMDc3ZGM1ZjRlYzI0MzQ5YjZmMmNmOWE1MmI1NjYzOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzFhMjY1ZWEzNjE3MDRkNWFhMDg3YmM5Y2Q1OGE4ODkyLmJpbmRQb3B1cChwb3B1cF9lYzE4YzkyNjg4YTU0ZDczYWVkYzgyMjc4MTBmYzE4MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMDg1Y2M1MDc2ZmI4NGEzOGFhNGYzMTc2ODkwNzE3ZjAgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTUwNzA5OTk5MTc0MTUsIC03My44OTAwMTMwMDM1MDgzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kODY0NDVlOTFlMWU0NTg5OTMwNTAwMTViMjJhNjFhMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U0ZDQ3ZDk1YWQ2ZTRhNmZhMTViZWIyNjAwMTc4ZDFiID0gJCgnPGRpdiBpZD0iaHRtbF9lNGQ0N2Q5NWFkNmU0YTZmYTE1YmViMjYwMDE3OGQxYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDkzNy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kODY0NDVlOTFlMWU0NTg5OTMwNTAwMTViMjJhNjFhMS5zZXRDb250ZW50KGh0bWxfZTRkNDdkOTVhZDZlNGE2ZmExNWJlYjI2MDAxNzhkMWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wODVjYzUwNzZmYjg0YTM4YWE0ZjMxNzY4OTA3MTdmMC5iaW5kUG9wdXAocG9wdXBfZDg2NDQ1ZTkxZTFlNDU4OTkzMDUwMDE1YjIyYTYxYTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzcyY2Y2MTk2NGZjZTRkZmY5YTczMWI0ZjA1ZjA5M2E4ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU1MTY5OTk5ODczNjcsIC03My44ODkwODgwMDM1ODk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYTE5OWQ3NWFkMDI0MTk0YmYyNWE4YzU0YTZkZTdiYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU3YjhjODUzNjIzMjRkOWVhYTMzY2UzNDM4YWU1ZTg1ID0gJCgnPGRpdiBpZD0iaHRtbF81N2I4Yzg1MzYyMzI0ZDllYWEzM2NlMzQzOGFlNWU4NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDkzOC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYTE5OWQ3NWFkMDI0MTk0YmYyNWE4YzU0YTZkZTdiYi5zZXRDb250ZW50KGh0bWxfNTdiOGM4NTM2MjMyNGQ5ZWFhMzNjZTM0MzhhZTVlODUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV83MmNmNjE5NjRmY2U0ZGZmOWE3MzFiNGYwNWYwOTNhOC5iaW5kUG9wdXAocG9wdXBfMmExOTlkNzVhZDAyNDE5NGJmMjVhOGM1NGE2ZGU3YmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzFiYWYwYWM5NzE5MjQ5ZDU4YWY2MTA1NmUzYWUzYWU3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU1MjY1OTk5NzQzMywgLTczLjg4ODE1NzAwMzQzNjA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc1OWQyNmZlOTIzNTQwZjI5NDQwZTk3ZmI2NDY0YmZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2U1NDE4YTQ2ZGM2NGYzZGE4OWU3N2I4NTc2ZmZkYTMgPSAkKCc8ZGl2IGlkPSJodG1sXzNlNTQxOGE0NmRjNjRmM2RhODllNzdiODU3NmZmZGEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTM5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc1OWQyNmZlOTIzNTQwZjI5NDQwZTk3ZmI2NDY0YmZjLnNldENvbnRlbnQoaHRtbF8zZTU0MThhNDZkYzY0ZjNkYTg5ZTc3Yjg1NzZmZmRhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzFiYWYwYWM5NzE5MjQ5ZDU4YWY2MTA1NmUzYWUzYWU3LmJpbmRQb3B1cChwb3B1cF83NTlkMjZmZTkyMzU0MGYyOTQ0MGU5N2ZiNjQ2NGJmYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTExMmVjMjBkNGI0NDQ4OThiNWFkNGExYmQzYmMyMTUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTUzNjI5OTk5OTY3MiwgLTczLjg4NzIyODAwMjEzODQ5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E2ZmI0OTQ0MmU0YzQ0NGRhMDI4OGU5Y2FlZGUxY2ViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGNkZGZjN2I5MTU5NDIxMmI1YzQyYmJmOGY2OTU2ZWYgPSAkKCc8ZGl2IGlkPSJodG1sXzhjZGRmYzdiOTE1OTQyMTJiNWM0MmJiZjhmNjk1NmVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E2ZmI0OTQ0MmU0YzQ0NGRhMDI4OGU5Y2FlZGUxY2ViLnNldENvbnRlbnQoaHRtbF84Y2RkZmM3YjkxNTk0MjEyYjVjNDJiYmY4ZjY5NTZlZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzUxMTJlYzIwZDRiNDQ0ODk4YjVhZDRhMWJkM2JjMjE1LmJpbmRQb3B1cChwb3B1cF9hNmZiNDk0NDJlNGM0NDRkYTAyODhlOWNhZWRlMWNlYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDJiM2UyM2Q3ZjI3NDBjMGEyYWI0MWY2NTI3NzM3NGUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTU0NTk5OTk3MzMxNSwgLTczLjg4NjI5ODAwMTkxMzEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNjQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QyZjhjZTRjMGMzYzRmODFhNjAwMmE2NjBmNjFkNTFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTRmYjIyNGM4MDFjNDE0YThlYTIxZWM0NThlNDBjNzYgPSAkKCc8ZGl2IGlkPSJodG1sXzU0ZmIyMjRjODAxYzQxNGE4ZWEyMWVjNDU4ZTQwYzc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QyZjhjZTRjMGMzYzRmODFhNjAwMmE2NjBmNjFkNTFhLnNldENvbnRlbnQoaHRtbF81NGZiMjI0YzgwMWM0MTRhOGVhMjFlYzQ1OGU0MGM3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2QyYjNlMjNkN2YyNzQwYzBhMmFiNDFmNjUyNzczNzRlLmJpbmRQb3B1cChwb3B1cF9kMmY4Y2U0YzBjM2M0ZjgxYTYwMDJhNjYwZjYxZDUxYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMTA3YWQ5YjA0NmQwNDBkZGE4N2JjNzMxYzZiMThlMjggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTU1NTY5OTk3NTE3NywgLTczLjg4NTM2NzAwMjc1NDE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNzkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg0ZjI0MTUzMjBlMTRhMzJiZjVmOWZmNjczNDcxYzZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTgzNTAxOTI5MTU0NGFlOGI5YTEwOTM4N2Q2MWFlMDMgPSAkKCc8ZGl2IGlkPSJodG1sXzk4MzUwMTkyOTE1NDRhZThiOWExMDkzODdkNjFhZTAzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg0ZjI0MTUzMjBlMTRhMzJiZjVmOWZmNjczNDcxYzZjLnNldENvbnRlbnQoaHRtbF85ODM1MDE5MjkxNTQ0YWU4YjlhMTA5Mzg3ZDYxYWUwMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzEwN2FkOWIwNDZkMDQwZGRhODdiYzczMWM2YjE4ZTI4LmJpbmRQb3B1cChwb3B1cF84NGYyNDE1MzIwZTE0YTMyYmY1ZjlmZjY3MzQ3MWM2YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfODBmNmZiZGMxYjkzNDM5MWFiNzMwYzI4OGNhNjMyNmEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTU2NTY5OTk5MzExOSwgLTczLjg4NDQzOTAwMjM1MzA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlhOGY5YzBkYjRkMDQwMGJhNDhhMTc2ZDQ4ZGJhZDY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTRmNzg3ODBmNzY4NGFkYTlkNjQwMzJlMDZmNTNlYzUgPSAkKCc8ZGl2IGlkPSJodG1sX2E0Zjc4NzgwZjc2ODRhZGE5ZDY0MDMyZTA2ZjUzZWM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlhOGY5YzBkYjRkMDQwMGJhNDhhMTc2ZDQ4ZGJhZDY5LnNldENvbnRlbnQoaHRtbF9hNGY3ODc4MGY3Njg0YWRhOWQ2NDAzMmUwNmY1M2VjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzgwZjZmYmRjMWI5MzQzOTFhYjczMGMyODhjYTYzMjZhLmJpbmRQb3B1cChwb3B1cF85YThmOWMwZGI0ZDA0MDBiYTQ4YTE3NmQ0OGRiYWQ2OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZWQ4NWJhYTg5YmU1NDVhNDliYjU4ODhhOTlkNTA3ZWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTU3NTQ5OTk3NDgxNCwgLTczLjg4MzUwNzAwMzM1Mzg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNjEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwODlkZTVkMjk3YjRjNzFiMTU2YjE5MWExNzk1MjJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjUyNmUyODk4N2RkNGViMmJiNWJjMmJhYzhlNTc0ZGUgPSAkKCc8ZGl2IGlkPSJodG1sX2I1MjZlMjg5ODdkZDRlYjJiYjViYzJiYWM4ZTU3NGRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQ0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcwODlkZTVkMjk3YjRjNzFiMTU2YjE5MWExNzk1MjJlLnNldENvbnRlbnQoaHRtbF9iNTI2ZTI4OTg3ZGQ0ZWIyYmI1YmMyYmFjOGU1NzRkZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2VkODViYWE4OWJlNTQ1YTQ5YmI1ODg4YTk5ZDUwN2VjLmJpbmRQb3B1cChwb3B1cF83MDg5ZGU1ZDI5N2I0YzcxYjE1NmIxOTFhMTc5NTIyZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTc1OTczNGYyMDQ1NGFkYTk2MTdhOTE1M2M1NDUzYjYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTU4NTM5OTk4NTYwMywgLTczLjg4MjU3OTAwMjc0ODI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMzYzc1MDkyMmIyYTQyMTc5ZmIyYThiMjFkNTNlZmJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2RlMjZjMjQzNzc1NDE4OGE2ZTRhYmFlNDM1ZTk0YzQgPSAkKCc8ZGl2IGlkPSJodG1sX2NkZTI2YzI0Mzc3NTQxODhhNmU0YWJhZTQzNWU5NGM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQ1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMzYzc1MDkyMmIyYTQyMTc5ZmIyYThiMjFkNTNlZmJiLnNldENvbnRlbnQoaHRtbF9jZGUyNmMyNDM3NzU0MTg4YTZlNGFiYWU0MzVlOTRjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzU3NTk3MzRmMjA0NTRhZGE5NjE3YTkxNTNjNTQ1M2I2LmJpbmRQb3B1cChwb3B1cF8zM2M3NTA5MjJiMmE0MjE3OWZiMmE4YjIxZDUzZWZiYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNWYxZDBiOGI0MGYzNGQxYWIyMzdjZGFmOTY1NGIyOTUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTU5NTE5OTk5MjUxMjQsIC03My44ODE2NDgwMDE2NjYxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDg1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMWYwNTg4YWQ2NTY0ZDAzYTEyYjdlZmRjOTllODRkMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI1NTQ3ZDYyNjI0NTRiYzViM2QxZTM1YjQyYTkwNzgzID0gJCgnPGRpdiBpZD0iaHRtbF8yNTU0N2Q2MjYyNDU0YmM1YjNkMWUzNWI0MmE5MDc4MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDk0Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMWYwNTg4YWQ2NTY0ZDAzYTEyYjdlZmRjOTllODRkMC5zZXRDb250ZW50KGh0bWxfMjU1NDdkNjI2MjQ1NGJjNWIzZDFlMzViNDJhOTA3ODMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV81ZjFkMGI4YjQwZjM0ZDFhYjIzN2NkYWY5NjU0YjI5NS5iaW5kUG9wdXAocG9wdXBfZjFmMDU4OGFkNjU2NGQwM2ExMmI3ZWZkYzk5ZTg0ZDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNjOGEwNGQ0NGIzODRlZGFiZjMyZjJjODI0NjIyYTViID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2MDQ4OTk5ODQ4MDU1LCAtNzMuODgwNzE5MDAyODg5MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3Ni4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGEwNGRhZjkyNTgwNGZmMTk5ZmMzN2ZjYWJiNzI4NDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOGVjMjI4YWE4OTg0NGZjYjJlZjc3MDZmZmI5ZTljMSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjhlYzIyOGFhODk4NDRmY2IyZWY3NzA2ZmZiOWU5YzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGEwNGRhZjkyNTgwNGZmMTk5ZmMzN2ZjYWJiNzI4NDQuc2V0Q29udGVudChodG1sX2Y4ZWMyMjhhYTg5ODQ0ZmNiMmVmNzcwNmZmYjllOWMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfM2M4YTA0ZDQ0YjM4NGVkYWJmMzJmMmM4MjQ2MjJhNWIuYmluZFBvcHVwKHBvcHVwXzRhMDRkYWY5MjU4MDRmZjE5OWZjMzdmY2FiYjcyODQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9kMjI1ZTJlM2ViZWY0MzAxYmM2YTMyMWYxYTQwMGZmOSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NjE0Njk5OTkzMDk0LCAtNzMuODc5Nzg5MDAzMzY3MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTA0NzQxYmM5NGViNDQ4N2EyMTRhNGJiZjRlMTIwZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNjU2Mjg3YzFkNjM0NTA3YmQ1NWU3Y2I0YjdlYzkzYiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTY1NjI4N2MxZDYzNDUwN2JkNTVlN2NiNGI3ZWM5M2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTA0NzQxYmM5NGViNDQ4N2EyMTRhNGJiZjRlMTIwZWEuc2V0Q29udGVudChodG1sXzE2NTYyODdjMWQ2MzQ1MDdiZDU1ZTdjYjRiN2VjOTNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZDIyNWUyZTNlYmVmNDMwMWJjNmEzMjFmMWE0MDBmZjkuYmluZFBvcHVwKHBvcHVwX2UwNDc0MWJjOTRlYjQ0ODdhMjE0YTRiYmY0ZTEyMGVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jZTZmMzliNmNkMGE0NTczYjQzMzIwNDBlYjAwZGFkZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NjI0MDk5OTkwMTE5NSwgLTczLjg3ODg2MTAwMDgxNDUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1ZmQxNzkyYzA5ODQ4NTNhZTgxMmQxNTNiZTU4MzI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDJkY2QzN2FkZTdhNDhhYWIyZTI0OTJmZTY4YmE3NDIgPSAkKCc8ZGl2IGlkPSJodG1sX2QyZGNkMzdhZGU3YTQ4YWFiMmUyNDkyZmU2OGJhNzQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQ5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1ZmQxNzkyYzA5ODQ4NTNhZTgxMmQxNTNiZTU4MzI3LnNldENvbnRlbnQoaHRtbF9kMmRjZDM3YWRlN2E0OGFhYjJlMjQ5MmZlNjhiYTc0Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2NlNmYzOWI2Y2QwYTQ1NzNiNDMzMjA0MGViMDBkYWRlLmJpbmRQb3B1cChwb3B1cF9lNWZkMTc5MmMwOTg0ODUzYWU4MTJkMTUzYmU1ODMyNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNGEyMDliN2IzZDA3NGQ3MmIxMmZjMDg3M2ViMWRhN2EgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTY0Mzg5OTk4MDk2NSwgLTczLjg3Njk5ODAwMjk4OTA4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxODZjZmMzNDk1OTQyYjJhNWFiMzYyOGE3MTQyNGZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjJmYjBkMDQyN2ZmNGNmYzg4OTE1ZTE5NWVmZjY3OTggPSAkKCc8ZGl2IGlkPSJodG1sXzYyZmIwZDA0MjdmZjRjZmM4ODkxNWUxOTVlZmY2Nzk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTUxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxODZjZmMzNDk1OTQyYjJhNWFiMzYyOGE3MTQyNGZiLnNldENvbnRlbnQoaHRtbF82MmZiMGQwNDI3ZmY0Y2ZjODg5MTVlMTk1ZWZmNjc5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzRhMjA5YjdiM2QwNzRkNzJiMTJmYzA4NzNlYjFkYTdhLmJpbmRQb3B1cChwb3B1cF8wMTg2Y2ZjMzQ5NTk0MmIyYTVhYjM2MjhhNzE0MjRmYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOTc3Njc1MTAzNDZjNGZkN2FhNzNmYTA1NDk3ZDMzZjYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTY2MzM5OTk5OTM1NzUsIC03My44NzUxMzkwMDI2MTU0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDY3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OTRjZGZlOGJjNTM0ZWI3YjVmYmU4YmExNzY5Zjg3YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U5YjQ2ODk4OGUwYjRkMjQ5OGRiMDk1OTQwYjI4OWZhID0gJCgnPGRpdiBpZD0iaHRtbF9lOWI0Njg5ODhlMGI0ZDI0OThkYjA5NTk0MGIyODlmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDk1My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83OTRjZGZlOGJjNTM0ZWI3YjVmYmU4YmExNzY5Zjg3Yi5zZXRDb250ZW50KGh0bWxfZTliNDY4OTg4ZTBiNGQyNDk4ZGIwOTU5NDBiMjg5ZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85Nzc2NzUxMDM0NmM0ZmQ3YWE3M2ZhMDU0OTdkMzNmNi5iaW5kUG9wdXAocG9wdXBfNzk0Y2RmZThiYzUzNGViN2I1ZmJlOGJhMTc2OWY4N2IpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2M2NWUwY2M2YTE4YTRhYjA4ZTk2MzJmZGFkNmY0ZDQ3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2ODAzOTk5NzUyMTQ0LCAtNzMuODczNjU3MDAwMjYxMDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNTcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzYTY3Y2Q2NDM0MzQxOWFiNGNjOGRmMzdjZjIyNDhiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWIzY2ZjZTIwODQ2NDZmNGI5NGU1NzhmZDMzNGRiYTYgPSAkKCc8ZGl2IGlkPSJodG1sXzFiM2NmY2UyMDg0NjQ2ZjRiOTRlNTc4ZmQzMzRkYmE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTgyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzYTY3Y2Q2NDM0MzQxOWFiNGNjOGRmMzdjZjIyNDhiLnNldENvbnRlbnQoaHRtbF8xYjNjZmNlMjA4NDY0NmY0Yjk0ZTU3OGZkMzM0ZGJhNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2M2NWUwY2M2YTE4YTRhYjA4ZTk2MzJmZGFkNmY0ZDQ3LmJpbmRQb3B1cChwb3B1cF9mM2E2N2NkNjQzNDM0MTlhYjRjYzhkZjM3Y2YyMjQ4YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTU5ZGZiYTE4NzQ2NDk5YmJjOGY1YzQ3ZDFlYTJmNmYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTc5NTQ5OTk5NzE1OCwgLTczLjg5ODE5MjAwMzM4MjI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk2NTk0NzA5OWQxMDQyZDdhNTQ3ZTBkNmJhYzZmMDFiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTZiZTJkM2I0MjA0NGY2MmE1NGQ2ZjBmNDYwZTVmOTYgPSAkKCc8ZGl2IGlkPSJodG1sXzE2YmUyZDNiNDIwNDRmNjJhNTRkNmYwZjQ2MGU1Zjk2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4MzQzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk2NTk0NzA5OWQxMDQyZDdhNTQ3ZTBkNmJhYzZmMDFiLnNldENvbnRlbnQoaHRtbF8xNmJlMmQzYjQyMDQ0ZjYyYTU0ZDZmMGY0NjBlNWY5Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzU1OWRmYmExODc0NjQ5OWJiYzhmNWM0N2QxZWEyZjZmLmJpbmRQb3B1cChwb3B1cF85NjU5NDcwOTlkMTA0MmQ3YTU0N2UwZDZiYWM2ZjAxYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDFmMzFjYmY0NTEwNDM4ODgyMjY1ODdiMTQwZjI3MmYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTkwMzY5OTk4MTQyNSwgLTczLjg4Nzg5MzAwMDExNjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NmNzEwMTczM2MxYjQ0YTc5MzNjYzVlMDkwZTJlMjU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjEwZWY4NzM5MTUxNDdkZmJmNzc4YTZmZWZiMGJlODIgPSAkKCc8ZGl2IGlkPSJodG1sX2YxMGVmODczOTE1MTQ3ZGZiZjc3OGE2ZmVmYjBiZTgyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4MzU0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmNzEwMTczM2MxYjQ0YTc5MzNjYzVlMDkwZTJlMjU2LnNldENvbnRlbnQoaHRtbF9mMTBlZjg3MzkxNTE0N2RmYmY3NzhhNmZlZmIwYmU4Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2QxZjMxY2JmNDUxMDQzODg4MjI2NTg3YjE0MGYyNzJmLmJpbmRQb3B1cChwb3B1cF9jZjcxMDE3MzNjMWI0NGE3OTMzY2M1ZTA5MGUyZTI1NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjFhZjZmNzFmNmE1NDJlYzhjYzQ1NjZmYjFjOGVlNWQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTkyMzI5OTk4MTQyMTYsIC03My44ODYwMzYwMDA4MDAxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZTQ2ZWQ3ZmM1OTQ0NzJhODBmYTI2OGI2ZmIwMTI1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzYTc2NGJkODc0NjRmMWE5MGYzNjY0NWQ0ZjE3ZmE3ID0gJCgnPGRpdiBpZD0iaHRtbF80M2E3NjRiZDg3NDY0ZjFhOTBmMzY2NDVkNGYxN2ZhNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODM1Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZTQ2ZWQ3ZmM1OTQ0NzJhODBmYTI2OGI2ZmIwMTI1MC5zZXRDb250ZW50KGh0bWxfNDNhNzY0YmQ4NzQ2NGYxYTkwZjM2NjQ1ZDRmMTdmYTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9iMWFmNmY3MWY2YTU0MmVjOGNjNDU2NmZiMWM4ZWU1ZC5iaW5kUG9wdXAocG9wdXBfNWU0NmVkN2ZjNTk0NDcyYTgwZmEyNjhiNmZiMDEyNTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzc5ZmI1YTNmNjhhMjQ2NDFiYzkxOTFiNTcwYzMxYWUyID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU5OTE2OTk5NzQ1NzEsIC03My44Nzk1MjcwMDA4MjYyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMxLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTg5ZThlOWQ5N2Y0MDZiYmY3YWNjMTgzY2U3M2ZkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBkN2M1NzllMGRlMjRkN2NiNGIxYjcwNGMzYmUyNzc5ID0gJCgnPGRpdiBpZD0iaHRtbF8wZDdjNTc5ZTBkZTI0ZDdjYjRiMWI3MDRjM2JlMjc3OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODM2My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTg5ZThlOWQ5N2Y0MDZiYmY3YWNjMTgzY2U3M2ZkMy5zZXRDb250ZW50KGh0bWxfMGQ3YzU3OWUwZGUyNGQ3Y2I0YjFiNzA0YzNiZTI3NzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV83OWZiNWEzZjY4YTI0NjQxYmM5MTkxYjU3MGMzMWFlMi5iaW5kUG9wdXAocG9wdXBfYjE4OWU4ZTlkOTdmNDA2YmJmN2FjYzE4M2NlNzNmZDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzk1ZTZlNjA0NTYwNjQ1YTBhZmY2YTQzMjEwZTJhYjliID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2Nzk0OTk5NzMzNTM2LCAtNzMuODk0MTI0MDAyODg0MzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjNkYmM5MzRjNjI2NDExNWFlOWU1ZWQyNGZkNDYzMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MWRmM2RiNWViNzY0MjUwYTY3ZjI4ZGVmNDgyOTk1YiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzFkZjNkYjVlYjc2NDI1MGE2N2YyOGRlZjQ4Mjk5NWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1NzAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjNkYmM5MzRjNjI2NDExNWFlOWU1ZWQyNGZkNDYzMTYuc2V0Q29udGVudChodG1sXzcxZGYzZGI1ZWI3NjQyNTBhNjdmMjhkZWY0ODI5OTViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOTVlNmU2MDQ1NjA2NDVhMGFmZjZhNDMyMTBlMmFiOWIuYmluZFBvcHVwKHBvcHVwXzIzZGJjOTM0YzYyNjQxMTVhZTllNWVkMjRmZDQ2MzE2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yMTdlODZhMTJiNzY0NDY2YjYxMTNhNTAwMTAyZTU4NyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Njg5Nzk5OTkwNTgyNCwgLTczLjg5MzE4ODAwMjE3ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjYzMWRjZDE3YWEwNDcwNTlhZWNkZDI4OWQ0YTdiYWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYzg3MDMyMDNhNDg0OWIwYTJkN2IyNTAyMTk0N2Y3NCA9ICQoJzxkaXYgaWQ9Imh0bWxfMWM4NzAzMjAzYTQ4NDliMGEyZDdiMjUwMjE5NDdmNzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1NzEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjYzMWRjZDE3YWEwNDcwNTlhZWNkZDI4OWQ0YTdiYWYuc2V0Q29udGVudChodG1sXzFjODcwMzIwM2E0ODQ5YjBhMmQ3YjI1MDIxOTQ3Zjc0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjE3ZTg2YTEyYjc2NDQ2NmI2MTEzYTUwMDEwMmU1ODcuYmluZFBvcHVwKHBvcHVwXzY2MzFkY2QxN2FhMDQ3MDU5YWVjZGQyODlkNGE3YmFmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83NDY0ODg1MmFiOGQ0OGQwOTczZDgyZDhkZWE5MGY0OCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Njk4OTk5OTk0NDkwNiwgLTczLjg5MjI2MTAwMDUwNDc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwY2JlMDcxOGJkZTQ4NDBiODA3NmQxNWRkOWMxNjRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODRmOTY0ZjYzZTY2NDc1MmIwNWY2NzY5M2RmNGFlYTMgPSAkKCc8ZGl2IGlkPSJodG1sXzg0Zjk2NGY2M2U2NjQ3NTJiMDVmNjc2OTNkZjRhZWEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTcyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwY2JlMDcxOGJkZTQ4NDBiODA3NmQxNWRkOWMxNjRkLnNldENvbnRlbnQoaHRtbF84NGY5NjRmNjNlNjY0NzUyYjA1ZjY3NjkzZGY0YWVhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzc0NjQ4ODUyYWI4ZDQ4ZDA5NzNkODJkOGRlYTkwZjQ4LmJpbmRQb3B1cChwb3B1cF8zMGNiZTA3MThiZGU0ODQwYjgwNzZkMTVkZDljMTY0ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjg1MzdmNDRkNjI1NGIxNjlkMGUyZGQxMmI2OWZhYWIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTcwOTU5OTk5NTA3MSwgLTczLjg5MTMzMzAwMjQ1MTQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhZjFiOTBmY2JhYjRkYmJiMzU1NTdhZDVlM2UwYmE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODA1ZWFjNWY0ZTNjNDQzMzg4OWEyMTgwMGE5ZDU5ZGYgPSAkKCc8ZGl2IGlkPSJodG1sXzgwNWVhYzVmNGUzYzQ0MzM4ODlhMjE4MDBhOWQ1OWRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTczLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhZjFiOTBmY2JhYjRkYmJiMzU1NTdhZDVlM2UwYmE0LnNldENvbnRlbnQoaHRtbF84MDVlYWM1ZjRlM2M0NDMzODg5YTIxODAwYTlkNTlkZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2I4NTM3ZjQ0ZDYyNTRiMTY5ZDBlMmRkMTJiNjlmYWFiLmJpbmRQb3B1cChwb3B1cF9hYWYxYjkwZmNiYWI0ZGJiYjM1NTU3YWQ1ZTNlMGJhNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYzQ2ZDQ3NjY3MTQzNDE0NDg0MDcwOTI5OGFmZDU0MzMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTcxOTI5OTk4ODM4MSwgLTczLjg5MDQwMzAwMjExMDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDdjNGNmZGI2ZGRjNGIxZmJiMTAzNTk0MzQzNGI4ZjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZmFjZjI5ODYxM2E0OWE0OWFiOTFmZjg1MTgxZjU0NSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWZhY2YyOTg2MTNhNDlhNDlhYjkxZmY4NTE4MWY1NDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1NzQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDdjNGNmZGI2ZGRjNGIxZmJiMTAzNTk0MzQzNGI4Zjcuc2V0Q29udGVudChodG1sXzFmYWNmMjk4NjEzYTQ5YTQ5YWI5MWZmODUxODFmNTQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYzQ2ZDQ3NjY3MTQzNDE0NDg0MDcwOTI5OGFmZDU0MzMuYmluZFBvcHVwKHBvcHVwXzQ3YzRjZmRiNmRkYzRiMWZiYjEwMzU5NDM0MzRiOGY3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV84ZDA3M2FkNzRjYjk0ZTJhYWQ4ZGIxZWZiMWViNmI2MiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NzI5Mjk5OTg2NzUzLCAtNzMuODg5NDcyMDAxNDQyODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyNS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGYwMDU5OTgzZjcyNGIyYTkyNGZjMDBkM2Y4ODYxOTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNjI0MzlhYzdjM2Q0NjQ2OWMxMzEwNzhiNGZhNzE0ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjYyNDM5YWM3YzNkNDY0NjljMTMxMDc4YjRmYTcxNGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1NzUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGYwMDU5OTgzZjcyNGIyYTkyNGZjMDBkM2Y4ODYxOTcuc2V0Q29udGVudChodG1sX2I2MjQzOWFjN2MzZDQ2NDY5YzEzMTA3OGI0ZmE3MTRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOGQwNzNhZDc0Y2I5NGUyYWFkOGRiMWVmYjFlYjZiNjIuYmluZFBvcHVwKHBvcHVwX2RmMDA1OTk4M2Y3MjRiMmE5MjRmYzAwZDNmODg2MTk3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yNDU5MmNmMzJkYmE0MDc5OGExYmY1OTZjZDM3NzhjNiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NzM4Nzk5OTc5Mjg1NCwgLTczLjg4ODU0NDAwMjI3MDMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VlOWJiMTBjZTIyNjRlYTU4Y2Y4ZGUwOGM3MjI3ZjkwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDdkZTVkYTFkNmMwNGZhZTkxMjY1NTE2ZTg5YTg2N2YgPSAkKCc8ZGl2IGlkPSJodG1sXzQ3ZGU1ZGExZDZjMDRmYWU5MTI2NTUxNmU4OWE4NjdmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTc2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VlOWJiMTBjZTIyNjRlYTU4Y2Y4ZGUwOGM3MjI3ZjkwLnNldENvbnRlbnQoaHRtbF80N2RlNWRhMWQ2YzA0ZmFlOTEyNjU1MTZlODlhODY3Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzI0NTkyY2YzMmRiYTQwNzk4YTFiZjU5NmNkMzc3OGM2LmJpbmRQb3B1cChwb3B1cF9lZTliYjEwY2UyMjY0ZWE1OGNmOGRlMDhjNzIyN2Y5MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfODViM2FmYzA2MzdjNGZmYWI3NzVmOTBiOWMwNWM2OWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTc0ODQ5OTk4NDIxNTYsIC03My44ODc2MTMwMDExMjI2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYWRmY2EzZWRhMjg0MzA4YmIxYWRmNjg2MGVlZDFjMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdhOTFmYTE2ZjcwMTQxMjM4N2FjMzc0YTc2Y2QwMzE1ID0gJCgnPGRpdiBpZD0iaHRtbF83YTkxZmExNmY3MDE0MTIzODdhYzM3NGE3NmNkMDMxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU3Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYWRmY2EzZWRhMjg0MzA4YmIxYWRmNjg2MGVlZDFjMS5zZXRDb250ZW50KGh0bWxfN2E5MWZhMTZmNzAxNDEyMzg3YWMzNzRhNzZjZDAzMTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV84NWIzYWZjMDYzN2M0ZmZhYjc3NWY5MGI5YzA1YzY5Yy5iaW5kUG9wdXAocG9wdXBfM2FkZmNhM2VkYTI4NDMwOGJiMWFkZjY4NjBlZWQxYzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzM1MzkxMTNlOGE5YTQxNzNiYWE0NjlkNGQxY2EyMjk2ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3NTg1OTk5OTA2MjgsIC03My44ODY2ODUwMDA4Mjk2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NmM3MWU2MmZjMGI0ZDE4YmE1NDVjM2FkYjlhNjMwNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U4OWY0YzJkNDdiMjQxNWM4ZjIyYjNkZWQyMTE0YzQ3ID0gJCgnPGRpdiBpZD0iaHRtbF9lODlmNGMyZDQ3YjI0MTVjOGYyMmIzZGVkMjExNGM0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU3OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NmM3MWU2MmZjMGI0ZDE4YmE1NDVjM2FkYjlhNjMwNy5zZXRDb250ZW50KGh0bWxfZTg5ZjRjMmQ0N2IyNDE1YzhmMjJiM2RlZDIxMTRjNDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8zNTM5MTEzZThhOWE0MTczYmFhNDY5ZDRkMWNhMjI5Ni5iaW5kUG9wdXAocG9wdXBfNzZjNzFlNjJmYzBiNGQxOGJhNTQ1YzNhZGI5YTYzMDcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Q3ZmE0ZjUzOTJkYzQzNzhiZTE2MDIxMDkxODdlZDFiID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3NjgzOTk5Nzc2OTY1LCAtNzMuODg1NzUzMDAzNDQyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI4LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YThmNzExYzY4Yzg0OTE2OGU2Y2IzNmVmMDZlYmI3NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzljZjRjYzU0MGRkZDQwMjVhY2Y3MGQ1NTA3ODZlNmI3ID0gJCgnPGRpdiBpZD0iaHRtbF85Y2Y0Y2M1NDBkZGQ0MDI1YWNmNzBkNTUwNzg2ZTZiNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU3OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YThmNzExYzY4Yzg0OTE2OGU2Y2IzNmVmMDZlYmI3NS5zZXRDb250ZW50KGh0bWxfOWNmNGNjNTQwZGRkNDAyNWFjZjcwZDU1MDc4NmU2YjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9kN2ZhNGY1MzkyZGM0Mzc4YmUxNjAyMTA5MTg3ZWQxYi5iaW5kUG9wdXAocG9wdXBfN2E4ZjcxMWM2OGM4NDkxNjhlNmNiMzZlZjA2ZWJiNzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2YyZGE4M2IwMmE4MDRlOTNhMmI4M2U2YmY0Zjg3YTJhID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3Nzc5OTk5OTQ4MzEsIC03My44ODQ4MjQwMDI3MTIzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMTMwM2YxM2VhOTc0NGU4OTUzM2EzMzhiNThlMTU1MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMwMTRhNDAzNDk1ZjQ1ODA4N2Y0ODRiZjU5MTY0ZmFjID0gJCgnPGRpdiBpZD0iaHRtbF8zMDE0YTQwMzQ5NWY0NTgwODdmNDg0YmY1OTE2NGZhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU4MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMTMwM2YxM2VhOTc0NGU4OTUzM2EzMzhiNThlMTU1Mi5zZXRDb250ZW50KGh0bWxfMzAxNGE0MDM0OTVmNDU4MDg3ZjQ4NGJmNTkxNjRmYWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mMmRhODNiMDJhODA0ZTkzYTJiODNlNmJmNGY4N2EyYS5iaW5kUG9wdXAocG9wdXBfMTEzMDNmMTNlYTk3NDRlODk1MzNhMzM4YjU4ZTE1NTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Q2ZDA3ZjBmYzY2ZjQ3NmQ5NjlkMjEyYTU1MzNhNTA3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3ODc2OTk5NzcwMDgsIC03My44ODM4OTcwMDA4NzA2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIyLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZGMyNjFlNWQ0NWE0ZDBkYWEwOGI1NzUzNmViY2Y1ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3YWE0YzFlM2YzNTRiNjRiNGU1Njg3YmFhNzI3ZWFlID0gJCgnPGRpdiBpZD0iaHRtbF9jN2FhNGMxZTNmMzU0YjY0YjRlNTY4N2JhYTcyN2VhZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU4MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZGMyNjFlNWQ0NWE0ZDBkYWEwOGI1NzUzNmViY2Y1ZC5zZXRDb250ZW50KGh0bWxfYzdhYTRjMWUzZjM1NGI2NGI0ZTU2ODdiYWE3MjdlYWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9kNmQwN2YwZmM2NmY0NzZkOTY5ZDIxMmE1NTMzYTUwNy5iaW5kUG9wdXAocG9wdXBfOGRjMjYxZTVkNDVhNGQwZGFhMDhiNTc1MzZlYmNmNWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzU2YTI2MDUyOTM4NTQwZTRiOWQ2M2RkZjk5NWY5ODY0ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3OTc1OTk5ODYwODEsIC03My44ODI5NjQwMDA4NzUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyNTdiMDVkMmNiNDRkNzg4ZTJiM2Q3ZGM0NGI1NjVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjU1MjJjZmMxMjZiNDQyMTgyNzkzOTFhMGY5OTMxZWEgPSAkKCc8ZGl2IGlkPSJodG1sX2Y1NTIyY2ZjMTI2YjQ0MjE4Mjc5MzkxYTBmOTkzMWVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTgyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyNTdiMDVkMmNiNDRkNzg4ZTJiM2Q3ZGM0NGI1NjVhLnNldENvbnRlbnQoaHRtbF9mNTUyMmNmYzEyNmI0NDIxODI3OTM5MWEwZjk5MzFlYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzU2YTI2MDUyOTM4NTQwZTRiOWQ2M2RkZjk5NWY5ODY0LmJpbmRQb3B1cChwb3B1cF81MjU3YjA1ZDJjYjQ0ZDc4OGUyYjNkN2RjNDRiNTY1YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOGY0Mzg4ZjQ0ZjY2NDM3OTg3NWU4NTY3NTc3YzdkNjQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTgxNzA5OTk3NTUxOCwgLTczLjg4MTEwNDAwMDY1MjgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI1MTliZjdkN2IwZjQ0ZTRhYzk5NTcwOTMyZWQ5MDAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjM3MGJlYTY1N2M0NDg2YTg4NDg2ODIxZjRmYTZhMzYgPSAkKCc8ZGl2IGlkPSJodG1sX2IzNzBiZWE2NTdjNDQ4NmE4ODQ4NjgyMWY0ZmE2YTM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTg0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI1MTliZjdkN2IwZjQ0ZTRhYzk5NTcwOTMyZWQ5MDAyLnNldENvbnRlbnQoaHRtbF9iMzcwYmVhNjU3YzQ0ODZhODg0ODY4MjFmNGZhNmEzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzhmNDM4OGY0NGY2NjQzNzk4NzVlODU2NzU3N2M3ZDY0LmJpbmRQb3B1cChwb3B1cF8yNTE5YmY3ZDdiMGY0NGU0YWM5OTU3MDkzMmVkOTAwMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZTMyYzc5NTU2N2QxNGM2NDk2OGQxNjhiN2ZmMzU0ZDQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTgyNjg5OTk4Njg4LCAtNzMuODgwMTc1MDAwODE0MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMThiYTg5MTkxYTc5NDUzOWIwNzNjYTIwNDVkYTE5OTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNGYzY2NjODJjNmY0N2QxYThiYmU0YTUwNGY3ZjY4NCA9ICQoJzxkaXYgaWQ9Imh0bWxfYTRmM2NjYzgyYzZmNDdkMWE4YmJlNGE1MDRmN2Y2ODQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1ODUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMThiYTg5MTkxYTc5NDUzOWIwNzNjYTIwNDVkYTE5OTQuc2V0Q29udGVudChodG1sX2E0ZjNjY2M4MmM2ZjQ3ZDFhOGJiZTRhNTA0ZjdmNjg0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZTMyYzc5NTU2N2QxNGM2NDk2OGQxNjhiN2ZmMzU0ZDQuYmluZFBvcHVwKHBvcHVwXzE4YmE4OTE5MWE3OTQ1MzliMDczY2EyMDQ1ZGExOTk0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9lZTE5NGM5ODYwYzA0Y2YzYjU4ZTM1YTA4ZTIwYjNlMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODM2Nzk5OTg2MzAzLCAtNzMuODc5MjQ1MDAwMTYyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYTM1OGJkNWI5NWE0MTlhYmIzYjExMGMxNGMwYTM3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxZTM2OGY2N2U0ZjQ1ZTQ4MzkxN2RiMjU3ZmZlYTEzID0gJCgnPGRpdiBpZD0iaHRtbF9kMWUzNjhmNjdlNGY0NWU0ODM5MTdkYjI1N2ZmZWExMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU4Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYTM1OGJkNWI5NWE0MTlhYmIzYjExMGMxNGMwYTM3Ny5zZXRDb250ZW50KGh0bWxfZDFlMzY4ZjY3ZTRmNDVlNDgzOTE3ZGIyNTdmZmVhMTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9lZTE5NGM5ODYwYzA0Y2YzYjU4ZTM1YTA4ZTIwYjNlMi5iaW5kUG9wdXAocG9wdXBfMmEzNThiZDViOTVhNDE5YWJiM2IxMTBjMTRjMGEzNzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2ZhMDI5Nzc2ZDc4MzRmZjc4MjdhOGU0YWI2ZDU0OWRmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4NDYzOTk5NzU2MTMsIC03My44NzgzMTUwMDIyMTI2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YTY5NzliMzI5ZDM0YzljYjZiM2RmM2I3NzkxNWUwNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVlZjczMTYyZjNmNTRhZmJhODBlYzQwODAyYmMyMjM2ID0gJCgnPGRpdiBpZD0iaHRtbF81ZWY3MzE2MmYzZjU0YWZiYTgwZWM0MDgwMmJjMjIzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU4Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YTY5NzliMzI5ZDM0YzljYjZiM2RmM2I3NzkxNWUwNi5zZXRDb250ZW50KGh0bWxfNWVmNzMxNjJmM2Y1NGFmYmE4MGVjNDA4MDJiYzIyMzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mYTAyOTc3NmQ3ODM0ZmY3ODI3YThlNGFiNmQ1NDlkZi5iaW5kUG9wdXAocG9wdXBfNmE2OTc5YjMyOWQzNGM5Y2I2YjNkZjNiNzc5MTVlMDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzMxYTljYTcyYmI1ODQxZDFhZDJkMTIyM2NiMGMzMDZhID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4NTYxOTk5OTIyMzQsIC03My44NzczODUwMDE0OTYxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIyLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YmMyY2FmZGVmNTc0YWE0OTU4M2RmMWZmZjc3MDRkNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQwOTAwNDY5MjY3MDRmMTc5ODA3Zjk3NDBlNzlhYzk0ID0gJCgnPGRpdiBpZD0iaHRtbF80MDkwMDQ2OTI2NzA0ZjE3OTgwN2Y5NzQwZTc5YWM5NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU4OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YmMyY2FmZGVmNTc0YWE0OTU4M2RmMWZmZjc3MDRkNi5zZXRDb250ZW50KGh0bWxfNDA5MDA0NjkyNjcwNGYxNzk4MDdmOTc0MGU3OWFjOTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8zMWE5Y2E3MmJiNTg0MWQxYWQyZDEyMjNjYjBjMzA2YS5iaW5kUG9wdXAocG9wdXBfOWJjMmNhZmRlZjU3NGFhNDk1ODNkZjFmZmY3NzA0ZDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2EyNzc1NGMwNGIzMDRkNTM5YWRmYmNiNTFlNjAzODYwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4NTkyOTk5NzU2ODE0LCAtNzMuODc0NTEyMDAxNzM4NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2Ny4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjdhMDlkYzUyNWE3NDBhZmI1MmQyNThiYjQ3MjUxNzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYjhmNzQ2MjJmMmU0Y2U0ODlkYWViYjYyNDZlOGJhMiA9ICQoJzxkaXYgaWQ9Imh0bWxfY2I4Zjc0NjIyZjJlNGNlNDg5ZGFlYmI2MjQ2ZThiYTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1OTEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjdhMDlkYzUyNWE3NDBhZmI1MmQyNThiYjQ3MjUxNzIuc2V0Q29udGVudChodG1sX2NiOGY3NDYyMmYyZTRjZTQ4OWRhZWJiNjI0NmU4YmEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYTI3NzU0YzA0YjMwNGQ1MzlhZGZiY2I1MWU2MDM4NjAuYmluZFBvcHVwKHBvcHVwXzY3YTA5ZGM1MjVhNzQwYWZiNTJkMjU4YmI0NzI1MTcyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85ZGQwNmYzYTBkZDI0ZDEyYWUzZTQzODYzYTcyY2M0MyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Mjg1MTk5OTc4NTg3NSwgLTczLjg5MzM5ODAwMDk3NjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q1NzVlOTYxMTBiMjQzMDY5MDU4MTc4NzQ1YTU4YmU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTZkMGY3ZDcyYmY3NDJlM2EyOTQzY2FkOTY5YjBiY2EgPSAkKCc8ZGl2IGlkPSJodG1sX2U2ZDBmN2Q3MmJmNzQyZTNhMjk0M2NhZDk2OWIwYmNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4ODg4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q1NzVlOTYxMTBiMjQzMDY5MDU4MTc4NzQ1YTU4YmU1LnNldENvbnRlbnQoaHRtbF9lNmQwZjdkNzJiZjc0MmUzYTI5NDNjYWQ5NjliMGJjYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzlkZDA2ZjNhMGRkMjRkMTJhZTNlNDM4NjNhNzJjYzQzLmJpbmRQb3B1cChwb3B1cF9kNTc1ZTk2MTEwYjI0MzA2OTA1ODE3ODc0NWE1OGJlNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYTIzNTFjNjhkMTNjNDNiYzgzY2FkNWU1MTU4NDAyYzEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI5NDc5OTk3Mzk3MywgLTczLjg5MjQ3MzAwMjA4NjA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1YjRhYmEyZDVhMTQ3YWVhYzRmZWNjMDNjY2EzZDAwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTI2YTljYzIyZWRjNDliZDk0NTdjZGI3MzQwNTEyNTUgPSAkKCc8ZGl2IGlkPSJodG1sXzUyNmE5Y2MyMmVkYzQ5YmQ5NDU3Y2RiNzM0MDUxMjU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4ODg5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU1YjRhYmEyZDVhMTQ3YWVhYzRmZWNjMDNjY2EzZDAwLnNldENvbnRlbnQoaHRtbF81MjZhOWNjMjJlZGM0OWJkOTQ1N2NkYjczNDA1MTI1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2EyMzUxYzY4ZDEzYzQzYmM4M2NhZDVlNTE1ODQwMmMxLmJpbmRQb3B1cChwb3B1cF81NWI0YWJhMmQ1YTE0N2FlYWM0ZmVjYzAzY2NhM2QwMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNDI5MWUwMzZmY2JjNGIwZTg4OTRhZTY0Njg5MDFiYjIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTM2MzM5OTk5MjI5NzUsIC03My44ODU5NjUwMDA3NjU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE4YmE3MTc3ODIyODQ2MzU5NjQ1OGYyNTUzMzMyZTZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGNhNWQ5ZjFjNGNjNGM4MThmYzcxZDViMWM4ZDNkZWMgPSAkKCc8ZGl2IGlkPSJodG1sXzBjYTVkOWYxYzRjYzRjODE4ZmM3MWQ1YjFjOGQzZGVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4ODk2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4YmE3MTc3ODIyODQ2MzU5NjQ1OGYyNTUzMzMyZTZkLnNldENvbnRlbnQoaHRtbF8wY2E1ZDlmMWM0Y2M0YzgxOGZjNzFkNWIxYzhkM2RlYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzQyOTFlMDM2ZmNiYzRiMGU4ODk0YWU2NDY4OTAxYmIyLmJpbmRQb3B1cChwb3B1cF8xOGJhNzE3NzgyMjg0NjM1OTY0NThmMjU1MzMzMmU2ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYWZiZWVkYzlhYzkwNDViNTkxZmEyZWQzMTcwYjY2OTAgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTM3MzA5OTk5Njk4NywgLTczLjg4NTAzNzAwMDc1Mzc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNjQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FlMGVjZDk2OGI4OTQyYTM4NDdhNDk2OTVmZjY1ZmI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2M0NWExM2IxYjU4NDMzN2E1OTVhOWJhOTU3MGMyMTAgPSAkKCc8ZGl2IGlkPSJodG1sXzNjNDVhMTNiMWI1ODQzMzdhNTk1YTliYTk1NzBjMjEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4ODk3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FlMGVjZDk2OGI4OTQyYTM4NDdhNDk2OTVmZjY1ZmI2LnNldENvbnRlbnQoaHRtbF8zYzQ1YTEzYjFiNTg0MzM3YTU5NWE5YmE5NTcwYzIxMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2FmYmVlZGM5YWM5MDQ1YjU5MWZhMmVkMzE3MGI2NjkwLmJpbmRQb3B1cChwb3B1cF9hZTBlY2Q5NjhiODk0MmEzODQ3YTQ5Njk1ZmY2NWZiNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZjZlYzMxMzA5NGY1NGMxNzg1ZGYxMzc2M2QxZGQzMDEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ4MDU5OTk5MDY3OSwgLTczLjg3NDgwOTAwMTQzNDE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBhMWU2ZDI3MTUzNzQ1ZDFhOWQ5NzUyZDVmMmFmMjdkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmQ1MGQxYTRkOWU3NGQ1ZDliMDQzYmE4NDgyMmJkZDYgPSAkKCc8ZGl2IGlkPSJodG1sX2ZkNTBkMWE0ZDllNzRkNWQ5YjA0M2JhODQ4MjJiZGQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4OTA4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhMWU2ZDI3MTUzNzQ1ZDFhOWQ5NzUyZDVmMmFmMjdkLnNldENvbnRlbnQoaHRtbF9mZDUwZDFhNGQ5ZTc0ZDVkOWIwNDNiYTg0ODIyYmRkNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Y2ZWMzMTMwOTRmNTRjMTc4NWRmMTM3NjNkMWRkMzAxLmJpbmRQb3B1cChwb3B1cF8wYTFlNmQyNzE1Mzc0NWQxYTlkOTc1MmQ1ZjJhZjI3ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTQxODg3ZjRiMzc5NDE4ZTliMzRhM2VhNWFjZDQ5OTIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ5MDM5OTk3NzAzOCwgLTczLjg3Mzg3OTAwMzI2NTMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlhYmMzOTQwM2Y4NzQ3N2Y4MTU0NGUzZDdmZjViMzkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGNkZDA1ZDU3MzJiNDY4NTkzNTg5NWI1NzVkNTRlMzkgPSAkKCc8ZGl2IGlkPSJodG1sXzBjZGQwNWQ1NzMyYjQ2ODU5MzU4OTViNTc1ZDU0ZTM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4OTA5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlhYmMzOTQwM2Y4NzQ3N2Y4MTU0NGUzZDdmZjViMzkxLnNldENvbnRlbnQoaHRtbF8wY2RkMDVkNTczMmI0Njg1OTM1ODk1YjU3NWQ1NGUzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzU0MTg4N2Y0YjM3OTQxOGU5YjM0YTNlYTVhY2Q0OTkyLmJpbmRQb3B1cChwb3B1cF85YWJjMzk0MDNmODc0NzdmODE1NDRlM2Q3ZmY1YjM5MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTFhNjAzZDA4Y2E0NDU1NWI1Y2Y4NDk0OGNlMWUzOWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTA4MTA5OTk5NDM2OCwgLTczLjg5Mzk3NjAwMDU0MzI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5YWI1OTA4ZjIwYjRmZmU4MjQ1ZDY4Y2M3MTIyZDUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjEzYzYxZTNiMjU2NGFiMmI3YmVkODFkYTEyNmU2ZGYgPSAkKCc8ZGl2IGlkPSJodG1sX2IxM2M2MWUzYjI1NjRhYjJiN2JlZDgxZGExMjZlNmRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDU3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5YWI1OTA4ZjIwYjRmZmU4MjQ1ZDY4Y2M3MTIyZDUyLnNldENvbnRlbnQoaHRtbF9iMTNjNjFlM2IyNTY0YWIyYjdiZWQ4MWRhMTI2ZTZkZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzUxYTYwM2QwOGNhNDQ1NTViNWNmODQ5NDhjZTFlMzljLmJpbmRQb3B1cChwb3B1cF8xOWFiNTkwOGYyMGI0ZmZlODI0NWQ2OGNjNzEyMmQ1MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZWMzZDlhODE2NDQyNDlkYTg2NTYyOTk1MDM2MDMzMGQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTA5MDc5OTk3NDUwOSwgLTczLjg5MzA0ODAwMTEwMDQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FmMWZhMTJlYzkzZTQ1ZGY4MTk3OGFlNDg1MDVjNGJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWVmOTdmZjE0NTM5NDA5YTkwMDlmZGFlMDAyMjM3MzggPSAkKCc8ZGl2IGlkPSJodG1sXzFlZjk3ZmYxNDUzOTQwOWE5MDA5ZmRhZTAwMjIzNzM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDU4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FmMWZhMTJlYzkzZTQ1ZGY4MTk3OGFlNDg1MDVjNGJmLnNldENvbnRlbnQoaHRtbF8xZWY5N2ZmMTQ1Mzk0MDlhOTAwOWZkYWUwMDIyMzczOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2VjM2Q5YTgxNjQ0MjQ5ZGE4NjU2Mjk5NTAzNjAzMzBkLmJpbmRQb3B1cChwb3B1cF9hZjFmYTEyZWM5M2U0NWRmODE5NzhhZTQ4NTA1YzRiZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTAzNTlhYmVkZThkNGRlNmEwMGQ2MDMwYjE0ODBkMGEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTEwMDM5OTk5NTYyLCAtNzMuODkyMTIxMDAwMzE0NjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTgzMzZhMDRkZWUzNDg4ODgxNmZiNzIyZDVmZTkzNjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZmRmOGM0NWZlYmQ0Y2M3ODMxOTkyMjZmYTM4YzFkNyA9ICQoJzxkaXYgaWQ9Imh0bWxfM2ZkZjhjNDVmZWJkNGNjNzgzMTk5MjI2ZmEzOGMxZDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNTkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTgzMzZhMDRkZWUzNDg4ODgxNmZiNzIyZDVmZTkzNjcuc2V0Q29udGVudChodG1sXzNmZGY4YzQ1ZmViZDRjYzc4MzE5OTIyNmZhMzhjMWQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNTAzNTlhYmVkZThkNGRlNmEwMGQ2MDMwYjE0ODBkMGEuYmluZFBvcHVwKHBvcHVwXzk4MzM2YTA0ZGVlMzQ4ODg4MTZmYjcyMmQ1ZmU5MzY3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9lNzBhNjk4NGZhZmU0YTQxYmU2NzNhMWE1ZjMyMWQzNyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTEwMDk5OTk3NDU3NSwgLTczLjg5MTE4OTAwMDA0OTcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNhYjhlMmQzNmE0MTRmOTQ4MjdlMTg4NGY2OWEwYTQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQyMjgzZDM3MTJiNGY3MTlkNmZmYzI1NzQ3MGFhZjcgPSAkKCc8ZGl2IGlkPSJodG1sXzRkMjI4M2QzNzEyYjRmNzE5ZDZmZmMyNTc0NzBhYWY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDYwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNhYjhlMmQzNmE0MTRmOTQ4MjdlMTg4NGY2OWEwYTQ4LnNldENvbnRlbnQoaHRtbF80ZDIyODNkMzcxMmI0ZjcxOWQ2ZmZjMjU3NDcwYWFmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2U3MGE2OTg0ZmFmZTRhNDFiZTY3M2ExYTVmMzIxZDM3LmJpbmRQb3B1cChwb3B1cF8zYWI4ZTJkMzZhNDE0Zjk0ODI3ZTE4ODRmNjlhMGE0OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDEwZDdmMzNmMWE1NDJlYWIzZGU1NjFmYmJiODhjZmYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTE0OTQ5OTk4OTE1NywgLTczLjg4NzQ3MDAwMjc0MTE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA3NDg0YWYxZGIzYTQyOWRiMjk2NDU1YjVkZDM4MmEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjY1MmI3YzM5NjdlNGJjNTk1ODVjMzFiMTA0ZGRlOTcgPSAkKCc8ZGl2IGlkPSJodG1sXzY2NTJiN2MzOTY3ZTRiYzU5NTg1YzMxYjEwNGRkZTk3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDY0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA3NDg0YWYxZGIzYTQyOWRiMjk2NDU1YjVkZDM4MmEzLnNldENvbnRlbnQoaHRtbF82NjUyYjdjMzk2N2U0YmM1OTU4NWMzMWIxMDRkZGU5Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2QxMGQ3ZjMzZjFhNTQyZWFiM2RlNTYxZmJiYjg4Y2ZmLmJpbmRQb3B1cChwb3B1cF8wNzQ4NGFmMWRiM2E0MjlkYjI5NjQ1NWI1ZGQzODJhMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYzI2OWEyZGM2OTA3NGQzOGE2ZWYzMTcxYzI5ZjM3MDEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTE1OTE5OTk4NzEwNCwgLTczLjg4NjU0MzAwMjAxNzU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA4ZjFjM2U0MWFhNDQwNzU4NjU4ZDZlNjM3MWNjMDI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDZlZTM5MTNjODY4NGNlMzk0NjQ1NjI4MmM1MWU3NjIgPSAkKCc8ZGl2IGlkPSJodG1sX2Q2ZWUzOTEzYzg2ODRjZTM5NDY0NTYyODJjNTFlNzYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDY1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA4ZjFjM2U0MWFhNDQwNzU4NjU4ZDZlNjM3MWNjMDI0LnNldENvbnRlbnQoaHRtbF9kNmVlMzkxM2M4Njg0Y2UzOTQ2NDU2MjgyYzUxZTc2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2MyNjlhMmRjNjkwNzRkMzhhNmVmMzE3MWMyOWYzNzAxLmJpbmRQb3B1cChwb3B1cF8wOGYxYzNlNDFhYTQ0MDc1ODY1OGQ2ZTYzNzFjYzAyNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZjZmMjQ1NDAzMzgxNDM4OWJlNDUxMDBmMDU4YjZhMTcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTE2ODk5OTk3NTQ1NiwgLTczLjg4NTYxMzAwMTE4NDM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1ZWM3OTcxNjQ2YzRjMDg5YWYxZDZmMTAyNGIxYmI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzA0Nzc0YmFmY2RjNDQzZmI5NjAyMDFkYjdmODQ0ZTggPSAkKCc8ZGl2IGlkPSJodG1sX2MwNDc3NGJhZmNkYzQ0M2ZiOTYwMjAxZGI3Zjg0NGU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDY2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU1ZWM3OTcxNjQ2YzRjMDg5YWYxZDZmMTAyNGIxYmI0LnNldENvbnRlbnQoaHRtbF9jMDQ3NzRiYWZjZGM0NDNmYjk2MDIwMWRiN2Y4NDRlOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Y2ZjI0NTQwMzM4MTQzODliZTQ1MTAwZjA1OGI2YTE3LmJpbmRQb3B1cChwb3B1cF81NWVjNzk3MTY0NmM0YzA4OWFmMWQ2ZjEwMjRiMWJiNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTMwYWEyNWM3NGUzNDdkZjkyNjkyMTRhZGY1NDZlNDUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTE3ODc5OTk5OTQzODQsIC03My44ODQ2ODQwMDA5NzUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM3OThmMWJjNWE4ZDQyYzBhMTc2Mzg2NDUzMmVhNWQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2ZhYzVjYWIzMzQ4NDcwMjgwY2MyOTUxMWQyODkzOGIgPSAkKCc8ZGl2IGlkPSJodG1sXzdmYWM1Y2FiMzM0ODQ3MDI4MGNjMjk1MTFkMjg5MzhiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDY3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM3OThmMWJjNWE4ZDQyYzBhMTc2Mzg2NDUzMmVhNWQyLnNldENvbnRlbnQoaHRtbF83ZmFjNWNhYjMzNDg0NzAyODBjYzI5NTExZDI4OTM4Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzUzMGFhMjVjNzRlMzQ3ZGY5MjY5MjE0YWRmNTQ2ZTQ1LmJpbmRQb3B1cChwb3B1cF8zNzk4ZjFiYzVhOGQ0MmMwYTE3NjM4NjQ1MzJlYTVkMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZTZmMGNlMWNhNDlhNGNlM2JmOWU4YTRkMDM4YmM0YTkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTE4ODQ5OTk4Njk2MywgLTczLjg4Mzc1MzAwMDIzMzIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ1ZDk5N2ExOTY4YjRmODE4NDQ0OWI1MzRhYjg3Y2MxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTg3Y2I5MzUwZjQ0NDIwYmEwNzY4YzdmMWY4ODkzYjAgPSAkKCc8ZGl2IGlkPSJodG1sX2U4N2NiOTM1MGY0NDQyMGJhMDc2OGM3ZjFmODg5M2IwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDY4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ1ZDk5N2ExOTY4YjRmODE4NDQ0OWI1MzRhYjg3Y2MxLnNldENvbnRlbnQoaHRtbF9lODdjYjkzNTBmNDQ0MjBiYTA3NjhjN2YxZjg4OTNiMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2U2ZjBjZTFjYTQ5YTRjZTNiZjllOGE0ZDAzOGJjNGE5LmJpbmRQb3B1cChwb3B1cF80NWQ5OTdhMTk2OGI0ZjgxODQ0NDliNTM0YWI4N2NjMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYzEzYWJiOTQxOWZkNGE5N2IwNGZkYzVlNjI2MGM3NDcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTE5ODE5OTk4MjY4MywgLTczLjg4MjgyMzAwMDE0MzQ2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQzMzg1ODhhNjg3NzQzNTFhNjMwZjcyYTRmMmI2NWM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjk4NzA3OTc1ZjEyNDQzZmI0Nzk0MzJhODIxYzNjZDYgPSAkKCc8ZGl2IGlkPSJodG1sX2Y5ODcwNzk3NWYxMjQ0M2ZiNDc5NDMyYTgyMWMzY2Q2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDY5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQzMzg1ODhhNjg3NzQzNTFhNjMwZjcyYTRmMmI2NWM1LnNldENvbnRlbnQoaHRtbF9mOTg3MDc5NzVmMTI0NDNmYjQ3OTQzMmE4MjFjM2NkNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2MxM2FiYjk0MTlmZDRhOTdiMDRmZGM1ZTYyNjBjNzQ3LmJpbmRQb3B1cChwb3B1cF80MzM4NTg4YTY4Nzc0MzUxYTYzMGY3MmE0ZjJiNjVjNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDk5MmI0OTcyMzc4NDM3N2FiZThiOGNlMmY2MmIyODEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTIxNzg5OTk3Mzg1OCwgLTczLjg4MDk2MzAwMDg3NTMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE0ODI3NGRjYjIzMzQ1ZGJiNjBkMDJkMTBhMWRlOGNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWY5ZTJhMTdiZGE1NDk2MjliYzRhNDMyY2FkYTIyNDkgPSAkKCc8ZGl2IGlkPSJodG1sXzFmOWUyYTE3YmRhNTQ5NjI5YmM0YTQzMmNhZGEyMjQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDcxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE0ODI3NGRjYjIzMzQ1ZGJiNjBkMDJkMTBhMWRlOGNkLnNldENvbnRlbnQoaHRtbF8xZjllMmExN2JkYTU0OTYyOWJjNGE0MzJjYWRhMjI0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Q5OTJiNDk3MjM3ODQzNzdhYmU4YjhjZTJmNjJiMjgxLmJpbmRQb3B1cChwb3B1cF8xNDgyNzRkY2IyMzM0NWRiYjYwZDAyZDEwYTFkZThjZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMjNlMmIwYzI3MmI5NGFiOTlmMjRkMWNlMWM3YTg3MzkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTIyODQ5OTk5MzMwNSwgLTczLjg4MDAzNDAwMTQwNzIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzliZWQ3YzQ2YjdiOTQ4YzVhNDJiZTcyNzY2NzA1NmZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGExOGJiM2VmNDZiNGI2M2I3Nzg4NjIzZTFlMDRjOTUgPSAkKCc8ZGl2IGlkPSJodG1sXzRhMThiYjNlZjQ2YjRiNjNiNzc4ODYyM2UxZTA0Yzk1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDcyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliZWQ3YzQ2YjdiOTQ4YzVhNDJiZTcyNzY2NzA1NmZiLnNldENvbnRlbnQoaHRtbF80YTE4YmIzZWY0NmI0YjYzYjc3ODg2MjNlMWUwNGM5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzIzZTJiMGMyNzJiOTRhYjk5ZjI0ZDFjZTFjN2E4NzM5LmJpbmRQb3B1cChwb3B1cF85YmVkN2M0NmI3Yjk0OGM1YTQyYmU3Mjc2NjcwNTZmYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjAxYTNjOTQxMTdkNGUzZmEwODIyNjdmNjYxNmM5YjIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI4NTg5OTk5NTk2OCwgLTczLjg3NDQ1NTAwMjQxNjQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdiZTA4MzU1MmIzNDQyMThiN2NmNDdkODRjMWJlMTI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjE3MWVkOTUzZmExNDk3Nzk0MzgxOTczYjY4ODk5OGQgPSAkKCc8ZGl2IGlkPSJodG1sX2IxNzFlZDk1M2ZhMTQ5Nzc5NDM4MTk3M2I2ODg5OThkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDc4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdiZTA4MzU1MmIzNDQyMThiN2NmNDdkODRjMWJlMTI1LnNldENvbnRlbnQoaHRtbF9iMTcxZWQ5NTNmYTE0OTc3OTQzODE5NzNiNjg4OTk4ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2IwMWEzYzk0MTE3ZDRlM2ZhMDgyMjY3ZjY2MTZjOWIyLmJpbmRQb3B1cChwb3B1cF83YmUwODM1NTJiMzQ0MjE4YjdjZjQ3ZDg0YzFiZTEyNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMDQ3OGIxMGU1NzM0NDY0Y2IyYzY5M2MxMjM5YjMyMTcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI5NjE5OTk4MTY4OSwgLTczLjg3MzUyODAwMjcxMTE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYyNTJlOGYyMGE3MzRjZDI5NWE1ZjM3MmIyZThhMzYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTNlZDg0MjdiMmNjNDlkNjhkZjFlZjFjODk5ZDRjNmYgPSAkKCc8ZGl2IGlkPSJodG1sXzkzZWQ4NDI3YjJjYzQ5ZDY4ZGYxZWYxYzg5OWQ0YzZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDc5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYyNTJlOGYyMGE3MzRjZDI5NWE1ZjM3MmIyZThhMzYyLnNldENvbnRlbnQoaHRtbF85M2VkODQyN2IyY2M0OWQ2OGRmMWVmMWM4OTlkNGM2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzA0NzhiMTBlNTczNDQ2NGNiMmM2OTNjMTIzOWIzMjE3LmJpbmRQb3B1cChwb3B1cF82MjUyZThmMjBhNzM0Y2QyOTVhNWYzNzJiMmU4YTM2MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMDA0YjhiNDg3NGI0NDY2NmI3MDhkMTA5ZmYwM2VjZDAgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTMzMjU5OTk5ODAzMDUsIC03My44NzE3OTIwMDA5MzUwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ODZhZjlmNDFiZGE0NjJlOTZiMjA4ZWE1MmJhNDg2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2ZmNiZWIyMTA0YzRlZmU4OTUxMzkyMjU2YzM4OWQyID0gJCgnPGRpdiBpZD0iaHRtbF9mNmZjYmViMjEwNGM0ZWZlODk1MTM5MjI1NmMzODlkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTA5MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ODZhZjlmNDFiZGE0NjJlOTZiMjA4ZWE1MmJhNDg2My5zZXRDb250ZW50KGh0bWxfZjZmY2JlYjIxMDRjNGVmZTg5NTEzOTIyNTZjMzg5ZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wMDRiOGI0ODc0YjQ0NjY2YjcwOGQxMDlmZjAzZWNkMC5iaW5kUG9wdXAocG9wdXBfNjg2YWY5ZjQxYmRhNDYyZTk2YjIwOGVhNTJiYTQ4NjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzBlNDMyZjk4N2UxODQ4YzU5YTcyZmU0Yjc5NWVmMDJiID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5MTUzOTk5ODYyNzgsIC03My44ODk5MzIwMDMyNjM1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNzg5MDJiNjVhYjk0NWMyOWY1Y2RiYzc2ZmM5ZjI4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I1MjJmYWVkZTZkYTQ4ZDU5NDI4OGQzNjUxMTRmY2E5ID0gJCgnPGRpdiBpZD0iaHRtbF9iNTIyZmFlZGU2ZGE0OGQ1OTQyODhkMzY1MTE0ZmNhOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTQ3My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNzg5MDJiNjVhYjk0NWMyOWY1Y2RiYzc2ZmM5ZjI4MC5zZXRDb250ZW50KGh0bWxfYjUyMmZhZWRlNmRhNDhkNTk0Mjg4ZDM2NTExNGZjYTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wZTQzMmY5ODdlMTg0OGM1OWE3MmZlNGI3OTVlZjAyYi5iaW5kUG9wdXAocG9wdXBfZjc4OTAyYjY1YWI5NDVjMjlmNWNkYmM3NmZjOWYyODApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Y1OTA0MDg1MjM3YjQ0NTVhMzQxZGVjMzFhNWY2ZTQ4ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5MjQ0OTk5NzcyOTQsIC03My44ODkwMjAwMDEzMTgxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNDdjN2VhMzRmYjE0NjhkOTI2MzQ3OGRlNjY1YWY3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIxN2I1M2I1M2IzMTRhMTViNGNkZGUyYmRjZTY0ZTVlID0gJCgnPGRpdiBpZD0iaHRtbF8yMTdiNTNiNTNiMzE0YTE1YjRjZGRlMmJkY2U2NGU1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTQ3NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNDdjN2VhMzRmYjE0NjhkOTI2MzQ3OGRlNjY1YWY3ZC5zZXRDb250ZW50KGh0bWxfMjE3YjUzYjUzYjMxNGExNWI0Y2RkZTJiZGNlNjRlNWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mNTkwNDA4NTIzN2I0NDU1YTM0MWRlYzMxYTVmNmU0OC5iaW5kUG9wdXAocG9wdXBfZDQ3YzdlYTM0ZmIxNDY4ZDkyNjM0NzhkZTY2NWFmN2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzVhYjdjNTU2OTkyMzRkNDlhMDE5ZDg3M2QwOTg3M2JmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5MzU1OTk5ODU3MywgLTczLjg4ODAyOTAwMjc5ODE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3MjVkM2RkMGVhZTQ4YzZiZGY1YzFiZTg3M2M1MDFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGU2ZGExZTI1NTBiNDUxMWFiYjg1ZGU5ZjkxZjYyMzIgPSAkKCc8ZGl2IGlkPSJodG1sXzhlNmRhMWUyNTUwYjQ1MTFhYmI4NWRlOWY5MWY2MjMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5NDc1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3MjVkM2RkMGVhZTQ4YzZiZGY1YzFiZTg3M2M1MDFjLnNldENvbnRlbnQoaHRtbF84ZTZkYTFlMjU1MGI0NTExYWJiODVkZTlmOTFmNjIzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzVhYjdjNTU2OTkyMzRkNDlhMDE5ZDg3M2QwOTg3M2JmLmJpbmRQb3B1cChwb3B1cF9kNzI1ZDNkZDBlYWU0OGM2YmRmNWMxYmU4NzNjNTAxYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjIxOTU1OTRiZjlkNDliOTgxMDU4ZWM4ZjVmMDk3Y2IgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDk1NTE5OTk3NTAzNywgLTczLjg4NjE2ODAwMDUzMDIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFmNTIxNTliYTRiZTQxNThhMzljZjk5OTRhNjUwZTMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjRkYmFjMjM0NjZiNDQ1Zjk3YTkwM2QyNWQwMDEzN2UgPSAkKCc8ZGl2IGlkPSJodG1sX2Y0ZGJhYzIzNDY2YjQ0NWY5N2E5MDNkMjVkMDAxMzdlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5NDc3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFmNTIxNTliYTRiZTQxNThhMzljZjk5OTRhNjUwZTMzLnNldENvbnRlbnQoaHRtbF9mNGRiYWMyMzQ2NmI0NDVmOTdhOTAzZDI1ZDAwMTM3ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2IyMTk1NTk0YmY5ZDQ5Yjk4MTA1OGVjOGY1ZjA5N2NiLmJpbmRQb3B1cChwb3B1cF8xZjUyMTU5YmE0YmU0MTU4YTM5Y2Y5OTk0YTY1MGUzMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZWJkOTA5ZmYxMDBiNDVmNjkyNDQxYmQ2NTA4YjJiNjIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDk2NTA5OTk3ODY4NiwgLTczLjg4NTI0MTAwMzQzOTI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NhMTNiZTg0OTEzNDRkMDNhNTU0MGVkYWEyY2M0YTA2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDgyN2Q0ZDUzZmI5NGI5NjkzN2UxZGFiOWVjYzBkNmEgPSAkKCc8ZGl2IGlkPSJodG1sXzA4MjdkNGQ1M2ZiOTRiOTY5MzdlMWRhYjllY2MwZDZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5NDc4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NhMTNiZTg0OTEzNDRkMDNhNTU0MGVkYWEyY2M0YTA2LnNldENvbnRlbnQoaHRtbF8wODI3ZDRkNTNmYjk0Yjk2OTM3ZTFkYWI5ZWNjMGQ2YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2ViZDkwOWZmMTAwYjQ1ZjY5MjQ0MWJkNjUwOGIyYjYyLmJpbmRQb3B1cChwb3B1cF9jYTEzYmU4NDkxMzQ0ZDAzYTU1NDBlZGFhMmNjNGEwNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNDlmYjU4MzczM2QyNDIxMTliYzY3NzRmMjI4ZjkyZjYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDk3NDQ5OTk5NDAxNSwgLTczLjg4NDMxMTAwMjIzMzI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNzAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI0NGJkMjUxYzUyMjQ1MThhYWY3MTRjNDYyZmIwYmE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDAzYTZhZDBmZTI4NDcyNjk2MDJmNjIwOWMwYmY0YWYgPSAkKCc8ZGl2IGlkPSJodG1sXzQwM2E2YWQwZmUyODQ3MjY5NjAyZjYyMDljMGJmNGFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5NDc5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI0NGJkMjUxYzUyMjQ1MThhYWY3MTRjNDYyZmIwYmE4LnNldENvbnRlbnQoaHRtbF80MDNhNmFkMGZlMjg0NzI2OTYwMmY2MjA5YzBiZjRhZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzQ5ZmI1ODM3MzNkMjQyMTE5YmM2Nzc0ZjIyOGY5MmY2LmJpbmRQb3B1cChwb3B1cF8yNDRiZDI1MWM1MjI0NTE4YWFmNzE0YzQ2MmZiMGJhOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZTdiMjIyODNlOTQzNDgxYjg2OTA0Zjg0NjJlYjI3NmEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDcwMzg5OTk5MjM0MjYsIC03My44ODk1NzEwMDI5MTA4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNTA2Y2NkYjc2Yzk0OGY3YTkwNjMyNmRiMmY0YzBiNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZhNGY5YmUzY2VlZjQ5Yzc5OWIzYWJmNDFiMDhlY2Y5ID0gJCgnPGRpdiBpZD0iaHRtbF82YTRmOWJlM2NlZWY0OWM3OTliM2FiZjQxYjA4ZWNmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NTYyMC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNTA2Y2NkYjc2Yzk0OGY3YTkwNjMyNmRiMmY0YzBiNy5zZXRDb250ZW50KGh0bWxfNmE0ZjliZTNjZWVmNDljNzk5YjNhYmY0MWIwOGVjZjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9lN2IyMjI4M2U5NDM0ODFiODY5MDRmODQ2MmViMjc2YS5iaW5kUG9wdXAocG9wdXBfYjUwNmNjZGI3NmM5NDhmN2E5MDYzMjZkYjJmNGMwYjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzZmNjQyMDg5NTRkYzQyYjdiMzdjOTMzNTY4YTgzMjA1ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MTMzOTk5ODk3MTUsIC03My44ODg2NzgwMDI1MDEwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNTJkY2Y1OTlmNDU0ZDUyYmQ0YTIzMWQ2YzBiNThjNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkY2IzMTM4MjNjMjQ0MTBiZWQzNTg5Y2Y1NDE3NGQxID0gJCgnPGRpdiBpZD0iaHRtbF8yZGNiMzEzODIzYzI0NDEwYmVkMzU4OWNmNTQxNzRkMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NTgzNC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTJkY2Y1OTlmNDU0ZDUyYmQ0YTIzMWQ2YzBiNThjNi5zZXRDb250ZW50KGh0bWxfMmRjYjMxMzgyM2MyNDQxMGJlZDM1ODljZjU0MTc0ZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV82ZjY0MjA4OTU0ZGM0MmI3YjM3YzkzMzU2OGE4MzIwNS5iaW5kUG9wdXAocG9wdXBfMzUyZGNmNTk5ZjQ1NGQ1MmJkNGEyMzFkNmMwYjU4YzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzkyYWQ5MmRjZWYwMjQ3MjhiYTYwNmE1NDRmNzM2OGFjID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3Mjg3MDAwMDAyNjQsIC03My44ODc2MDYwMDI5NzE2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81OGYzZGI2ODM2Y2I0NGM5OWU2YTQ4Njk0N2I2OWYyOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZmMDE0MTZiZjA3MTQyNWQ4NjA1ZDQzZDI0YzllYjJhID0gJCgnPGRpdiBpZD0iaHRtbF9mZjAxNDE2YmYwNzE0MjVkODYwNWQ0M2QyNGM5ZWIyYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjAwNS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81OGYzZGI2ODM2Y2I0NGM5OWU2YTQ4Njk0N2I2OWYyOC5zZXRDb250ZW50KGh0bWxfZmYwMTQxNmJmMDcxNDI1ZDg2MDVkNDNkMjRjOWViMmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85MmFkOTJkY2VmMDI0NzI4YmE2MDZhNTQ0ZjczNjhhYy5iaW5kUG9wdXAocG9wdXBfNThmM2RiNjgzNmNiNDRjOTllNmE0ODY5NDdiNjlmMjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzY4N2U5ZTRlMjAxMTQ3Mjk5OGQ0MWI4MDBiMjE0M2IxID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MzQwOTk5OTQwMDg2LCAtNzMuODg2NzE3MDAzNTY4NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2MS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjVjMzM2YTE2MTk1NDEyN2IyMmMyNWUxNmM0NTVjZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YWU4MzY2MTY3YTM0YzcyOGUwY2UyYjk2ZDQ2NjA2OCA9ICQoJzxkaXYgaWQ9Imh0bWxfNGFlODM2NjE2N2EzNGM3MjhlMGNlMmI5NmQ0NjYwNjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNjYxMTEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjVjMzM2YTE2MTk1NDEyN2IyMmMyNWUxNmM0NTVjZjAuc2V0Q29udGVudChodG1sXzRhZTgzNjYxNjdhMzRjNzI4ZTBjZTJiOTZkNDY2MDY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNjg3ZTllNGUyMDExNDcyOTk4ZDQxYjgwMGIyMTQzYjEuYmluZFBvcHVwKHBvcHVwX2I1YzMzNmExNjE5NTQxMjdiMjJjMjVlMTZjNDU1Y2YwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yOGQ0MDFhNzA1M2M0MTIwYTFhNDVjN2UwYWY2YTQ5ZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzQzOTk5OTc2OTg3LCAtNzMuODg1Nzg3MDAyODc4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYmI5YWI4ZmE4ODY0MTNkYmUxYzdjODEzM2ZjODgwOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM0Y2EwMjg1ODZhNzQyYmZiYjdmM2M4NmZjY2U3OTA4ID0gJCgnPGRpdiBpZD0iaHRtbF8zNGNhMDI4NTg2YTc0MmJmYmI3ZjNjODZmY2NlNzkwOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjMzOS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYmI5YWI4ZmE4ODY0MTNkYmUxYzdjODEzM2ZjODgwOS5zZXRDb250ZW50KGh0bWxfMzRjYTAyODU4NmE3NDJiZmJiN2YzYzg2ZmNjZTc5MDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yOGQ0MDFhNzA1M2M0MTIwYTFhNDVjN2UwYWY2YTQ5ZS5iaW5kUG9wdXAocG9wdXBfYWJiOWFiOGZhODg2NDEzZGJlMWM3YzgxMzNmYzg4MDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNmODJiNjhiM2RmMDQ0NDVhN2I5N2NjN2YyODU4ZTMwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NTM0OTk5Nzc0NTksIC03My44ODQ4NTUwMDMzMTM3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUyLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZTJkYTMyNGQ0YTU0YWY1ODkxNDVhY2FmMzQ3MWM2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3MjhmMDUzNWE3ZDRlNDg4ODY5ZjAzNmQ2ZTk0MGEwID0gJCgnPGRpdiBpZD0iaHRtbF9hNzI4ZjA1MzVhN2Q0ZTQ4ODg2OWYwMzZkNmU5NDBhMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjQ0OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZTJkYTMyNGQ0YTU0YWY1ODkxNDVhY2FmMzQ3MWM2Mi5zZXRDb250ZW50KGh0bWxfYTcyOGYwNTM1YTdkNGU0ODg4NjlmMDM2ZDZlOTQwYTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8zZjgyYjY4YjNkZjA0NDQ1YTdiOTdjYzdmMjg1OGUzMC5iaW5kUG9wdXAocG9wdXBfZmUyZGEzMjRkNGE1NGFmNTg5MTQ1YWNhZjM0NzFjNjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzJjYThmOGUzMmEwMjQ0OGU5ODgwOWQ3ZDU4NjU0NTM3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NjI5OTk5ODQ3MjYsIC03My44ODM5MzYwMDA4MTY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDc2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOTQ2NmM5Y2YyZTQ0MGJlODVmYzBlNjI1MGIzNzI2ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRiYTQ1MDBkYWZjYTQ5NTg5MzM3YzMxNTI2ODc2ZTMwID0gJCgnPGRpdiBpZD0iaHRtbF80YmE0NTAwZGFmY2E0OTU4OTMzN2MzMTUyNjg3NmUzMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjYzMS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOTQ2NmM5Y2YyZTQ0MGJlODVmYzBlNjI1MGIzNzI2Zi5zZXRDb250ZW50KGh0bWxfNGJhNDUwMGRhZmNhNDk1ODkzMzdjMzE1MjY4NzZlMzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yY2E4ZjhlMzJhMDI0NDhlOTg4MDlkN2Q1ODY1NDUzNy5iaW5kUG9wdXAocG9wdXBfZTk0NjZjOWNmMmU0NDBiZTg1ZmMwZTYyNTBiMzcyNmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzJiZWExYjczZWQ5NDQyNjJiNGU3OTg1ZWRkOWIyMjU1ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NzMzOTk5ODc1NDIsIC03My44ODI5OTkwMDMyNTc1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUyLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ODk5OGE3OTZjNWI0ZWY4YjBlNTJhMzY3MTM0ZTY5NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ0ZTJjOTUwNTk0NTQ4N2Q4YjU5MGVhMjNkNGIwYjk4ID0gJCgnPGRpdiBpZD0iaHRtbF80NGUyYzk1MDU5NDU0ODdkOGI1OTBlYTIzZDRiMGI5OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjcxNi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ODk5OGE3OTZjNWI0ZWY4YjBlNTJhMzY3MTM0ZTY5Ni5zZXRDb250ZW50KGh0bWxfNDRlMmM5NTA1OTQ1NDg3ZDhiNTkwZWEyM2Q0YjBiOTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yYmVhMWI3M2VkOTQ0MjYyYjRlNzk4NWVkZDliMjI1NS5iaW5kUG9wdXAocG9wdXBfNjg5OThhNzk2YzViNGVmOGIwZTUyYTM2NzEzNGU2OTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2ZlY2IzMWU4MDNiYzRkMWZhZDExMzJlMTFmYTVjYjRlID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3ODI5OTk5OTk3MTUsIC03My44ODIwNzEwMDM0NDI3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZjFkMzU3YjIwZTU0YTJkOGJhMDc3NGJmOTJlMjU0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZkMDM4ZjgzMmM1MTQ0ZjZhNDcyNjk4ODk1OTVlMGFmID0gJCgnPGRpdiBpZD0iaHRtbF9mZDAzOGY4MzJjNTE0NGY2YTQ3MjY5ODg5NTk1ZTBhZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjkyNi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZjFkMzU3YjIwZTU0YTJkOGJhMDc3NGJmOTJlMjU0ZS5zZXRDb250ZW50KGh0bWxfZmQwMzhmODMyYzUxNDRmNmE0NzI2OTg4OTU5NWUwYWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mZWNiMzFlODAzYmM0ZDFmYWQxMTMyZTExZmE1Y2I0ZS5iaW5kUG9wdXAocG9wdXBfNGYxZDM1N2IyMGU1NGEyZDhiYTA3NzRiZjkyZTI1NGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzI3OGQ0NjFhMzQ4YTRiNTViZTQ3YzRkNGVlM2Y1OGVkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3OTI2OTk5ODExMTA2LCAtNzMuODgxMTM3MDAwOTE1NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2MS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjExZjkwZGM4Y2Q2NDRlN2EwNzVkZDAzOTcxNzgxNjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NzQ0Y2Q3NGFlMmQ0ZmNmYTZkYTY0ZmUyYTk1MDU2MyA9ICQoJzxkaXYgaWQ9Imh0bWxfNTc0NGNkNzRhZTJkNGZjZmE2ZGE2NGZlMmE5NTA1NjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNjcxMjUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjExZjkwZGM4Y2Q2NDRlN2EwNzVkZDAzOTcxNzgxNjYuc2V0Q29udGVudChodG1sXzU3NDRjZDc0YWUyZDRmY2ZhNmRhNjRmZTJhOTUwNTYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjc4ZDQ2MWEzNDhhNGI1NWJlNDdjNGQ0ZWUzZjU4ZWQuYmluZFBvcHVwKHBvcHVwX2YxMWY5MGRjOGNkNjQ0ZTdhMDc1ZGQwMzk3MTc4MTY2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83YmRkM2RmOWQwNDk0OTdiODhhZTUzNzQ0MTY0YWYyZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODIxNTk5OTg4NDM0NCwgLTczLjg3ODQwNjAwMzM4ODczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2NTE5ZDU4NWE5OTQ1MzViNmU5MjRkNTkwMTBmMWRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzU0YjVlZmYxYTAyNDZlMTlhMzM4OWVkNjdjZDU4YTQgPSAkKCc8ZGl2IGlkPSJodG1sXzM1NGI1ZWZmMWEwMjQ2ZTE5YTMzODllZDY3Y2Q1OGE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDY3NjEwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2NTE5ZDU4NWE5OTQ1MzViNmU5MjRkNTkwMTBmMWRiLnNldENvbnRlbnQoaHRtbF8zNTRiNWVmZjFhMDI0NmUxOWEzMzg5ZWQ2N2NkNThhNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzdiZGQzZGY5ZDA0OTQ5N2I4OGFlNTM3NDQxNjRhZjJlLmJpbmRQb3B1cChwb3B1cF9iNjUxOWQ1ODVhOTk0NTM1YjZlOTI0ZDU5MDEwZjFkYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYWJhMzFmNDQ4ZjhmNDdlZWIxYjk0MTFiZTU0NGU0ZDggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDgzNjg5OTk3NTY5NiwgLTczLjg3NjkyNTAwMDQ2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI4LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOGE5ZmNlNjQ2MTA0YThkYjMwOWY1MmQ4MTlmM2Y1ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3NzEzYjA2YWYyZTQzN2ViOWFjZWUyZjEwMWEyOWY0ID0gJCgnPGRpdiBpZD0iaHRtbF85NzcxM2IwNmFmMmU0MzdlYjlhY2VlMmYxMDFhMjlmNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2OTI2OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOGE5ZmNlNjQ2MTA0YThkYjMwOWY1MmQ4MTlmM2Y1ZC5zZXRDb250ZW50KGh0bWxfOTc3MTNiMDZhZjJlNDM3ZWI5YWNlZTJmMTAxYTI5ZjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9hYmEzMWY0NDhmOGY0N2VlYjFiOTQxMWJlNTQ0ZTRkOC5iaW5kUG9wdXAocG9wdXBfZjhhOWZjZTY0NjEwNGE4ZGIzMDlmNTJkODE5ZjNmNWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>",
"text/plain": "<folium.folium.Map at 0x21836f63b38>"
},
"execution_count": 113,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### A slippy map of all LPIS intersections\n\nWe use the Folium MarkerCluster option so that the markers 'cluster' when we zoom out rather than overwhelm the map."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Collapse the entire panel to a dataframe with just LPIS intersections. We can use the same columns and dictionary as used above."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "gdf0 = gdf.groupby('intersection_id')[allcols].agg(aggdict)",
"execution_count": 52,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "A mask to just select the LPIS intersections"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "LPIS = (gdf0.flag_LPIS_ever == 1)",
"execution_count": 53,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "gdf0[LPIS].shape",
"execution_count": 54,
"outputs": [
{
"data": {
"text/plain": "(2126, 8)"
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Markers for the LPIS intersections"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "locations = list(zip(gdf0[LPIS].latitude, gdf0[LPIS].longitude,))\nlocations[:4]",
"execution_count": 55,
"outputs": [
{
"data": {
"text/plain": "[(40.7543329998393, -73.82334300046672),\n (40.81636099985319, -73.9540890000869),\n (40.73378299979906, -73.8148000031035),\n (40.74347199986652, -73.97675800003843)]"
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "map2 = folium.Map(location=[40.7128, -74.006], zoom_start =13, tiles='OpenStreetMap')\nmarker_cluster = MarkerCluster().add_to(map2)",
"execution_count": 51,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "for idx, row in gdf0[LPIS].iterrows():\n folium.Marker(location=[row.latitude, row.longitude],\n popup=f'ID={row.intersection_id}, inj ={row.personsinjured}'\n ).add_to(marker_cluster)\n ",
"execution_count": 58,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "map2.save('lpis.html')",
"execution_count": 59,
"outputs": []
},
{
"metadata": {
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "map2",
"execution_count": 62,
"outputs": [
{
"data": {
"text/html": "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgPHN0eWxlPiNtYXBfYTVkNWM3ZjdlNzBiNDM0Nzg5Njg1NjU4YTMzMWUxN2YgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgdG9wOiAwLjAlOwogICAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC5tYXJrZXJjbHVzdGVyLzEuMS4wL2xlYWZsZXQubWFya2VyY2x1c3Rlci5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2xlYWZsZXQubWFya2VyY2x1c3Rlci8xLjEuMC9NYXJrZXJDbHVzdGVyLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMS4xLjAvTWFya2VyQ2x1c3Rlci5EZWZhdWx0LmNzcyIvPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9hNWQ1YzdmN2U3MGI0MzQ3ODk2ODU2NThhMzMxZTE3ZiIgPjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfYTVkNWM3ZjdlNzBiNDM0Nzg5Njg1NjU4YTMzMWUxN2YgPSBMLm1hcCgKICAgICAgICAnbWFwX2E1ZDVjN2Y3ZTcwYjQzNDc4OTY4NTY1OGEzMzFlMTdmJywgewogICAgICAgIGNlbnRlcjogWzQwLjcxMjgsIC03NC4wMDZdLAogICAgICAgIHpvb206IDEzLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKCiAgICAKICAgIAogICAgdmFyIHRpbGVfbGF5ZXJfZjQ4NDNmZmI4M2NlNDcxMGI4OTkzNzc2NGJkOGQyMTIgPSBMLnRpbGVMYXllcigKICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiCn0pLmFkZFRvKG1hcF9hNWQ1YzdmN2U3MGI0MzQ3ODk2ODU2NThhMzMxZTE3Zik7CiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjID0gTC5tYXJrZXJDbHVzdGVyR3JvdXAoe30pOwogICAgICAgICAgICBtYXBfYTVkNWM3ZjdlNzBiNDM0Nzg5Njg1NjU4YTMzMWUxN2YuYWRkTGF5ZXIobWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfM2E0MTBjYzJhNzZlNGNlY2FiNGNmMjZlNDhiZDYwYWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjc1NDMzMjk5OTgzOTMsIC03My44MjMzNDMwMDA0NjY3Ml0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZmQxM2M1NTYwYjY0YmUxODA1MDU0YTdhMGNhMjkzNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EyNDVhNjdmYzk4MjQ3NDNiZDc3Njg1OTE0MzlkZmJhID0gJCgnPGRpdiBpZD0iaHRtbF9hMjQ1YTY3ZmM5ODI0NzQzYmQ3NzY4NTkxNDM5ZGZiYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MTYuMCwgaW5qID0wLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFmZDEzYzU1NjBiNjRiZTE4MDUwNTRhN2EwY2EyOTM1LnNldENvbnRlbnQoaHRtbF9hMjQ1YTY3ZmM5ODI0NzQzYmQ3NzY4NTkxNDM5ZGZiYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNhNDEwY2MyYTc2ZTRjZWNhYjRjZjI2ZTQ4YmQ2MGFmLmJpbmRQb3B1cChwb3B1cF8xZmQxM2M1NTYwYjY0YmUxODA1MDU0YTdhMGNhMjkzNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2M1MTE4NzU1OTdmODQwNmY4MmI3ODc2NTliNjc3YTE3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MTYzNjA5OTk4NTMxOSwgLTczLjk1NDA4OTAwMDA4NjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTViOTdlMmZjZWIxNGJjZGI0MDM3YTcyNWZhOGI4NWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NDY0YWQ3YjY0ZGQ0NGJmOTI2NWZjMjhhNGNjMWZkOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNjQ2NGFkN2I2NGRkNDRiZjkyNjVmYzI4YTRjYzFmZDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQ2NS4wLCBpbmogPTEwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1Yjk3ZTJmY2ViMTRiY2RiNDAzN2E3MjVmYThiODVlLnNldENvbnRlbnQoaHRtbF82NDY0YWQ3YjY0ZGQ0NGJmOTI2NWZjMjhhNGNjMWZkOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M1MTE4NzU1OTdmODQwNmY4MmI3ODc2NTliNjc3YTE3LmJpbmRQb3B1cChwb3B1cF9lNWI5N2UyZmNlYjE0YmNkYjQwMzdhNzI1ZmE4Yjg1ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzA4ODliNWIzYmMwZTRmNzdiZTcyYjE1MzE3YmE0MmM3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MzM3ODI5OTk3OTkwNiwgLTczLjgxNDgwMDAwMzEwMzVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDY0OWYwOTc3MDBjNDhlOGJjN2M5M2JkM2I3YTZmNmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNmRkNmNiNzdhM2M0YTU5YjgzOTczOTUwNTI5NTIyZCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjZkZDZjYjc3YTNjNGE1OWI4Mzk3Mzk1MDUyOTUyMmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTUxMy4wLCBpbmogPTQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDY0OWYwOTc3MDBjNDhlOGJjN2M5M2JkM2I3YTZmNmQuc2V0Q29udGVudChodG1sX2Y2ZGQ2Y2I3N2EzYzRhNTliODM5NzM5NTA1Mjk1MjJkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDg4OWI1YjNiYzBlNGY3N2JlNzJiMTUzMTdiYTQyYzcuYmluZFBvcHVwKHBvcHVwX2Q2NDlmMDk3NzAwYzQ4ZThiYzdjOTNiZDNiN2E2ZjZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMThjYzVhMjllZDdiNGZlM2IzNDU5YTNmN2MyMTVlNGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjc0MzQ3MTk5OTg2NjUyLCAtNzMuOTc2NzU4MDAwMDM4NDNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjg5Yzg2YTVmZDI1NDI3OThhNWUzY2E5YzY4NDFkZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOWRlNWYzMjI5NjY0OGY0YjM3NjIyYTYyZTY1MDNiOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMDlkZTVmMzIyOTY2NDhmNGIzNzYyMmE2MmU2NTAzYjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTUyOC4wLCBpbmogPTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjg5Yzg2YTVmZDI1NDI3OThhNWUzY2E5YzY4NDFkZWYuc2V0Q29udGVudChodG1sXzA5ZGU1ZjMyMjk2NjQ4ZjRiMzc2MjJhNjJlNjUwM2I5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMThjYzVhMjllZDdiNGZlM2IzNDU5YTNmN2MyMTVlNGEuYmluZFBvcHVwKHBvcHVwXzI4OWM4NmE1ZmQyNTQyNzk4YTVlM2NhOWM2ODQxZGVmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMDJmOGI1NDZiYjk4NDc5Yzg3N2EzNDQ3YjQxMGRkOTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjcxNTU1Mjk5OTk2NzMxNSwgLTczLjk4OTc1NDAwMDI1MjczXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYwZjMxYjdmNmQzMzQ0OWI5MjA1ZjFjMmZhOWEyYTMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTM4NzI0ZTJmOWMzNGU0ZDk3ODIyNTY3YjI4NWM3MzYgPSAkKCc8ZGl2IGlkPSJodG1sXzUzODcyNGUyZjljMzRlNGQ5NzgyMjU2N2IyODVjNzM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD02OTguMCwgaW5qID04LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYwZjMxYjdmNmQzMzQ0OWI5MjA1ZjFjMmZhOWEyYTMxLnNldENvbnRlbnQoaHRtbF81Mzg3MjRlMmY5YzM0ZTRkOTc4MjI1NjdiMjg1YzczNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAyZjhiNTQ2YmI5ODQ3OWM4NzdhMzQ0N2I0MTBkZDkwLmJpbmRQb3B1cChwb3B1cF82MGYzMWI3ZjZkMzM0NDliOTIwNWYxYzJmYTlhMmEzMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzNjNDU3NDY2YzkwYTQ4Zjc4YTYwY2MzODIwNGYzOTgzID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MTU3MzY5OTk4MjIyNSwgLTczLjk1NDU0NzAwMDE2MzUzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ1NGI4N2U3N2FmMDQxNzI5ZTZjY2FkYTdlOGEwODEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmZmYmQ3YjU1YzdjNGYyNDljMDhmNzllODRiNWVlMjcgPSAkKCc8ZGl2IGlkPSJodG1sX2JmZmJkN2I1NWM3YzRmMjQ5YzA4Zjc5ZTg0YjVlZTI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0xODU4LjAsIGluaiA9My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NTRiODdlNzdhZjA0MTcyOWU2Y2NhZGE3ZThhMDgxMy5zZXRDb250ZW50KGh0bWxfYmZmYmQ3YjU1YzdjNGYyNDljMDhmNzllODRiNWVlMjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zYzQ1NzQ2NmM5MGE0OGY3OGE2MGNjMzgyMDRmMzk4My5iaW5kUG9wdXAocG9wdXBfNDU0Yjg3ZTc3YWYwNDE3MjllNmNjYWRhN2U4YTA4MTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9hYTg2MjRjYWIwNDc0ZDQyYjRmZTIwNmY1ZTMyOGU4NCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjgxOTg3OTk5ODc4MTI1LCAtNzMuODM2OTc1MDAyODU4NzVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2JiZGM4MjcxNjkwNDA5MmI1NTc3MWMyZDc0OWNiYjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZDE2YWJjMzdiMDM0NDY3OGJjMzhhYmIxMDhmNGFlZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZWQxNmFiYzM3YjAzNDQ2NzhiYzM4YWJiMTA4ZjRhZWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTE5NTIuMCwgaW5qID0xNS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YmJkYzgyNzE2OTA0MDkyYjU1NzcxYzJkNzQ5Y2JiMi5zZXRDb250ZW50KGh0bWxfZWQxNmFiYzM3YjAzNDQ2NzhiYzM4YWJiMTA4ZjRhZWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYTg2MjRjYWIwNDc0ZDQyYjRmZTIwNmY1ZTMyOGU4NC5iaW5kUG9wdXAocG9wdXBfN2JiZGM4MjcxNjkwNDA5MmI1NTc3MWMyZDc0OWNiYjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl82YzkxMzRhMTdkMzU0MjQ0ODZjODA5ZjkzYzA3NTY4NyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNzAwNTEyOTk5ODMwODA2LCAtNzMuNzk2NzcwMDAxNzEyNzZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzQ5MmE3NWNlMWZlNDIyYzlkNGJmYmU0NzBjNjQ0Y2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYTgxMTAwNTE2OTE0YjZiYTBkMTZmZjQ0OTg2YjBiMiA9ICQoJzxkaXYgaWQ9Imh0bWxfYWE4MTEwMDUxNjkxNGI2YmEwZDE2ZmY0NDk4NmIwYjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTIwMDQuMCwgaW5qID00MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NDkyYTc1Y2UxZmU0MjJjOWQ0YmZiZTQ3MGM2NDRjYy5zZXRDb250ZW50KGh0bWxfYWE4MTEwMDUxNjkxNGI2YmEwZDE2ZmY0NDk4NmIwYjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82YzkxMzRhMTdkMzU0MjQ0ODZjODA5ZjkzYzA3NTY4Ny5iaW5kUG9wdXAocG9wdXBfNzQ5MmE3NWNlMWZlNDIyYzlkNGJmYmU0NzBjNjQ0Y2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl82YTNmOTQxZDM3MTU0MmIyOThjYmMyODhkNzhiZmU4NCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjk1NDU5OTk5OTc0OTgsIC03My44MDUzNTYwMDE0OTAzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlmNWQ4YzljNzYxZjQ5MzFiNDU5YjQxM2E5ZTk5NDFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGFkNDBhMGZmNjViNGU1NWJhZDRmZGNhOGNkOTIwYWYgPSAkKCc8ZGl2IGlkPSJodG1sXzRhZDQwYTBmZjY1YjRlNTViYWQ0ZmRjYThjZDkyMGFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yMDE2LjAsIGluaiA9MzIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWY1ZDhjOWM3NjFmNDkzMWI0NTliNDEzYTllOTk0MWEuc2V0Q29udGVudChodG1sXzRhZDQwYTBmZjY1YjRlNTViYWQ0ZmRjYThjZDkyMGFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmEzZjk0MWQzNzE1NDJiMjk4Y2JjMjg4ZDc4YmZlODQuYmluZFBvcHVwKHBvcHVwXzlmNWQ4YzljNzYxZjQ5MzFiNDU5YjQxM2E5ZTk5NDFhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMDcwMGI5MjU4ZTM3NDI1NGFlMTM1YTkwNjEwNzBlZGYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY3ODg0Nzk5OTk5NTM5LCAtNzMuODY2MDgzMDAxNDEzNV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZTE1YjNmMGU3Yjk0Y2ZjOGNiYWY1N2M0ZmNhYTU3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE4OWNkNjA1ZWNlZDQ5NmI5YWI3ZTMzMGFmZGM0ZDBkID0gJCgnPGRpdiBpZD0iaHRtbF8xODljZDYwNWVjZWQ0OTZiOWFiN2UzMzBhZmRjNGQwZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjA0Ny4wLCBpbmogPTIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGUxNWIzZjBlN2I5NGNmYzhjYmFmNTdjNGZjYWE1N2Quc2V0Q29udGVudChodG1sXzE4OWNkNjA1ZWNlZDQ5NmI5YWI3ZTMzMGFmZGM0ZDBkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDcwMGI5MjU4ZTM3NDI1NGFlMTM1YTkwNjEwNzBlZGYuYmluZFBvcHVwKHBvcHVwXzhlMTViM2YwZTdiOTRjZmM4Y2JhZjU3YzRmY2FhNTdkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZjQ5NGY3NjU1MjkzNDViZGEwNjJhMWZjN2I4Mzk1ZDIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY3NjM2OTk5OTgzMzg0NSwgLTczLjg4MzIyNjAwMTQ2NTI5XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhZWRhNjk0MzVmNDQ3NjM4ZjhmNGNjYTZkOTM3NWU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODc2YWZkMDc4N2I5NDY5Mzk3NmRlMTEzODI5MThiMTAgPSAkKCc8ZGl2IGlkPSJodG1sXzg3NmFmZDA3ODdiOTQ2OTM5NzZkZTExMzgyOTE4YjEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yMDc0LjAsIGluaiA9OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYWVkYTY5NDM1ZjQ0NzYzOGY4ZjRjY2E2ZDkzNzVlOC5zZXRDb250ZW50KGh0bWxfODc2YWZkMDc4N2I5NDY5Mzk3NmRlMTEzODI5MThiMTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNDk0Zjc2NTUyOTM0NWJkYTA2MmExZmM3YjgzOTVkMi5iaW5kUG9wdXAocG9wdXBfMmFlZGE2OTQzNWY0NDc2MzhmOGY0Y2NhNmQ5Mzc1ZTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl83NTlmNWU4NWY3ZmM0YmE5YWZiNWU2NDQxYmIzZDc1NSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjc3MDMyOTk5ODc5MDMsIC03My44Nzg2NjIwMDMyMzUyOF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYWNmZWJlODkxNTE0YmMzOWFmNzI0MDdiMWI3MGMzZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzMzk2NTIwOTNkNzQ1ZWJiMmE5ZDYwYzc5NjFmM2M2ID0gJCgnPGRpdiBpZD0iaHRtbF82MzM5NjUyMDkzZDc0NWViYjJhOWQ2MGM3OTYxZjNjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjA3Ni4wLCBpbmogPTQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGFjZmViZTg5MTUxNGJjMzlhZjcyNDA3YjFiNzBjM2Uuc2V0Q29udGVudChodG1sXzYzMzk2NTIwOTNkNzQ1ZWJiMmE5ZDYwYzc5NjFmM2M2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzU5ZjVlODVmN2ZjNGJhOWFmYjVlNjQ0MWJiM2Q3NTUuYmluZFBvcHVwKHBvcHVwX2RhY2ZlYmU4OTE1MTRiYzM5YWY3MjQwN2IxYjcwYzNlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNDE3NGYzYzdjZWU1NGJmY2FjZjg2NzgwYmQwZjJkN2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY3NTg4Nzk5OTk1NDY0LCAtNzMuODg2NDgyMDAxMzY4NzNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjY3YmFhMDFmMTUxNDljMzliYjc2N2Q5YjJhMTMxOTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zOTZkMDMzNzk5MWU0YjNmYmM0MjNhOGMyYmY1ZDM1NSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzk2ZDAzMzc5OTFlNGIzZmJjNDIzYThjMmJmNWQzNTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTIwODEuMCwgaW5qID0xMi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNjdiYWEwMWYxNTE0OWMzOWJiNzY3ZDliMmExMzE5Ni5zZXRDb250ZW50KGh0bWxfMzk2ZDAzMzc5OTFlNGIzZmJjNDIzYThjMmJmNWQzNTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MTc0ZjNjN2NlZTU0YmZjYWNmODY3ODBiZDBmMmQ3Zi5iaW5kUG9wdXAocG9wdXBfYjY3YmFhMDFmMTUxNDljMzliYjc2N2Q5YjJhMTMxOTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9kODJkNzI2NTI5NGE0Yjc3OWI2Mzk4YTQ5OWVhODMyZiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjc2NzY1OTk5ODgzNjYsIC03My44ODA1MDUwMDE2NzE0Ml0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMDg1Yzc5MWRlMTU0NWI3ODAyNjU2ZTQyODI4N2ZkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M4ODk0YjZkZmFjNTQ0MjI4NTY1YzdlOTc0N2RhYzU5ID0gJCgnPGRpdiBpZD0iaHRtbF9jODg5NGI2ZGZhYzU0NDIyODU2NWM3ZTk3NDdkYWM1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjA4Mi4wLCBpbmogPTguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjA4NWM3OTFkZTE1NDViNzgwMjY1NmU0MjgyODdmZDUuc2V0Q29udGVudChodG1sX2M4ODk0YjZkZmFjNTQ0MjI4NTY1YzdlOTc0N2RhYzU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDgyZDcyNjUyOTRhNGI3NzliNjM5OGE0OTllYTgzMmYuYmluZFBvcHVwKHBvcHVwXzIwODVjNzkxZGUxNTQ1Yjc4MDI2NTZlNDI4Mjg3ZmQ1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYTIyMmJiYmUxYTVjNGY1NWFiOWY1ZDNkNzllODk5ODMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY3ODE4MDk5OTczODQ0LCAtNzMuODcwNjk2MDAwOTM5MDVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGNkZDdkMTQ0NzIxNDY4NTg2MTFiYmNmYjYzMTlmNTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNzllOWYzODcyYWQ0NTdmYWQ5MTFlZmI1NjBlN2RkZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzc5ZTlmMzg3MmFkNDU3ZmFkOTExZWZiNTYwZTdkZGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTIwODUuMCwgaW5qID0xOC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84Y2RkN2QxNDQ3MjE0Njg1ODYxMWJiY2ZiNjMxOWY1NS5zZXRDb250ZW50KGh0bWxfMzc5ZTlmMzg3MmFkNDU3ZmFkOTExZWZiNTYwZTdkZGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hMjIyYmJiZTFhNWM0ZjU1YWI5ZjVkM2Q3OWU4OTk4My5iaW5kUG9wdXAocG9wdXBfOGNkZDdkMTQ0NzIxNDY4NTg2MTFiYmNmYjYzMTlmNTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8wNDdkNTNkMzZkMGU0N2U5YjE5Nzc3OWJjNjg0Zjk0NiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjc2NjMzOTk5Nzg1OTIsIC03My44ODE0MjcwMDI4MDM2NV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NmM2NzcxMWQxNGY0YTdhYjdlOTk2NzIyNjkzYTYwMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxNzlkMjY2ZGU5NTRmYjI4M2E1MTg1MjllYTIwZWIwID0gJCgnPGRpdiBpZD0iaHRtbF82MTc5ZDI2NmRlOTU0ZmIyODNhNTE4NTI5ZWEyMGViMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjA4OC4wLCBpbmogPTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzZjNjc3MTFkMTRmNGE3YWI3ZTk5NjcyMjY5M2E2MDAuc2V0Q29udGVudChodG1sXzYxNzlkMjY2ZGU5NTRmYjI4M2E1MTg1MjllYTIwZWIwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDQ3ZDUzZDM2ZDBlNDdlOWIxOTc3NzliYzY4NGY5NDYuYmluZFBvcHVwKHBvcHVwXzc2YzY3NzExZDE0ZjRhN2FiN2U5OTY3MjI2OTNhNjAwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMWNlOWQwMDllN2I4NDhhYWFmYmIwNWVmMmQ2ZDBkNDkgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY4NzU1Njk5OTc5MDUsIC03My45Mzg5NTAwMDIzMjIzNF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMDBkNmQxOGNhYmE0MzA3OTkwZWU5NDNlN2E4NTM5NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYwN2JkOTkzOGU2NzRmNjA5Yzg0ZjljZjZhNWMyYWNmID0gJCgnPGRpdiBpZD0iaHRtbF82MDdiZDk5MzhlNjc0ZjYwOWM4NGY5Y2Y2YTVjMmFjZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjIwMC4wLCBpbmogPTM4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwMGQ2ZDE4Y2FiYTQzMDc5OTBlZTk0M2U3YTg1Mzk1LnNldENvbnRlbnQoaHRtbF82MDdiZDk5MzhlNjc0ZjYwOWM4NGY5Y2Y2YTVjMmFjZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFjZTlkMDA5ZTdiODQ4YWFhZmJiMDVlZjJkNmQwZDQ5LmJpbmRQb3B1cChwb3B1cF8wMDBkNmQxOGNhYmE0MzA3OTkwZWU5NDNlN2E4NTM5NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzY1MTRhODc3OTM2ODRlYjdiNzNmYjIzMzg1NzI5YThiID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42ODc4OTE5OTk5NjgxNiwgLTczLjkzNjAyNzAwMTU2NzkyXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M0ZTc0NGJiZTA2NjRjOTM4Y2I2YzRmZDZkYmY0ZjBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGRiYTIwNGVjZDBmNGNmODg5NzVkNWYzOGQ4YjU2MjkgPSAkKCc8ZGl2IGlkPSJodG1sXzRkYmEyMDRlY2QwZjRjZjg4OTc1ZDVmMzhkOGI1NjI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yMjA0LjAsIGluaiA9MjguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzRlNzQ0YmJlMDY2NGM5MzhjYjZjNGZkNmRiZjRmMGIuc2V0Q29udGVudChodG1sXzRkYmEyMDRlY2QwZjRjZjg4OTc1ZDVmMzhkOGI1NjI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjUxNGE4Nzc5MzY4NGViN2I3M2ZiMjMzODU3MjlhOGIuYmluZFBvcHVwKHBvcHVwX2M0ZTc0NGJiZTA2NjRjOTM4Y2I2YzRmZDZkYmY0ZjBiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMmVjM2M3MTMwZWExNDZjNGFiM2FlOWQwOTFjYzFlMTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY4NjU3Nzk5OTgxNDg5NCwgLTczLjk0NzQ1NjAwMDIyNzZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjdjYzMzMWZkMTI3NDZiZGExZmMyOTIzNDRkMDkzMWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80M2E5M2FiYmMzZDE0MDIwYmM1YWY0ZTcyNmNmMDQxYSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDNhOTNhYmJjM2QxNDAyMGJjNWFmNGU3MjZjZjA0MWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTIyMDUuMCwgaW5qID0yMi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mN2NjMzMxZmQxMjc0NmJkYTFmYzI5MjM0NGQwOTMxYi5zZXRDb250ZW50KGh0bWxfNDNhOTNhYmJjM2QxNDAyMGJjNWFmNGU3MjZjZjA0MWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZWMzYzcxMzBlYTE0NmM0YWIzYWU5ZDA5MWNjMWUxNS5iaW5kUG9wdXAocG9wdXBfZjdjYzMzMWZkMTI3NDZiZGExZmMyOTIzNDRkMDkzMWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jZDc3YTg3MzdlOGE0MTJkOWE1MjYzMGVkMjg3ZWJlZiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjg5Mjc0OTk5ODA2NDMsIC03My45MjM5NzkwMDA4MDgxOV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMmQyZGNjYzRkZmI0NWY4YWNmZmFjMTgxYTc3MTY1OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhkNTMwYTJlZDNmMzQyMmY5ZTQyMzU2NjM4NzJiMjgwID0gJCgnPGRpdiBpZD0iaHRtbF84ZDUzMGEyZWQzZjM0MjJmOWU0MjM1NjYzODcyYjI4MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjIwNi4wLCBpbmogPTI4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyZDJkY2NjNGRmYjQ1ZjhhY2ZmYWMxODFhNzcxNjU4LnNldENvbnRlbnQoaHRtbF84ZDUzMGEyZWQzZjM0MjJmOWU0MjM1NjYzODcyYjI4MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NkNzdhODczN2U4YTQxMmQ5YTUyNjMwZWQyODdlYmVmLmJpbmRQb3B1cChwb3B1cF9iMmQyZGNjYzRkZmI0NWY4YWNmZmFjMTgxYTc3MTY1OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2U1ZmMzYmI1ZjFmMzQ2M2E4ZTYxNDQyMmE3Y2QzMGY0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42ODcyMjc5OTk4MDIxNzUsIC03My45NDE3ODUwMDIyMzc4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FlODVlMWYwYTg0YTRkYmJhODNhM2NmNjJjZTNmMDRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTQzYWQ5NDM1NmIzNGViMDg4ZDYxYTY4YTAwODI0MDQgPSAkKCc8ZGl2IGlkPSJodG1sX2U0M2FkOTQzNTZiMzRlYjA4OGQ2MWE2OGEwMDgyNDA0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yMjExLjAsIGluaiA9MTkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWU4NWUxZjBhODRhNGRiYmE4M2EzY2Y2MmNlM2YwNGYuc2V0Q29udGVudChodG1sX2U0M2FkOTQzNTZiMzRlYjA4OGQ2MWE2OGEwMDgyNDA0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTVmYzNiYjVmMWYzNDYzYThlNjE0NDIyYTdjZDMwZjQuYmluZFBvcHVwKHBvcHVwX2FlODVlMWYwYTg0YTRkYmJhODNhM2NmNjJjZTNmMDRmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfOGJmOThmZGM3ODI4NGVhNWE4MzU4YjA0OTUzOGFiZTggPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY4NTIxNjk5OTgzMjU1LCAtNzMuOTU5Mjc2MDAwMDk1ODhdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzA1NmZlODZmYjc1NGM2NmEyYWJiYWQ4OGM4YzM2YWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZGY4M2VhOWY3YjQ0YjQ2OGQ4OWNmNWZmZGZhNmMwZSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2RmODNlYTlmN2I0NGI0NjhkODljZjVmZmRmYTZjMGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTIyMTUuMCwgaW5qID0xMC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMDU2ZmU4NmZiNzU0YzY2YTJhYmJhZDg4YzhjMzZhZS5zZXRDb250ZW50KGh0bWxfY2RmODNlYTlmN2I0NGI0NjhkODljZjVmZmRmYTZjMGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YmY5OGZkYzc4Mjg0ZWE1YTgzNThiMDQ5NTM4YWJlOC5iaW5kUG9wdXAocG9wdXBfYzA1NmZlODZmYjc1NGM2NmEyYWJiYWQ4OGM4YzM2YWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl84ZDlmYjgxMThjNGU0ZjBmOGQ0YmNiYTM2MzJkNmQ5ZCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjg4OTAwOTk5ODcxMTIsIC03My45MjcyNTQwMDMyODQwNV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNDAwNzA1OGJhYWQ0NmQ5YjUyNmU5MjFkODY5MmIxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzViYWNkM2ZhZjg0YjQwNDdhODg3NzllNjQ5ODJmYmQ5ID0gJCgnPGRpdiBpZD0iaHRtbF81YmFjZDNmYWY4NGI0MDQ3YTg4Nzc5ZTY0OTgyZmJkOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjIxOC4wLCBpbmogPTE4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q0MDA3MDU4YmFhZDQ2ZDliNTI2ZTkyMWQ4NjkyYjE2LnNldENvbnRlbnQoaHRtbF81YmFjZDNmYWY4NGI0MDQ3YTg4Nzc5ZTY0OTgyZmJkOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhkOWZiODExOGM0ZTRmMGY4ZDRiY2JhMzYzMmQ2ZDlkLmJpbmRQb3B1cChwb3B1cF9kNDAwNzA1OGJhYWQ0NmQ5YjUyNmU5MjFkODY5MmIxNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzZkMzdmMTJkOWMwNDQ2YTBhMjgyZDNmZDVjNDRiOTlhID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42ODk0ODk5OTk4NTM2NTYsIC03My45MjIwNzIwMDMzODc2MV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZGFhZjgwYTdkZjI0OTUzYTM4ZDk4NWYwMGNlYmQ4NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1MWFjOGFmNDg4YjQ3ZjU4ODQ0ZGUxYmU4MDIxMzQzID0gJCgnPGRpdiBpZD0iaHRtbF9lNTFhYzhhZjQ4OGI0N2Y1ODg0NGRlMWJlODAyMTM0MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjIyMC4wLCBpbmogPTMzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RkYWFmODBhN2RmMjQ5NTNhMzhkOTg1ZjAwY2ViZDg3LnNldENvbnRlbnQoaHRtbF9lNTFhYzhhZjQ4OGI0N2Y1ODg0NGRlMWJlODAyMTM0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZkMzdmMTJkOWMwNDQ2YTBhMjgyZDNmZDVjNDRiOTlhLmJpbmRQb3B1cChwb3B1cF9kZGFhZjgwYTdkZjI0OTUzYTM4ZDk4NWYwMGNlYmQ4NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzM5MzE4MTA5MmMzMzQwOWU4MzU4MTMyODdmNjJkYjhjID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42ODU1Mjk5OTk3NTI5NSwgLTczLjk1NjU1MDAwMDA3MDJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjMwNzhjNTExOWFiNGVhYzlhMjVmYTY1OGFiMDQyMzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OTg4MDNkOTM4NmQ0MjkzYmMzYmYwY2UxMWRiNzU0ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjk4ODAzZDkzODZkNDI5M2JjM2JmMGNlMTFkYjc1NGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTIyMjIuMCwgaW5qID0xNi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MzA3OGM1MTE5YWI0ZWFjOWEyNWZhNjU4YWIwNDIzNi5zZXRDb250ZW50KGh0bWxfNjk4ODAzZDkzODZkNDI5M2JjM2JmMGNlMTFkYjc1NGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zOTMxODEwOTJjMzM0MDllODM1ODEzMjg3ZjYyZGI4Yy5iaW5kUG9wdXAocG9wdXBfNjMwNzhjNTExOWFiNGVhYzlhMjVmYTY1OGFiMDQyMzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl80NGRlMmY5OTBlZTA0ZWJjOWZmYmEwNDI0NWRlMWUzMSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjg2OTAzOTk5OTc2NywgLTczLjk0NDYyMjAwMDM1ODczXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5YjRlZTIwNjg5MDRhMGY5NzliNTU1ZGQxNWU5MzlmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDJmOTFhOTAyMGI1NDM5N2E5OTdiOTNkNDljNGQ0NzQgPSAkKCc8ZGl2IGlkPSJodG1sXzAyZjkxYTkwMjBiNTQzOTdhOTk3YjkzZDQ5YzRkNDc0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yMjI1LjAsIGluaiA9MTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTliNGVlMjA2ODkwNGEwZjk3OWI1NTVkZDE1ZTkzOWYuc2V0Q29udGVudChodG1sXzAyZjkxYTkwMjBiNTQzOTdhOTk3YjkzZDQ5YzRkNDc0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDRkZTJmOTkwZWUwNGViYzlmZmJhMDQyNDVkZTFlMzEuYmluZFBvcHVwKHBvcHVwX2E5YjRlZTIwNjg5MDRhMGY5NzliNTU1ZGQxNWU5MzlmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZTZhYjI4ZTE2ZjZlNGVhMWFhMGJiYTU3NWVkMTU5YmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY4ODIzMTk5OTgyMTgzLCAtNzMuOTMzMTAyMDAxMTg1ODRdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWI5YzU5MGQ0ZDExNDQ2Y2FhZTk0YWRiNmM1OTE2YzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZTY3ODMyM2ExZjU0MzdmYTA0M2MyNjc0MjA5ZDkxYiA9ICQoJzxkaXYgaWQ9Imh0bWxfOGU2NzgzMjNhMWY1NDM3ZmEwNDNjMjY3NDIwOWQ5MWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTIyMjkuMCwgaW5qID0xNi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YjljNTkwZDRkMTE0NDZjYWFlOTRhZGI2YzU5MTZjMy5zZXRDb250ZW50KGh0bWxfOGU2NzgzMjNhMWY1NDM3ZmEwNDNjMjY3NDIwOWQ5MWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lNmFiMjhlMTZmNmU0ZWExYWEwYmJhNTc1ZWQxNTliZi5iaW5kUG9wdXAocG9wdXBfNWI5YzU5MGQ0ZDExNDQ2Y2FhZTk0YWRiNmM1OTE2YzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9lZjQ1MjJlMjZmNzk0ZTg4YmMyYjljMDRlODE2MzUyMyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjk2ODI1OTk5OTcwMDQsIC03My45MTQ4NjUwMDE1OTUzMl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYzc1ZjkzMDdiZjE0MmE3ODQ4NmVhNThlOTlhYjRjYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBlNDAyMGZlNDJlODQ3YjM5ZmUxMmQ5ZDBlZmY1MzJmID0gJCgnPGRpdiBpZD0iaHRtbF8wZTQwMjBmZTQyZTg0N2IzOWZlMTJkOWQwZWZmNTMyZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjIzMi4wLCBpbmogPTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmM3NWY5MzA3YmYxNDJhNzg0ODZlYTU4ZTk5YWI0Y2Iuc2V0Q29udGVudChodG1sXzBlNDAyMGZlNDJlODQ3YjM5ZmUxMmQ5ZDBlZmY1MzJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWY0NTIyZTI2Zjc5NGU4OGJjMmI5YzA0ZTgxNjM1MjMuYmluZFBvcHVwKHBvcHVwX2ZjNzVmOTMwN2JmMTQyYTc4NDg2ZWE1OGU5OWFiNGNiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMjUyYTNjNjE0MzM2NDczNzhjNGU4Njk4MjNmYTdlMDUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjcwMjMzNjk5OTc0NjMzNiwgLTczLjgxMTkwNTAwMzUwMTI1XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE1MWMxYmI3ZWVhODRlZGY5Y2U5ZjVmMzY4YzMxNDI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjljY2ZhY2U2YTIyNDJjMDhiOGIxMzIzYzdkYzdjMTkgPSAkKCc8ZGl2IGlkPSJodG1sXzI5Y2NmYWNlNmEyMjQyYzA4YjhiMTMyM2M3ZGM3YzE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yMzIyLjAsIGluaiA9MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNTFjMWJiN2VlYTg0ZWRmOWNlOWY1ZjM2OGMzMTQyOS5zZXRDb250ZW50KGh0bWxfMjljY2ZhY2U2YTIyNDJjMDhiOGIxMzIzYzdkYzdjMTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNTJhM2M2MTQzMzY0NzM3OGM0ZTg2OTgyM2ZhN2UwNS5iaW5kUG9wdXAocG9wdXBfMTUxYzFiYjdlZWE4NGVkZjljZTlmNWYzNjhjMzE0MjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9lNDY4Y2Y5YmFkNmY0NGVhYWU1OWM0M2NlNTFlMWRmYSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNzAxOTkzOTk5ODUyMDE0LCAtNzMuODA5OTU0MDAyNzM4NDZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmJlZDk2MmZmOWFjNDZiYmJhYjczZDBhMDQ4MWY1MjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYTZlZWM1NzRlZmQ0YzRiYTBkMDVlMmZmMTc5MmQ0NiA9ICQoJzxkaXYgaWQ9Imh0bWxfMmE2ZWVjNTc0ZWZkNGM0YmEwZDA1ZTJmZjE3OTJkNDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTIzMjUuMCwgaW5qID02LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZiZWQ5NjJmZjlhYzQ2YmJiYWI3M2QwYTA0ODFmNTI2LnNldENvbnRlbnQoaHRtbF8yYTZlZWM1NzRlZmQ0YzRiYTBkMDVlMmZmMTc5MmQ0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U0NjhjZjliYWQ2ZjQ0ZWFhZTU5YzQzY2U1MWUxZGZhLmJpbmRQb3B1cChwb3B1cF82YmVkOTYyZmY5YWM0NmJiYmFiNzNkMGEwNDgxZjUyNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzdkMWI5MjUyYzZjMDQ4ZmJiZDI2NWNkNzY1MTI0ZWFjID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MDE4MTQ5OTk3Mzk5OSwgLTczLjgwODg3NDAwMjQ0NzgyXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1M2VmNTg4NjIxMTRhM2U5NTQzMzE2MjljNDNhNDc2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGRmZmNlMTE5Y2JkNDAyZTkyOTdhYTQxMGM2ODBkMzkgPSAkKCc8ZGl2IGlkPSJodG1sXzhkZmZjZTExOWNiZDQwMmU5Mjk3YWE0MTBjNjgwZDM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yMzI2LjAsIGluaiA9MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNTNlZjU4ODYyMTE0YTNlOTU0MzMxNjI5YzQzYTQ3Ni5zZXRDb250ZW50KGh0bWxfOGRmZmNlMTE5Y2JkNDAyZTkyOTdhYTQxMGM2ODBkMzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83ZDFiOTI1MmM2YzA0OGZiYmQyNjVjZDc2NTEyNGVhYy5iaW5kUG9wdXAocG9wdXBfYzUzZWY1ODg2MjExNGEzZTk1NDMzMTYyOWM0M2E0NzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl80OTU5NmY3ZThmNzQ0ZGQwYTJhYTc1YTc3MmJlOGVkMSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNzAxNzg3OTk5Nzc1OTk1LCAtNzMuODA2OTkyMDAxNDc3MzRdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTYzMjI4Mjk0NWU1NDQ2MDg4OGI1MGMxMzEyOTAxMTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MWRhYWE1MzVlOTA0NGQyOWIwODY5OGI1MTJjMjM0OSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzFkYWFhNTM1ZTkwNDRkMjliMDg2OThiNTEyYzIzNDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTIzMjguMCwgaW5qID0xLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E2MzIyODI5NDVlNTQ0NjA4ODhiNTBjMTMxMjkwMTEyLnNldENvbnRlbnQoaHRtbF83MWRhYWE1MzVlOTA0NGQyOWIwODY5OGI1MTJjMjM0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ5NTk2ZjdlOGY3NDRkZDBhMmFhNzVhNzcyYmU4ZWQxLmJpbmRQb3B1cChwb3B1cF9hNjMyMjgyOTQ1ZTU0NDYwODg4YjUwYzEzMTI5MDExMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzEzNTIyYzIwNTNmYjRhYmNhMjUwZjUxMTFhNDk3Yzg3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MDE4ODA5OTk4MDkxMzQsIC03My44MDU1MTUwMDM1MzQzMl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hN2UxNTllNTQ1ZTc0ODY5OWMyZmNiMDNjZTI5ZmZkMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQwNzIxZTM4MDRiMjQyNjhiNTU0YTcwNjA0NGQ5Nzk1ID0gJCgnPGRpdiBpZD0iaHRtbF80MDcyMWUzODA0YjI0MjY4YjU1NGE3MDYwNDRkOTc5NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjMzMS4wLCBpbmogPTEzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3ZTE1OWU1NDVlNzQ4Njk5YzJmY2IwM2NlMjlmZmQwLnNldENvbnRlbnQoaHRtbF80MDcyMWUzODA0YjI0MjY4YjU1NGE3MDYwNDRkOTc5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzEzNTIyYzIwNTNmYjRhYmNhMjUwZjUxMTFhNDk3Yzg3LmJpbmRQb3B1cChwb3B1cF9hN2UxNTllNTQ1ZTc0ODY5OWMyZmNiMDNjZTI5ZmZkMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2E5Yjk2NTE4ZWNiZTQ3YWU5MTFmNzk3OTYzNmQ4MmFlID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MDIxMzE5OTk3MjY4OSwgLTczLjgwNDQ0MjAwMDA4OTFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDhiMTQ3OTk5YzQzNGJiY2JhOGNiODIwMzkxNDE4NTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMmM1NWU2ZWYyMTI0NGI0ODgyY2I5Zjc0NzM3NzQwOCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjJjNTVlNmVmMjEyNDRiNDg4MmNiOWY3NDczNzc0MDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTIzMzIuMCwgaW5qID0yNi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOGIxNDc5OTljNDM0YmJjYmE4Y2I4MjAzOTE0MTg1OC5zZXRDb250ZW50KGh0bWxfZjJjNTVlNmVmMjEyNDRiNDg4MmNiOWY3NDczNzc0MDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hOWI5NjUxOGVjYmU0N2FlOTExZjc5Nzk2MzZkODJhZS5iaW5kUG9wdXAocG9wdXBfZDhiMTQ3OTk5YzQzNGJiY2JhOGNiODIwMzkxNDE4NTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9hMTIwNjk2NGM0OTY0OTZjODNmN2NhZWJhM2VkZjEwNSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNzAyNzM3OTk5ODY3NTQ0LCAtNzMuODAyMjg2MDAxOTQzMjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTkzNjU4ZjgzYmJmNGNhYWIyZTY5Mjc2ZWI4NzFkZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MGFkMzhkMjZhOGY0MDQxYTcxNGU1MTYyMTc0MDAzZiA9ICQoJzxkaXYgaWQ9Imh0bWxfODBhZDM4ZDI2YThmNDA0MWE3MTRlNTE2MjE3NDAwM2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTIzMzMuMCwgaW5qID0yOS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOTM2NThmODNiYmY0Y2FhYjJlNjkyNzZlYjg3MWRlYS5zZXRDb250ZW50KGh0bWxfODBhZDM4ZDI2YThmNDA0MWE3MTRlNTE2MjE3NDAwM2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hMTIwNjk2NGM0OTY0OTZjODNmN2NhZWJhM2VkZjEwNS5iaW5kUG9wdXAocG9wdXBfYTkzNjU4ZjgzYmJmNGNhYWIyZTY5Mjc2ZWI4NzFkZWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9mYzllMDM5N2M2N2Q0MDY1YmVjY2JjYjQ1MDJmOGE3ZSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNzAzNzUyOTk5ODY1NTYsIC03My43OTkxNTAwMDEyOTE4Ml0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZjQ0N2M1MTQyM2I0ZTFjODcyYzVjZGI5OTc4ZGQ0ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFmZDNlZGMwMzQwMDQ5MDNiNWZlOWNmYjlkMTljYTViID0gJCgnPGRpdiBpZD0iaHRtbF8xZmQzZWRjMDM0MDA0OTAzYjVmZTljZmI5ZDE5Y2E1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjMzNC4wLCBpbmogPTIyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBmNDQ3YzUxNDIzYjRlMWM4NzJjNWNkYjk5NzhkZDRkLnNldENvbnRlbnQoaHRtbF8xZmQzZWRjMDM0MDA0OTAzYjVmZTljZmI5ZDE5Y2E1Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZjOWUwMzk3YzY3ZDQwNjViZWNjYmNiNDUwMmY4YTdlLmJpbmRQb3B1cChwb3B1cF8wZjQ0N2M1MTQyM2I0ZTFjODcyYzVjZGI5OTc4ZGQ0ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzUwNGNhZjRmNzJkMTQ3MDE4YjZkYjk2OWIzMjE0MWVjID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MDc5MzM5OTk4NjExLCAtNzMuNzg1NzcwMDAwODU5NjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjEwZThmMjJkNDM5NGRlOWEwZTE2YzMwMmJhODMzNzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOWZlZTVmMzY0ZWU0NzgyODZhN2RiYjk5MjMxZTBhMyA9ICQoJzxkaXYgaWQ9Imh0bWxfYzlmZWU1ZjM2NGVlNDc4Mjg2YTdkYmI5OTIzMWUwYTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTIzNDYuMCwgaW5qID0wLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IxMGU4ZjIyZDQzOTRkZTlhMGUxNmMzMDJiYTgzMzc5LnNldENvbnRlbnQoaHRtbF9jOWZlZTVmMzY0ZWU0NzgyODZhN2RiYjk5MjMxZTBhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUwNGNhZjRmNzJkMTQ3MDE4YjZkYjk2OWIzMjE0MWVjLmJpbmRQb3B1cChwb3B1cF9iMTBlOGYyMmQ0Mzk0ZGU5YTBlMTZjMzAyYmE4MzM3OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2UzM2RkMTI1MGFjZDQ0MWNhYTVjMzg5ZGNiYWE1Y2Q2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MDgwNzU5OTk5NzQ5NjYsIC03My43ODIzNzAwMDE2NjQ0XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1ZTU1ZTU5YWRmZjRkYjRhMzk5N2U5ZTc0N2ZkMmVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTEzNWNkNThkMGI4NGQ0ZDg0NGU4ZTVjY2RlY2ZlMjUgPSAkKCc8ZGl2IGlkPSJodG1sXzUxMzVjZDU4ZDBiODRkNGQ4NDRlOGU1Y2NkZWNmZTI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yMzU2LjAsIGluaiA9Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NWU1NWU1OWFkZmY0ZGI0YTM5OTdlOWU3NDdmZDJlYy5zZXRDb250ZW50KGh0bWxfNTEzNWNkNThkMGI4NGQ0ZDg0NGU4ZTVjY2RlY2ZlMjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMzNkZDEyNTBhY2Q0NDFjYWE1YzM4OWRjYmFhNWNkNi5iaW5kUG9wdXAocG9wdXBfNTVlNTVlNTlhZGZmNGRiNGEzOTk3ZTllNzQ3ZmQyZWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl85NWUzOTVkMjdmMDg0YzhjYmFlZTMwZWIzOGJmZTZiMyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNzEwODI1OTk5OTg0MiwgLTczLjc3MDY1MTAwMDIxMjA2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FjYTc0NjhjODk1MDRmOTBiYmNkNGIyZmQ4NDdlYzMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTI5MzU0ZmE2NTdmNDgyNWEzY2UxNmY3NTE4NzVmYjcgPSAkKCc8ZGl2IGlkPSJodG1sXzkyOTM1NGZhNjU3ZjQ4MjVhM2NlMTZmNzUxODc1ZmI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yMzcwLjAsIGluaiA9MzcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWNhNzQ2OGM4OTUwNGY5MGJiY2Q0YjJmZDg0N2VjMzMuc2V0Q29udGVudChodG1sXzkyOTM1NGZhNjU3ZjQ4MjVhM2NlMTZmNzUxODc1ZmI3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTVlMzk1ZDI3ZjA4NGM4Y2JhZWUzMGViMzhiZmU2YjMuYmluZFBvcHVwKHBvcHVwX2FjYTc0NjhjODk1MDRmOTBiYmNkNGIyZmQ4NDdlYzMzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNmVkMzM0YzAyNzIwNDEzZGIwOWY3MmNiZjY5MWRkZTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjcxMTM3Mjk5OTkyMjQzLCAtNzMuNzcwMDQ1MDAwNzgyMDJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2Y0NzM3OWUwZWU0NGNjYzgxYTlhMWEzNGIxYzJmNGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNDY5YmUwYWI1NjI0NTExODkzZmExZWQ5Njc3NmJlYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMDQ2OWJlMGFiNTYyNDUxMTg5M2ZhMWVkOTY3NzZiZWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTIzNzEuMCwgaW5qID0wLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmNDczNzllMGVlNDRjY2M4MWE5YTFhMzRiMWMyZjRhLnNldENvbnRlbnQoaHRtbF8wNDY5YmUwYWI1NjI0NTExODkzZmExZWQ5Njc3NmJlYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZlZDMzNGMwMjcyMDQxM2RiMDlmNzJjYmY2OTFkZGU0LmJpbmRQb3B1cChwb3B1cF9jZjQ3Mzc5ZTBlZTQ0Y2NjODFhOWExYTM0YjFjMmY0YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzQ1Y2NiZDAyYTczNjRlOGJhNmYxZjc1YTQ4YjRkZTgxID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MTE5NzY5OTk4NzY0NCwgLTczLjc2OTQ0MDAwMjYxNDY2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q0YzVmZDdlNWFlNjQwOGNhMzQwNDdkOWI1NmQ0ZjZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTQzNWMwNWYzODhhNDc5YjkxYTBkZDFkMjMzNzRiNjYgPSAkKCc8ZGl2IGlkPSJodG1sX2E0MzVjMDVmMzg4YTQ3OWI5MWEwZGQxZDIzMzc0YjY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yMzcyLjAsIGluaiA9MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNGM1ZmQ3ZTVhZTY0MDhjYTM0MDQ3ZDliNTZkNGY2Yi5zZXRDb250ZW50KGh0bWxfYTQzNWMwNWYzODhhNDc5YjkxYTBkZDFkMjMzNzRiNjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80NWNjYmQwMmE3MzY0ZThiYTZmMWY3NWE0OGI0ZGU4MS5iaW5kUG9wdXAocG9wdXBfZDRjNWZkN2U1YWU2NDA4Y2EzNDA0N2Q5YjU2ZDRmNmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl82MzBkM2JlMTdhYzU0ZDBjYTBjNTVkNDA3YWVlYTdmYSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNzE0MDk1OTk5OTYxNzU2LCAtNzMuNzUzMDkzMDAwNzkyNTVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmIwZjMyMTBlZTY1NDQzOTgxOTIwNDk5YzUwMGM3NTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNjdkMDIwMjlmMWU0OGNhYjUzMmJlNDQ2YTNhYWNlNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjY3ZDAyMDI5ZjFlNDhjYWI1MzJiZTQ0NmEzYWFjZTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTIzOTMuMCwgaW5qID0yLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJiMGYzMjEwZWU2NTQ0Mzk4MTkyMDQ5OWM1MDBjNzUzLnNldENvbnRlbnQoaHRtbF9mNjdkMDIwMjlmMWU0OGNhYjUzMmJlNDQ2YTNhYWNlNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYzMGQzYmUxN2FjNTRkMGNhMGM1NWQ0MDdhZWVhN2ZhLmJpbmRQb3B1cChwb3B1cF8yYjBmMzIxMGVlNjU0NDM5ODE5MjA0OTljNTAwYzc1MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzcxNzU5Mjc2ZDQ0NDQ4NWJiNmQ0Yjg2MDA3ZTNmOTIzID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MTQ2MzM5OTk4ODQ5NzQsIC03My43NTEzMjUwMDI0MTE3M10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYmJmODdlN2EwMzc0OTY1YjA4YjdjMjRkNWU5YWJiNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxYjMwZDVjMzI1NTRhNjBhOWI1MzJmMWE4N2IzYWUxID0gJCgnPGRpdiBpZD0iaHRtbF8zMWIzMGQ1YzMyNTU0YTYwYTliNTMyZjFhODdiM2FlMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjM5NS4wLCBpbmogPTkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGJiZjg3ZTdhMDM3NDk2NWIwOGI3YzI0ZDVlOWFiYjYuc2V0Q29udGVudChodG1sXzMxYjMwZDVjMzI1NTRhNjBhOWI1MzJmMWE4N2IzYWUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzE3NTkyNzZkNDQ0NDg1YmI2ZDRiODYwMDdlM2Y5MjMuYmluZFBvcHVwKHBvcHVwXzBiYmY4N2U3YTAzNzQ5NjViMDhiN2MyNGQ1ZTlhYmI2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMWE0MDg2Yjk5YzE4NGUyZmE3MzE1N2VhZDY2OGQwYWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjcxNzcyMTk5OTg5LCAtNzMuNzM3OTExMDAxMTM3ODZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzY3OTllYzc0ZTUyNGJjODlhMTc2NDkyMDJhZmM1MWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYmIyYzkwY2I3NGQ0ZjI2OWUwYWY1MWVhMmQ5Y2M0OCA9ICQoJzxkaXYgaWQ9Imh0bWxfZmJiMmM5MGNiNzRkNGYyNjllMGFmNTFlYTJkOWNjNDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTI0MDguMCwgaW5qID0xNi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjc5OWVjNzRlNTI0YmM4OWExNzY0OTIwMmFmYzUxYS5zZXRDb250ZW50KGh0bWxfZmJiMmM5MGNiNzRkNGYyNjllMGFmNTFlYTJkOWNjNDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xYTQwODZiOTljMTg0ZTJmYTczMTU3ZWFkNjY4ZDBhYi5iaW5kUG9wdXAocG9wdXBfMzY3OTllYzc0ZTUyNGJjODlhMTc2NDkyMDJhZmM1MWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl85MDRhMDFiNjNmZWM0ZDMzYTVmNTJjZWNhZmFjNTNmZCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNzE3OTMwOTk5ODg5NSwgLTczLjczNjk1ODAwMzEwNTcxXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmNTExMTRjMTQ0YTQxNGFhNTA3YTA1ZDM3MWVkOTZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzE0YjU5NGRiMGU5NDNmNzkzMGRmMmU2MDJjMGM0ZDAgPSAkKCc8ZGl2IGlkPSJodG1sXzcxNGI1OTRkYjBlOTQzZjc5MzBkZjJlNjAyYzBjNGQwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yNDEwLjAsIGluaiA9MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZjUxMTE0YzE0NGE0MTRhYTUwN2EwNWQzNzFlZDk2ZS5zZXRDb250ZW50KGh0bWxfNzE0YjU5NGRiMGU5NDNmNzkzMGRmMmU2MDJjMGM0ZDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MDRhMDFiNjNmZWM0ZDMzYTVmNTJjZWNhZmFjNTNmZC5iaW5kUG9wdXAocG9wdXBfMGY1MTExNGMxNDRhNDE0YWE1MDdhMDVkMzcxZWQ5NmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9lNTkxMTYwYTkwMzg0NTNhYjY3MTE3YTZkZWVhYmFiZiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNzIwNDAxOTk5OTg2OTc2LCAtNzMuNzMyMzc0MDAwMDcwMTJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGNmNjU3Yjc4OWQwNDFlZGIxMWU3MTkwM2E1YzkyZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YTQzYzgyZDIwODc0NjIwYTY1MTM1ZDY0MjE4NTI5YyA9ICQoJzxkaXYgaWQ9Imh0bWxfNWE0M2M4MmQyMDg3NDYyMGE2NTEzNWQ2NDIxODUyOWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTI0MTUuMCwgaW5qID0wLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhjZjY1N2I3ODlkMDQxZWRiMTFlNzE5MDNhNWM5MmQ2LnNldENvbnRlbnQoaHRtbF81YTQzYzgyZDIwODc0NjIwYTY1MTM1ZDY0MjE4NTI5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U1OTExNjBhOTAzODQ1M2FiNjcxMTdhNmRlZWFiYWJmLmJpbmRQb3B1cChwb3B1cF84Y2Y2NTdiNzg5ZDA0MWVkYjExZTcxOTAzYTVjOTJkNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2FjMWQwMDk4YjdhMjQ2NmNhMTE1Y2Q0MzA1NTYxMTAyID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MjE1ODY5OTk4ODUyMiwgLTczLjczMTAxMzAwMDg2OTMyXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5NTBlMWIyYTA2MzRmOWI4YjkyMTVhMTk0M2FiOWM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGVlMTgyYmU1NmUzNDI2OGE1ZWE2N2Q5MDFkMzc2NTUgPSAkKCc8ZGl2IGlkPSJodG1sXzRlZTE4MmJlNTZlMzQyNjhhNWVhNjdkOTAxZDM3NjU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yNDE2LjAsIGluaiA9OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOTUwZTFiMmEwNjM0ZjliOGI5MjE1YTE5NDNhYjljOS5zZXRDb250ZW50KGh0bWxfNGVlMTgyYmU1NmUzNDI2OGE1ZWE2N2Q5MDFkMzc2NTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYzFkMDA5OGI3YTI0NjZjYTExNWNkNDMwNTU2MTEwMi5iaW5kUG9wdXAocG9wdXBfMTk1MGUxYjJhMDYzNGY5YjhiOTIxNWExOTQzYWI5YzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl85YTNmMTEzYTQxZjE0YzNhOGM2NjQwYmEyZDBlMzdmMSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjkyMzE3OTk5ODMxOTgsIC03My44NjA4OTYwMDE4NjMxN10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YzBmNDc1MTEzYzI0OWIyOTlmYzFkZWU3MzIzMmFjZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M0MjNjZWZlNjAyZjRmNjViNWQyNDlkN2QwYThiZmQ2ID0gJCgnPGRpdiBpZD0iaHRtbF9jNDIzY2VmZTYwMmY0ZjY1YjVkMjQ5ZDdkMGE4YmZkNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjQxOC4wLCBpbmogPTE2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVjMGY0NzUxMTNjMjQ5YjI5OWZjMWRlZTczMjMyYWNkLnNldENvbnRlbnQoaHRtbF9jNDIzY2VmZTYwMmY0ZjY1YjVkMjQ5ZDdkMGE4YmZkNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlhM2YxMTNhNDFmMTRjM2E4YzY2NDBiYTJkMGUzN2YxLmJpbmRQb3B1cChwb3B1cF81YzBmNDc1MTEzYzI0OWIyOTlmYzFkZWU3MzIzMmFjZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2ZmYjY0YTYzNTI3ZTQ3NjZiNGM0Mjg3MTBiMmM4NTFhID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MDE3NzU5OTk4MjU0NjUsIC03My44MDc5MzEwMDMyODI2Ml0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYTAxYjIzMzBmOGI0MGRkOTIzZDAyMDhhMjYyOTA1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0YTg3MTY0MTNjNTRiMmJhYzM5MzA0NDFhMzI0NGU3ID0gJCgnPGRpdiBpZD0iaHRtbF8xNGE4NzE2NDEzYzU0YjJiYWMzOTMwNDQxYTMyNDRlNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjQyNC4wLCBpbmogPTEwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhMDFiMjMzMGY4YjQwZGQ5MjNkMDIwOGEyNjI5MDUwLnNldENvbnRlbnQoaHRtbF8xNGE4NzE2NDEzYzU0YjJiYWMzOTMwNDQxYTMyNDRlNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZmYjY0YTYzNTI3ZTQ3NjZiNGM0Mjg3MTBiMmM4NTFhLmJpbmRQb3B1cChwb3B1cF9hYTAxYjIzMzBmOGI0MGRkOTIzZDAyMDhhMjYyOTA1MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzM2NGUwOTNjNmU3YjQyYjViMDIxZWQ2YzllZGQyOGQ0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MDQ2MTA5OTk4ODI1OSwgLTczLjc5NzAwNzAwMjcxNTgyXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIyNjJhOTYyZmE2YzQ0YTA5NDU2NjhlY2EzZGEzYThmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjI0NGE3NmExY2Q5NDVkNTllYjM3MDY0ODA2ODg1YjEgPSAkKCc8ZGl2IGlkPSJodG1sX2IyNDRhNzZhMWNkOTQ1ZDU5ZWIzNzA2NDgwNjg4NWIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yNDI3LjAsIGluaiA9MTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjI2MmE5NjJmYTZjNDRhMDk0NTY2OGVjYTNkYTNhOGYuc2V0Q29udGVudChodG1sX2IyNDRhNzZhMWNkOTQ1ZDU5ZWIzNzA2NDgwNjg4NWIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzY0ZTA5M2M2ZTdiNDJiNWIwMjFlZDZjOWVkZDI4ZDQuYmluZFBvcHVwKHBvcHVwXzIyNjJhOTYyZmE2YzQ0YTA5NDU2NjhlY2EzZGEzYThmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMGQ5Yzk3OTc2YmQyNDkzOWI4MTM4YjllMmIyMjUzM2IgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjcxODQ5Nzk5OTc2MTEzNCwgLTczLjczNTMwNDAwMjUzMzYxXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcyZWQ0Njk1ZmZkMzQxNTFiY2I2YzQ4YjM5YTU1M2U0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTk2NTlhNTVkMDEwNGE5ZGFjNmRiNzE3MDYzZjY1MjQgPSAkKCc8ZGl2IGlkPSJodG1sXzU5NjU5YTU1ZDAxMDRhOWRhYzZkYjcxNzA2M2Y2NTI0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yNDQwLjAsIGluaiA9NDkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzJlZDQ2OTVmZmQzNDE1MWJjYjZjNDhiMzlhNTUzZTQuc2V0Q29udGVudChodG1sXzU5NjU5YTU1ZDAxMDRhOWRhYzZkYjcxNzA2M2Y2NTI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGQ5Yzk3OTc2YmQyNDkzOWI4MTM4YjllMmIyMjUzM2IuYmluZFBvcHVwKHBvcHVwXzcyZWQ0Njk1ZmZkMzQxNTFiY2I2YzQ4YjM5YTU1M2U0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfM2YzMTBjMDlhYTUxNDJkZmJlYTdiY2QyNmFlZDQ4NjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjcwMzQ0NTk5OTgwOTI3NiwgLTczLjkxMjA1ODAwMDE2ODVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWYxNzcyNzdlMzg4NGFkMGE5MzY1YjkwMzA5ZDRkMjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNzJjNTMxNGZhZGY0ZGFiOTc4YzExMDcxODBiMGViOSA9ICQoJzxkaXYgaWQ9Imh0bWxfZTcyYzUzMTRmYWRmNGRhYjk3OGMxMTA3MTgwYjBlYjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTI0NTMuMCwgaW5qID0wLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlmMTc3Mjc3ZTM4ODRhZDBhOTM2NWI5MDMwOWQ0ZDI3LnNldENvbnRlbnQoaHRtbF9lNzJjNTMxNGZhZGY0ZGFiOTc4YzExMDcxODBiMGViOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNmMzEwYzA5YWE1MTQyZGZiZWE3YmNkMjZhZWQ0ODY0LmJpbmRQb3B1cChwb3B1cF85ZjE3NzI3N2UzODg0YWQwYTkzNjViOTAzMDlkNGQyNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzg1YzViOWFiNTkzYjQzNTFhZGYzZGUyMjA4ZGQzMTQzID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MDQ1NjM5OTk4MTU1MDUsIC03My45MTA2NTUwMDEwNTYyNF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYTM1OGNkZGIyMTk0M2Q3YTA4ZGY0NzdiOGJmMGRmZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkYzg2NjEwYTg5MDQxMDk5YWNhOGUyODkyOGRhOTE0ID0gJCgnPGRpdiBpZD0iaHRtbF8yZGM4NjYxMGE4OTA0MTA5OWFjYThlMjg5MjhkYTkxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjQ2Ni4wLCBpbmogPTguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGEzNThjZGRiMjE5NDNkN2EwOGRmNDc3YjhiZjBkZmUuc2V0Q29udGVudChodG1sXzJkYzg2NjEwYTg5MDQxMDk5YWNhOGUyODkyOGRhOTE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODVjNWI5YWI1OTNiNDM1MWFkZjNkZTIyMDhkZDMxNDMuYmluZFBvcHVwKHBvcHVwX2RhMzU4Y2RkYjIxOTQzZDdhMDhkZjQ3N2I4YmYwZGZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZDQ0ZTE3ZWY3MTRlNDlhOThhMmIyNDI1MmNhOTA4MjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY5ODQzNTk5OTc4NjUxLCAtNzMuOTAzMzU2MDAxOTkxNl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYTkxMTMyZjE4OGQ0ZmNiYWIxY2Q5ODExZDgwNGExZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxZDM4YjJhZDFiYzRmNjg4MWY2N2VkMDVjNDc1ZmU3ID0gJCgnPGRpdiBpZD0iaHRtbF82MWQzOGIyYWQxYmM0ZjY4ODFmNjdlZDA1YzQ3NWZlNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjUyMi4wLCBpbmogPTguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmE5MTEzMmYxODhkNGZjYmFiMWNkOTgxMWQ4MDRhMWUuc2V0Q29udGVudChodG1sXzYxZDM4YjJhZDFiYzRmNjg4MWY2N2VkMDVjNDc1ZmU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDQ0ZTE3ZWY3MTRlNDlhOThhMmIyNDI1MmNhOTA4MjEuYmluZFBvcHVwKHBvcHVwX2JhOTExMzJmMTg4ZDRmY2JhYjFjZDk4MTFkODA0YTFlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZDNkZGYwZmZhOWUyNGU2OGI1YTUzYWE3NTI0YjE1MTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY5ODAxMzk5OTc4NTc2NSwgLTczLjkwMjY0NDAwMzIwMDMyXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY0NTUyZjAwYmViNjRkOTJiNDA2YmI1YzIwNzYwN2E5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTkxZjQyYmZiZmIzNDBmMmFlMTUzMGJhZjQwMDRlNjkgPSAkKCc8ZGl2IGlkPSJodG1sXzE5MWY0MmJmYmZiMzQwZjJhZTE1MzBiYWY0MDA0ZTY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yNTI1LjAsIGluaiA9NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NDU1MmYwMGJlYjY0ZDkyYjQwNmJiNWMyMDc2MDdhOS5zZXRDb250ZW50KGh0bWxfMTkxZjQyYmZiZmIzNDBmMmFlMTUzMGJhZjQwMDRlNjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kM2RkZjBmZmE5ZTI0ZTY4YjVhNTNhYTc1MjRiMTUxOS5iaW5kUG9wdXAocG9wdXBfNjQ1NTJmMDBiZWI2NGQ5MmI0MDZiYjVjMjA3NjA3YTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8wYmQ4ZGZlMTJlMDE0NjNlYWExNWMxMjk3YjAyNGY2MSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjk2MjE5OTk5ODE4NDcsIC03My44OTk4NzAwMDE2MTk1NV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMGNmMzA3OGNmNjc0YmU4YmJmOGQ5OTEyN2I4MzcwNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3ZWVjMjU4M2Q0MjQ5NTZhNWRiNDZkNjE3MjZiNzQ1ID0gJCgnPGRpdiBpZD0iaHRtbF8wN2VlYzI1ODNkNDI0OTU2YTVkYjQ2ZDYxNzI2Yjc0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjUzMC4wLCBpbmogPTE0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EwY2YzMDc4Y2Y2NzRiZThiYmY4ZDk5MTI3YjgzNzA3LnNldENvbnRlbnQoaHRtbF8wN2VlYzI1ODNkNDI0OTU2YTVkYjQ2ZDYxNzI2Yjc0NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBiZDhkZmUxMmUwMTQ2M2VhYTE1YzEyOTdiMDI0ZjYxLmJpbmRQb3B1cChwb3B1cF9hMGNmMzA3OGNmNjc0YmU4YmJmOGQ5OTEyN2I4MzcwNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzY0ZWEzOWJhMGU2YzQwNGViYTkzMTY4MDM3OTAwZTUyID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42OTkyNzg5OTk3NTM5MTUsIC03My45MDQ3ODMwMDMzMTY3Ml0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZDA1Y2JiZmRhNzk0NWExYmFiYzAyZjkyY2UxZTVmNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIyNWI5NTg1Y2Q5MjQ2MDBhZmRjMjlkMWZlMDQ4NWMwID0gJCgnPGRpdiBpZD0iaHRtbF8yMjViOTU4NWNkOTI0NjAwYWZkYzI5ZDFmZTA0ODVjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjUzMS4wLCBpbmogPTQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmQwNWNiYmZkYTc5NDVhMWJhYmMwMmY5MmNlMWU1ZjUuc2V0Q29udGVudChodG1sXzIyNWI5NTg1Y2Q5MjQ2MDBhZmRjMjlkMWZlMDQ4NWMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjRlYTM5YmEwZTZjNDA0ZWJhOTMxNjgwMzc5MDBlNTIuYmluZFBvcHVwKHBvcHVwX2ZkMDVjYmJmZGE3OTQ1YTFiYWJjMDJmOTJjZTFlNWY1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNzMzY2I5YmVjODhlNDI5MTg2YzA2YjI3MGFlNzljNGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY5OTkyNjk5OTc5MjE1NCwgLTczLjkwNTg3OTAwMTI4MDldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTA3N2M0YTc0YjAxNGIyNjg4MzRiN2NjNTkzODY2ZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80N2EwZWI0ODZjZjk0MTM2OTkxNjRlYThjMTQ0OWU5YSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDdhMGViNDg2Y2Y5NDEzNjk5MTY0ZWE4YzE0NDllOWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTI1MzQuMCwgaW5qID05LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwNzdjNGE3NGIwMTRiMjY4ODM0YjdjYzU5Mzg2NmY1LnNldENvbnRlbnQoaHRtbF80N2EwZWI0ODZjZjk0MTM2OTkxNjRlYThjMTQ0OWU5YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzczM2NiOWJlYzg4ZTQyOTE4NmMwNmIyNzBhZTc5YzRhLmJpbmRQb3B1cChwb3B1cF81MDc3YzRhNzRiMDE0YjI2ODgzNGI3Y2M1OTM4NjZmNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2VmNWZjOTdhNGJmOTQ2ZmViY2MwMGQ2MWViZTU3YWZkID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42OTg4NTY5OTk4NDU5OSwgLTczLjkwNDA3MDAwMTk1NzQ4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q0M2VhYmI1YmM2YTQ1Mjk5YThiMDk4YWIyMjhmYjQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmRjYjc0YWZhNjFjNGFiMWI5YTlhNmM0MDg2OTYyNmIgPSAkKCc8ZGl2IGlkPSJodG1sX2JkY2I3NGFmYTYxYzRhYjFiOWE5YTZjNDA4Njk2MjZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yNTQwLjAsIGluaiA9Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNDNlYWJiNWJjNmE0NTI5OWE4YjA5OGFiMjI4ZmI0OC5zZXRDb250ZW50KGh0bWxfYmRjYjc0YWZhNjFjNGFiMWI5YTlhNmM0MDg2OTYyNmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lZjVmYzk3YTRiZjk0NmZlYmNjMDBkNjFlYmU1N2FmZC5iaW5kUG9wdXAocG9wdXBfZDQzZWFiYjViYzZhNDUyOTlhOGIwOThhYjIyOGZiNDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl85NmU4ZTNmMmI1MmY0NjFiOGU0MTVhOWRkOTRmZjk0MSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjk5NDA0OTk5ODcxNTUsIC03My45NTMzNzAwMDAzMTY4NV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hODc1Mzk2NzI1ZGU0NzQ3YmIzYzM1NTIzZDdhYmMzMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJmMTJlZjM0NWMwNTQyN2E5NTJkYmNkMzRiYjkwZmZlID0gJCgnPGRpdiBpZD0iaHRtbF8yZjEyZWYzNDVjMDU0MjdhOTUyZGJjZDM0YmI5MGZmZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjU1OS4wLCBpbmogPTM4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E4NzUzOTY3MjVkZTQ3NDdiYjNjMzU1MjNkN2FiYzMzLnNldENvbnRlbnQoaHRtbF8yZjEyZWYzNDVjMDU0MjdhOTUyZGJjZDM0YmI5MGZmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk2ZThlM2YyYjUyZjQ2MWI4ZTQxNWE5ZGQ5NGZmOTQxLmJpbmRQb3B1cChwb3B1cF9hODc1Mzk2NzI1ZGU0NzQ3YmIzYzM1NTIzZDdhYmMzMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzNlN2RlZjA5NGFjMDRkNjk4M2I4ODIxYTg0NzFhNmI3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42OTg0NjE5OTk4Mzk2NSwgLTczLjk2MDE5NzAwMDA4MTAyXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM3ZWQ2NmU2NzEzZDRhOGRiOTNiZjM1NjViOWNiNDFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmQ2OTZiNzUzNDJlNDFhZWEyMmMzOTM5MmE5OGI0Y2EgPSAkKCc8ZGl2IGlkPSJodG1sXzZkNjk2Yjc1MzQyZTQxYWVhMjJjMzkzOTJhOThiNGNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yNTYxLjAsIGluaiA9MzAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzdlZDY2ZTY3MTNkNGE4ZGI5M2JmMzU2NWI5Y2I0MWMuc2V0Q29udGVudChodG1sXzZkNjk2Yjc1MzQyZTQxYWVhMjJjMzkzOTJhOThiNGNhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2U3ZGVmMDk0YWMwNGQ2OTgzYjg4MjFhODQ3MWE2YjcuYmluZFBvcHVwKHBvcHVwXzM3ZWQ2NmU2NzEzZDRhOGRiOTNiZjM1NjViOWNiNDFjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYmQ1ZjQyOTk1ZTI1NGIwNzgyYjRmMGJkZTFlNDAzNjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY5OTc5MDk5OTk3OTcxLCAtNzMuOTUwMDkxMDAwMjY0NzhdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzRiNTcxZGI4ZmEwNDNjYjg0NThkYzE1YTFkOGVkNGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZmU3ZWUyOWNjMzc0ZmFmOWNjZmZlOGFiNThhYzcwMyA9ICQoJzxkaXYgaWQ9Imh0bWxfYWZlN2VlMjljYzM3NGZhZjljY2ZmZThhYjU4YWM3MDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTI1NjMuMCwgaW5qID0zNC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNGI1NzFkYjhmYTA0M2NiODQ1OGRjMTVhMWQ4ZWQ0ZS5zZXRDb250ZW50KGh0bWxfYWZlN2VlMjljYzM3NGZhZjljY2ZmZThhYjU4YWM3MDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iZDVmNDI5OTVlMjU0YjA3ODJiNGYwYmRlMWU0MDM2NS5iaW5kUG9wdXAocG9wdXBfMzRiNTcxZGI4ZmEwNDNjYjg0NThkYzE1YTFkOGVkNGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl84ZDY0OTAwNTJmZmE0ZDRmODcyYThhYWQyMzcyOTIxMiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNzAxNTQ0OTk5NzQ0Njg0LCAtNzMuOTM4MzY1MDAxMjg1NDldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjM0ZWZiOWRiMzI4NGM3ODg5ODZiZjQ1MDUyYjA4NTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNDM0MjFhYmFjODg0ZGFhYjFmYThlMzQ1Nzg5YWIzNCA9ICQoJzxkaXYgaWQ9Imh0bWxfMTQzNDIxYWJhYzg4NGRhYWIxZmE4ZTM0NTc4OWFiMzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTI1NzAuMCwgaW5qID0xMi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMzRlZmI5ZGIzMjg0Yzc4ODk4NmJmNDUwNTJiMDg1OS5zZXRDb250ZW50KGh0bWxfMTQzNDIxYWJhYzg4NGRhYWIxZmE4ZTM0NTc4OWFiMzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84ZDY0OTAwNTJmZmE0ZDRmODcyYThhYWQyMzcyOTIxMi5iaW5kUG9wdXAocG9wdXBfYjM0ZWZiOWRiMzI4NGM3ODg5ODZiZjQ1MDUyYjA4NTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9mZTczYjk5Mjk3OTI0MzkzODU0ZDBiNWNmOWY2NzA2YiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNzAzNzcyOTk5NzU0MTEsIC03My45MzExNTUwMDEwMTY5Nl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MTZlNjM4NmJiMGQ0NzhmYTdkNjQ0NzM0ZWYwZjdmYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzMDQxZDcwMmVlOTRhYmU5ZTdkMjA0ZDc0NTY3NTEwID0gJCgnPGRpdiBpZD0iaHRtbF82MzA0MWQ3MDJlZTk0YWJlOWU3ZDIwNGQ3NDU2NzUxMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjU3MS4wLCBpbmogPTE5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcxNmU2Mzg2YmIwZDQ3OGZhN2Q2NDQ3MzRlZjBmN2ZjLnNldENvbnRlbnQoaHRtbF82MzA0MWQ3MDJlZTk0YWJlOWU3ZDIwNGQ3NDU2NzUxMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZlNzNiOTkyOTc5MjQzOTM4NTRkMGI1Y2Y5ZjY3MDZiLmJpbmRQb3B1cChwb3B1cF83MTZlNjM4NmJiMGQ0NzhmYTdkNjQ0NzM0ZWYwZjdmYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzA3MjJmMWIyOGI5NDQxZjc4ZTg0ODIyN2QyYzI1NjU2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42OTgwNDY5OTk3OTc2NywgLTczLjk3NTc4MzAwMDExOTU5XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc1ZDAyMDI3NzNjMDRiNDA4Nzc1N2IyYzkyMDMwMjY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWQ3NjQzZjYwNTQ5NDNkM2E4MDMwNjU0YTQ0NDdhMGYgPSAkKCc8ZGl2IGlkPSJodG1sX2VkNzY0M2Y2MDU0OTQzZDNhODAzMDY1NGE0NDQ3YTBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yNTczLjAsIGluaiA9OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NWQwMjAyNzczYzA0YjQwODc3NTdiMmM5MjAzMDI2OC5zZXRDb250ZW50KGh0bWxfZWQ3NjQzZjYwNTQ5NDNkM2E4MDMwNjU0YTQ0NDdhMGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wNzIyZjFiMjhiOTQ0MWY3OGU4NDgyMjdkMmMyNTY1Ni5iaW5kUG9wdXAocG9wdXBfNzVkMDIwMjc3M2MwNGI0MDg3NzU3YjJjOTIwMzAyNjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9kMzAyMDBjNjAyZjQ0MjUwODkxMTJmNTY3YjRiNDIxMiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjk4OTczOTk5NzM5NjY0LCAtNzMuOTU3MDIwMDAwMDQxODJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmYwMjEyNjYwYjJiNGI5YWE4ZGRmZmMyZjI5MGYyNGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMWI3ZDI1MzI5OGY0M2JjYTc3NzExMDdiNmE2ZmJkMSA9ICQoJzxkaXYgaWQ9Imh0bWxfYjFiN2QyNTMyOThmNDNiY2E3NzcxMTA3YjZhNmZiZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTI1ODIuMCwgaW5qID0zNS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZjAyMTI2NjBiMmI0YjlhYThkZGZmYzJmMjkwZjI0ZS5zZXRDb250ZW50KGh0bWxfYjFiN2QyNTMyOThmNDNiY2E3NzcxMTA3YjZhNmZiZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMzAyMDBjNjAyZjQ0MjUwODkxMTJmNTY3YjRiNDIxMi5iaW5kUG9wdXAocG9wdXBfYmYwMjEyNjYwYjJiNGI5YWE4ZGRmZmMyZjI5MGYyNGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8wNDNjZDBlYzViYWQ0YWI2YWMzMzA4NzhjZGZlYTM0MCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNzAwNzI0OTk5ODc2MjUsIC03My45NDE5MzEwMDA0MTE2NF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZGIyYzY1Nzk5ZDI0NjQwYjA1MjU3NDQzMGFiMTczMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ0YzkwYTkyNjRjOTQ1MzZiZjUwMzY2ZWYwMjlmNjY2ID0gJCgnPGRpdiBpZD0iaHRtbF80NGM5MGE5MjY0Yzk0NTM2YmY1MDM2NmVmMDI5ZjY2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjYwMC4wLCBpbmogPTY2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdkYjJjNjU3OTlkMjQ2NDBiMDUyNTc0NDMwYWIxNzMyLnNldENvbnRlbnQoaHRtbF80NGM5MGE5MjY0Yzk0NTM2YmY1MDM2NmVmMDI5ZjY2Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA0M2NkMGVjNWJhZDRhYjZhYzMzMDg3OGNkZmVhMzQwLmJpbmRQb3B1cChwb3B1cF83ZGIyYzY1Nzk5ZDI0NjQwYjA1MjU3NDQzMGFiMTczMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzQyMjdlZWE1OTUzMDQ5ZmFhMmMzNjQwYzMxMWNmMmM3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MDE5MDk5OTk3NjEwNSwgLTczLjkzNjk4MjAwMDMyNl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZWU1NWFiYzUzYmE0OGUwYmU2NjcwMWNiNTk5MGUyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBlZGNmYjcyODBlMDRmZmY4OGQ0ZTg2NjkxNTFiYWY4ID0gJCgnPGRpdiBpZD0iaHRtbF8wZWRjZmI3MjgwZTA0ZmZmODhkNGU4NjY5MTUxYmFmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjYwMS4wLCBpbmogPTcyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFlZTU1YWJjNTNiYTQ4ZTBiZTY2NzAxY2I1OTkwZTJlLnNldENvbnRlbnQoaHRtbF8wZWRjZmI3MjgwZTA0ZmZmODhkNGU4NjY5MTUxYmFmOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQyMjdlZWE1OTUzMDQ5ZmFhMmMzNjQwYzMxMWNmMmM3LmJpbmRQb3B1cChwb3B1cF8xZWU1NWFiYzUzYmE0OGUwYmU2NjcwMWNiNTk5MGUyZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzY5Y2FiYmMxMDBlODQ4Nzk5MzE0NzEwN2EyZTI0YmNjID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42OTg2NzY5OTk3OTM4MSwgLTczLjk1ODg1ODAwMDMxMjk3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkMTJkNjMxMmI3MDQ0YTU5ODM3ZDFlMGRhYThlYzY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmUxMjNjMzlmZDEzNDc4NjlhNGI4YjNmMmI4ZmFmNDEgPSAkKCc8ZGl2IGlkPSJodG1sX2ZlMTIzYzM5ZmQxMzQ3ODY5YTRiOGIzZjJiOGZhZjQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yNjAyLjAsIGluaiA9MTkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGQxMmQ2MzEyYjcwNDRhNTk4MzdkMWUwZGFhOGVjNjUuc2V0Q29udGVudChodG1sX2ZlMTIzYzM5ZmQxMzQ3ODY5YTRiOGIzZjJiOGZhZjQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjljYWJiYzEwMGU4NDg3OTkzMTQ3MTA3YTJlMjRiY2MuYmluZFBvcHVwKHBvcHVwXzhkMTJkNjMxMmI3MDQ0YTU5ODM3ZDFlMGRhYThlYzY1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZDVjZDVmZGQwNmEzNDlmNmIxOTBmOGZjNTZlMzQ0M2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY5ODA4Njk5OTc1NTUyNSwgLTczLjk3Njc4NzAwMDI3MDZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDFkYzc1N2NiMjkzNGEwMDkzOTVmZTE3Y2VkYzE0NWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YTJmNjAwMjQ0NTc0N2JlYjQzN2M2NDRmNGFkY2NlYyA9ICQoJzxkaXYgaWQ9Imh0bWxfOGEyZjYwMDI0NDU3NDdiZWI0MzdjNjQ0ZjRhZGNjZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTI2MDkuMCwgaW5qID05LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QxZGM3NTdjYjI5MzRhMDA5Mzk1ZmUxN2NlZGMxNDVmLnNldENvbnRlbnQoaHRtbF84YTJmNjAwMjQ0NTc0N2JlYjQzN2M2NDRmNGFkY2NlYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q1Y2Q1ZmRkMDZhMzQ5ZjZiMTkwZjhmYzU2ZTM0NDNlLmJpbmRQb3B1cChwb3B1cF9kMWRjNzU3Y2IyOTM0YTAwOTM5NWZlMTdjZWRjMTQ1ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzE5NWE4ZjVmNDY4NjQ1NWU4OTdjZmIzOGVhMzk5MzUzID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MDAxMDQ5OTk4MzEzLCAtNzMuOTQ3MjQ4MDAwMDM3NDVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTMwMzFlYzEwNmJmNGZiOWI0M2IzOThjZGVkM2Y1MTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZDkxZmNiM2U2OWY0YzcxYmQ3OWVkNzk4YmNkMjhkOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMGQ5MWZjYjNlNjlmNGM3MWJkNzllZDc5OGJjZDI4ZDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTI2MTIuMCwgaW5qID0xMi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MzAzMWVjMTA2YmY0ZmI5YjQzYjM5OGNkZWQzZjUxNS5zZXRDb250ZW50KGh0bWxfMGQ5MWZjYjNlNjlmNGM3MWJkNzllZDc5OGJjZDI4ZDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xOTVhOGY1ZjQ2ODY0NTVlODk3Y2ZiMzhlYTM5OTM1My5iaW5kUG9wdXAocG9wdXBfNTMwMzFlYzEwNmJmNGZiOWI0M2IzOThjZGVkM2Y1MTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8wNjVjZDkwMmYzNTE0NWM2YWRlOTdlZjM1YmMyYTY5ZCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjk5MTkyOTk5OTYzNzYsIC03My45NTUxODQwMDAyMjE5Ml0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OTI5MmNiNTQxNWU0MjQ2YmUyYzM5ZWRlYmEzZGIzZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JjMWYxMjU3ZDk3MTQzOGZiNzIzODFlMGM1MTcwNzJkID0gJCgnPGRpdiBpZD0iaHRtbF9iYzFmMTI1N2Q5NzE0MzhmYjcyMzgxZTBjNTE3MDcyZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjYxMy4wLCBpbmogPTguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzkyOTJjYjU0MTVlNDI0NmJlMmMzOWVkZWJhM2RiM2Quc2V0Q29udGVudChodG1sX2JjMWYxMjU3ZDk3MTQzOGZiNzIzODFlMGM1MTcwNzJkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDY1Y2Q5MDJmMzUxNDVjNmFkZTk3ZWYzNWJjMmE2OWQuYmluZFBvcHVwKHBvcHVwXzc5MjkyY2I1NDE1ZTQyNDZiZTJjMzllZGViYTNkYjNkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMjkxNDBjZGI2ODc2NDRkNWJlNzk1YTM3NjBkN2NlZGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjcwMjY3Mzk5OTg2MzUzLCAtNzMuOTMzOTUxMDAwMzQ5MTFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTI1YzkyMzhhM2FmNGIxNDhmZDA5ODc0YjIzMGJhMTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZGU5ZTNjNmY5Njk0NDJmYTM0NmNkZWZmYjM2MjdlYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNWRlOWUzYzZmOTY5NDQyZmEzNDZjZGVmZmIzNjI3ZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTI2MTQuMCwgaW5qID05LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyNWM5MjM4YTNhZjRiMTQ4ZmQwOTg3NGIyMzBiYTEwLnNldENvbnRlbnQoaHRtbF81ZGU5ZTNjNmY5Njk0NDJmYTM0NmNkZWZmYjM2MjdlYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI5MTQwY2RiNjg3NjQ0ZDViZTc5NWEzNzYwZDdjZWRiLmJpbmRQb3B1cChwb3B1cF81MjVjOTIzOGEzYWY0YjE0OGZkMDk4NzRiMjMwYmExMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzQ0MjljOWM2ZDZmNTQwN2NiNjE2YTVjNGRjNDM0NWQ0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42OTgwMDM5OTk5OTUyOTQsIC03My45NzQ3ODYwMDAwNTUyNl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYmNmMmY4NWYzOWU0YzczYjlkNmMxOWQxOTZjMzk3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5MjY4ODQ2ODBkNDRmZDhhYzIzNTRmNDdjZmU3NTY3ID0gJCgnPGRpdiBpZD0iaHRtbF9kOTI2ODg0NjgwZDQ0ZmQ4YWMyMzU0ZjQ3Y2ZlNzU2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjYxNS4wLCBpbmogPTguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWJjZjJmODVmMzllNGM3M2I5ZDZjMTlkMTk2YzM5N2Euc2V0Q29udGVudChodG1sX2Q5MjY4ODQ2ODBkNDRmZDhhYzIzNTRmNDdjZmU3NTY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDQyOWM5YzZkNmY1NDA3Y2I2MTZhNWM0ZGM0MzQ1ZDQuYmluZFBvcHVwKHBvcHVwXzFiY2YyZjg1ZjM5ZTRjNzNiOWQ2YzE5ZDE5NmMzOTdhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMjc1MTE3MjVhYjk0NDk4NDg4YWQ1ZDQ3M2U2YjdiMzcgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjcyMTAzMDk5OTkwMjg1LCAtNzMuOTA0MDk2MDAxMzQ3MTZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjE0ZTQ3MGZlYTdiNDlmOWFmYTQxZTAzMTJmMmEzOTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYWQ3OGEzNWEyYzU0YTM3YmJmN2M2NDg2ZjI4YzUyZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWFkNzhhMzVhMmM1NGEzN2JiZjdjNjQ4NmYyOGM1MmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTI2NDUuMCwgaW5qID0xMi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTRlNDcwZmVhN2I0OWY5YWZhNDFlMDMxMmYyYTM5OC5zZXRDb250ZW50KGh0bWxfMWFkNzhhMzVhMmM1NGEzN2JiZjdjNjQ4NmYyOGM1MmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNzUxMTcyNWFiOTQ0OTg0ODhhZDVkNDczZTZiN2IzNy5iaW5kUG9wdXAocG9wdXBfYjE0ZTQ3MGZlYTdiNDlmOWFmYTQxZTAzMTJmMmEzOTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8wMDBiZTE1NDBjMTY0ZTVlYmEzYjg1ZWRhODgzOTE0ZSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNzAxOTEwOTk5OTUzNDUsIC03My45MTIwNjMwMDA0NzAwMV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZTRiMTk1MWNlZmQ0YTZlOWU0MDExOTFmNGZjOTNiNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M4NTRmOWVjYWMwODRlNDY4YzY0NWE0NTc0NmJlYWI4ID0gJCgnPGRpdiBpZD0iaHRtbF9jODU0ZjllY2FjMDg0ZTQ2OGM2NDVhNDU3NDZiZWFiOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MjY3NS4wLCBpbmogPTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWU0YjE5NTFjZWZkNGE2ZTllNDAxMTkxZjRmYzkzYjQuc2V0Q29udGVudChodG1sX2M4NTRmOWVjYWMwODRlNDY4YzY0NWE0NTc0NmJlYWI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDAwYmUxNTQwYzE2NGU1ZWJhM2I4NWVkYTg4MzkxNGUuYmluZFBvcHVwKHBvcHVwXzFlNGIxOTUxY2VmZDRhNmU5ZTQwMTE5MWY0ZmM5M2I0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYjc3ZDM4MzUzOWFlNDEzNDllNzg1OGEyNmQ5ZGZiMjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY4NDE2ODk5OTk2NDMzLCAtNzMuOTI5MzA5MDAxNDc3NDZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWM5ZGZmM2E4YjdjNGI4ZTlkZDU3MjA4NTYxNDMwNmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYzk2NmEzMGNmOTM0MWI5ODAzZTI5NjI5ZjFiYmMzMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMGM5NjZhMzBjZjkzNDFiOTgwM2UyOTYyOWYxYmJjMzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTI3MTIuMCwgaW5qID0yMi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYzlkZmYzYThiN2M0YjhlOWRkNTcyMDg1NjE0MzA2ZC5zZXRDb250ZW50KGh0bWxfMGM5NjZhMzBjZjkzNDFiOTgwM2UyOTYyOWYxYmJjMzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNzdkMzgzNTM5YWU0MTM0OWU3ODU4YTI2ZDlkZmIyNy5iaW5kUG9wdXAocG9wdXBfMWM5ZGZmM2E4YjdjNGI4ZTlkZDU3MjA4NTYxNDMwNmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl81YmRmNDQ3MmEzOGM0NWM3YTdiZWZlM2E2MzliNWNlZiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNTc2NjYzOTk5OTk0NzcsIC03My45NjU4MzEwMDAzNTk4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EwZWZhNjJmNWY3YzQxNzNiYTQ2NzNmOGQzMDA0NjhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDcxY2I2YzhlOTlkNDk1ZGFkNWM4YzI5MTk1ODhiOTUgPSAkKCc8ZGl2IGlkPSJodG1sXzA3MWNiNmM4ZTk5ZDQ5NWRhZDVjOGMyOTE5NTg4Yjk1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0yNzk1LjAsIGluaiA9MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMGVmYTYyZjVmN2M0MTczYmE0NjczZjhkMzAwNDY4Yy5zZXRDb250ZW50KGh0bWxfMDcxY2I2YzhlOTlkNDk1ZGFkNWM4YzI5MTk1ODhiOTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81YmRmNDQ3MmEzOGM0NWM3YTdiZWZlM2E2MzliNWNlZi5iaW5kUG9wdXAocG9wdXBfYTBlZmE2MmY1ZjdjNDE3M2JhNDY3M2Y4ZDMwMDQ2OGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9iYTdlNmRiMTYzODA0NzZmYjc3NWU1OTEwZGMyYTBhNyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjc4NDI2OTk5OTI4OTQsIC03My45MTM1NTkwMDAyOTc1OF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NDJlZDhmNjcwNWE0Y2Q0OTI0YWIxMGRkMTU1NDlmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E1Nzk0ZWZiMzg5MDQzZGI5MTY1NWFiOWJhNzFhYzY0ID0gJCgnPGRpdiBpZD0iaHRtbF9hNTc5NGVmYjM4OTA0M2RiOTE2NTVhYjliYTcxYWM2NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9Mjg1OC4wLCBpbmogPTI2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0MmVkOGY2NzA1YTRjZDQ5MjRhYjEwZGQxNTU0OWY3LnNldENvbnRlbnQoaHRtbF9hNTc5NGVmYjM4OTA0M2RiOTE2NTVhYjliYTcxYWM2NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JhN2U2ZGIxNjM4MDQ3NmZiNzc1ZTU5MTBkYzJhMGE3LmJpbmRQb3B1cChwb3B1cF82NDJlZDhmNjcwNWE0Y2Q0OTI0YWIxMGRkMTU1NDlmNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzJlNmEzNjlkOWE0YjQwODk4MmIwMjEwYWU5MDVkZGNhID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42NjI5MDE5OTk5NTgyNSwgLTczLjc2ODM2NzAwMDI4ODc5XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EyZmM3OGJjMWFjYTRlMThhMTczZjJjNDBmMTQ0YmIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmQwZjAxNTkxZjIyNGQwZjk0OTM4YmYwODk3N2EyYjAgPSAkKCc8ZGl2IGlkPSJodG1sX2ZkMGYwMTU5MWYyMjRkMGY5NDkzOGJmMDg5NzdhMmIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0zMjMwLjAsIGluaiA9NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMmZjNzhiYzFhY2E0ZTE4YTE3M2YyYzQwZjE0NGJiMS5zZXRDb250ZW50KGh0bWxfZmQwZjAxNTkxZjIyNGQwZjk0OTM4YmYwODk3N2EyYjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZTZhMzY5ZDlhNGI0MDg5ODJiMDIxMGFlOTA1ZGRjYS5iaW5kUG9wdXAocG9wdXBfYTJmYzc4YmMxYWNhNGUxOGExNzNmMmM0MGYxNDRiYjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9lYWRjMzRkNTQ2M2M0ZDAwODI2YmNhZmQ3MmM1NThjZCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjM1OTU1OTk5ODE5NDksIC03NC4xMTYxMTQwMDAwMzg1OV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMzNkN2M3NWJjNzI0NjcxYjc1OTU4YjFhOGM3ODFmZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4YjJjYWU5NTE1NjQwNTNiZmZiODczNjBlYjRlMzY2ID0gJCgnPGRpdiBpZD0iaHRtbF9iOGIyY2FlOTUxNTY0MDUzYmZmYjg3MzYwZWI0ZTM2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MzU5OS4wLCBpbmogPTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjMzZDdjNzViYzcyNDY3MWI3NTk1OGIxYThjNzgxZmQuc2V0Q29udGVudChodG1sX2I4YjJjYWU5NTE1NjQwNTNiZmZiODczNjBlYjRlMzY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWFkYzM0ZDU0NjNjNGQwMDgyNmJjYWZkNzJjNTU4Y2QuYmluZFBvcHVwKHBvcHVwX2YzM2Q3Yzc1YmM3MjQ2NzFiNzU5NThiMWE4Yzc4MWZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMGE0MzU0MmExNGIzNDdhMWFjY2JmNGY5N2NjYTc5N2IgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY3NjQ5NDk5OTkzNjQyLCAtNzMuOTEzNjk2MDAyOTc5NzZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTUzMWEwMTFkZjNhNGRiOGFkMzcyYTA3NjZhNTgzMjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZGUwMTcwMTI2MTQ0NjhkYTdiNDFhNGE1Y2YzOGVmNiA9ICQoJzxkaXYgaWQ9Imh0bWxfMmRlMDE3MDEyNjE0NDY4ZGE3YjQxYTRhNWNmMzhlZjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTM4MzcuMCwgaW5qID02My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNTMxYTAxMWRmM2E0ZGI4YWQzNzJhMDc2NmE1ODMyNC5zZXRDb250ZW50KGh0bWxfMmRlMDE3MDEyNjE0NDY4ZGE3YjQxYTRhNWNmMzhlZjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wYTQzNTQyYTE0YjM0N2ExYWNjYmY0Zjk3Y2NhNzk3Yi5iaW5kUG9wdXAocG9wdXBfMTUzMWEwMTFkZjNhNGRiOGFkMzcyYTA3NjZhNTgzMjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8zMmQ0OTliZTI3YjI0NTlkYTBmZjBlYTVjYWUzYWJjMCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjY5MjYzOTk5NzM1NzU1LCAtNzMuOTEzNTU1MDAzNTg1NDldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTgwMmM2NTEyMWFjNDU3NTg3ZjM2NDM4MmNiMzUwNTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wN2E4MGNiMmM3MTA0ZWZmYjc1NzU4M2I3YzE3NTQyZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDdhODBjYjJjNzEwNGVmZmI3NTc1ODNiN2MxNzU0MmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTM4NDYuMCwgaW5qID0xOS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xODAyYzY1MTIxYWM0NTc1ODdmMzY0MzgyY2IzNTA1Ny5zZXRDb250ZW50KGh0bWxfMDdhODBjYjJjNzEwNGVmZmI3NTc1ODNiN2MxNzU0MmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zMmQ0OTliZTI3YjI0NTlkYTBmZjBlYTVjYWUzYWJjMC5iaW5kUG9wdXAocG9wdXBfMTgwMmM2NTEyMWFjNDU3NTg3ZjM2NDM4MmNiMzUwNTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl84NzExNTlmOGMwNjY0NzI0ODNjMWQyODgzNjBmNzY2OSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjg5NzU1OTk5NzY4MjUsIC03My45MzkzODkwMDExNzQwNF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYjI0YzhjZDUzMTE0MmMzOGY5YjI4MzU1ZmZiNzJjNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI0OTM3ZWM1MGZjZTQ3Yzc4MGEyODRiNjU1M2MzZDU4ID0gJCgnPGRpdiBpZD0iaHRtbF8yNDkzN2VjNTBmY2U0N2M3ODBhMjg0YjY1NTNjM2Q1OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9Mzg4Ny4wLCBpbmogPTEzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JiMjRjOGNkNTMxMTQyYzM4ZjliMjgzNTVmZmI3MmM2LnNldENvbnRlbnQoaHRtbF8yNDkzN2VjNTBmY2U0N2M3ODBhMjg0YjY1NTNjM2Q1OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg3MTE1OWY4YzA2NjQ3MjQ4M2MxZDI4ODM2MGY3NjY5LmJpbmRQb3B1cChwb3B1cF9iYjI0YzhjZDUzMTE0MmMzOGY5YjI4MzU1ZmZiNzJjNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzBiZjUwYjM1MmEyMjQ4YWI4MzE2YmE2NGVhMDA5ZDUyID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42OTQxNDc5OTk5NjgzNywgLTczLjk0MDI2NTAwMzE2NjY3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRhMmYxMzFkZDBiODRhYzVhYzQ5OTc0ODA4MTljZGZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDdlYmUyM2MyODFlNGQwMmI0YzBhNTM5MzE4YjljYmMgPSAkKCc8ZGl2IGlkPSJodG1sX2Q3ZWJlMjNjMjgxZTRkMDJiNGMwYTUzOTMxOGI5Y2JjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0zODg4LjAsIGluaiA9My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YTJmMTMxZGQwYjg0YWM1YWM0OTk3NDgwODE5Y2RmZC5zZXRDb250ZW50KGh0bWxfZDdlYmUyM2MyODFlNGQwMmI0YzBhNTM5MzE4YjljYmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wYmY1MGIzNTJhMjI0OGFiODMxNmJhNjRlYTAwOWQ1Mi5iaW5kUG9wdXAocG9wdXBfNGEyZjEzMWRkMGI4NGFjNWFjNDk5NzQ4MDgxOWNkZmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8zNTBkYzViNGNiMjA0YmU4YWQ3MTJiY2M2YTVkMzlkNCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjk4NTQwOTk5OTExNDgsIC03My45NDExNTAwMDIxODUwM10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YjU5N2U5MjBkMGE0NDE4OTRiNWZkOTNlYjkyMzNhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0NmIwMjE2MzJkNTQ4YTRhOTM3ZjIwNDBjNGFhODViID0gJCgnPGRpdiBpZD0iaHRtbF9hNDZiMDIxNjMyZDU0OGE0YTkzN2YyMDQwYzRhYTg1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9Mzg4OS4wLCBpbmogPTE2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiNTk3ZTkyMGQwYTQ0MTg5NGI1ZmQ5M2ViOTIzM2E2LnNldENvbnRlbnQoaHRtbF9hNDZiMDIxNjMyZDU0OGE0YTkzN2YyMDQwYzRhYTg1Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM1MGRjNWI0Y2IyMDRiZThhZDcxMmJjYzZhNWQzOWQ0LmJpbmRQb3B1cChwb3B1cF84YjU5N2U5MjBkMGE0NDE4OTRiNWZkOTNlYjkyMzNhNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2RiN2I4ZTNjMzNjZjQ2ZTdiNDFmZTA1MTc1ZGEyMDBmID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42ODI0MjY5OTk5MzE0LCAtNzMuOTM3OTMzMDAwMzM3MDhdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmIxMWUxNTUzYmJjNGFkZjhiYzVhOWFmMTM2MDM0Y2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wODljZjY4NGViYzQ0MWI4OGZmODYxZDExZDFlNTE2NiA9ICQoJzxkaXYgaWQ9Imh0bWxfMDg5Y2Y2ODRlYmM0NDFiODhmZjg2MWQxMWQxZTUxNjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTM4OTAuMCwgaW5qID0xNi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYjExZTE1NTNiYmM0YWRmOGJjNWE5YWYxMzYwMzRjZS5zZXRDb250ZW50KGh0bWxfMDg5Y2Y2ODRlYmM0NDFiODhmZjg2MWQxMWQxZTUxNjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kYjdiOGUzYzMzY2Y0NmU3YjQxZmUwNTE3NWRhMjAwZi5iaW5kUG9wdXAocG9wdXBfZmIxMWUxNTUzYmJjNGFkZjhiYzVhOWFmMTM2MDM0Y2UpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8yY2UzM2JkNGFiMGU0NTE2YTUzZTZmNmQ5ZGUwNjEzNiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjkyNjgyOTk5ODY0MjUsIC03My45Mzk5NzEwMDEyMzkxNl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OGQyYTdhMGI5NTU0NzMzOTk3N2M2MDE4NTMzZTFhZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YzNWQ5OWVkZGFkZDRlODZhNTQ1NzU0ZWZiZjFjYTdiID0gJCgnPGRpdiBpZD0iaHRtbF9mMzVkOTllZGRhZGQ0ZTg2YTU0NTc1NGVmYmYxY2E3YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9Mzg5MS4wLCBpbmogPTI5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4ZDJhN2EwYjk1NTQ3MzM5OTc3YzYwMTg1MzNlMWFkLnNldENvbnRlbnQoaHRtbF9mMzVkOTllZGRhZGQ0ZTg2YTU0NTc1NGVmYmYxY2E3Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJjZTMzYmQ0YWIwZTQ1MTZhNTNlNmY2ZDlkZTA2MTM2LmJpbmRQb3B1cChwb3B1cF83OGQyYTdhMGI5NTU0NzMzOTk3N2M2MDE4NTMzZTFhZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2JkOTI4ODA1ZWEzNzRjNzliZmQ3OWQ2ODJmOGIyZjQzID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42Nzk3Mjk5OTk3NDkwNCwgLTczLjkzNzM5ODAwMjIzNDkzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JjODJkYjM5ZmFmNTRiZThiZTg1MmZiMjNmM2I0YzVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTc0OGJmMjc2Mzk4NDFlNGIyOTEwNDljZjEwNzU5YTIgPSAkKCc8ZGl2IGlkPSJodG1sXzk3NDhiZjI3NjM5ODQxZTRiMjkxMDQ5Y2YxMDc1OWEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0zODkzLjAsIGluaiA9MjMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmM4MmRiMzlmYWY1NGJlOGJlODUyZmIyM2YzYjRjNWUuc2V0Q29udGVudChodG1sXzk3NDhiZjI3NjM5ODQxZTRiMjkxMDQ5Y2YxMDc1OWEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmQ5Mjg4MDVlYTM3NGM3OWJmZDc5ZDY4MmY4YjJmNDMuYmluZFBvcHVwKHBvcHVwX2JjODJkYjM5ZmFmNTRiZThiZTg1MmZiMjNmM2I0YzVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMzRiYjQwZTQ3MDk0NDYxYzg1MTFmOTk0NjI0OTExMmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY4MzE2MDk5OTg4MzE2NCwgLTczLjkzODA3NzAwMDM2MjYxXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q4Njk0NzlhZDBmZTQxZjk5MDgxMDE2NGExMGFlODVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjI2NGYxNjkwNWJjNDFlMzg3NzZiZDI1MDFiY2JiZjkgPSAkKCc8ZGl2IGlkPSJodG1sXzYyNjRmMTY5MDViYzQxZTM4Nzc2YmQyNTAxYmNiYmY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0zODk0LjAsIGluaiA9MjcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDg2OTQ3OWFkMGZlNDFmOTkwODEwMTY0YTEwYWU4NWMuc2V0Q29udGVudChodG1sXzYyNjRmMTY5MDViYzQxZTM4Nzc2YmQyNTAxYmNiYmY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzRiYjQwZTQ3MDk0NDYxYzg1MTFmOTk0NjI0OTExMmEuYmluZFBvcHVwKHBvcHVwX2Q4Njk0NzlhZDBmZTQxZjk5MDgxMDE2NGExMGFlODVjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMmNlNmM3OWY1MWExNGU2MTljN2Q3ZWQ3ZjE2OWZmYWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY4NjgyNDk5OTgyNTEzLCAtNzMuOTM4ODA1MDAwNTk4NF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NTBkMTI4ZTI5MGQ0MzIwYTY0NjFkMWY3YzY5NTY3OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5ZTdlZGI0NmIwYTQ0YjNiYjQyNzM2M2EzMWZjOTRhID0gJCgnPGRpdiBpZD0iaHRtbF9mOWU3ZWRiNDZiMGE0NGIzYmI0MjczNjNhMzFmYzk0YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9Mzg5NS4wLCBpbmogPTEyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc1MGQxMjhlMjkwZDQzMjBhNjQ2MWQxZjdjNjk1Njc4LnNldENvbnRlbnQoaHRtbF9mOWU3ZWRiNDZiMGE0NGIzYmI0MjczNjNhMzFmYzk0YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJjZTZjNzlmNTFhMTRlNjE5YzdkN2VkN2YxNjlmZmFiLmJpbmRQb3B1cChwb3B1cF83NTBkMTI4ZTI5MGQ0MzIwYTY0NjFkMWY3YzY5NTY3OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2RiYmM5ZmEwZGU5ZjQ5OWM5N2QzNTIwZDY5MThlMjQ2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42OTYzNTM5OTk4NzEyMywgLTczLjk0MDcwNTAwMjE1MjUzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxMDJiYzdjMzc3YjQzZWE5ZWNlNWEyODgzMmY3Njk4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmQxNjM1MWYyYzU1NDRiMjljMDM4ZTJlM2FkNGE3MDYgPSAkKCc8ZGl2IGlkPSJodG1sX2JkMTYzNTFmMmM1NTQ0YjI5YzAzOGUyZTNhZDRhNzA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0zODk2LjAsIGluaiA9MjguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTEwMmJjN2MzNzdiNDNlYTllY2U1YTI4ODMyZjc2OTguc2V0Q29udGVudChodG1sX2JkMTYzNTFmMmM1NTQ0YjI5YzAzOGUyZTNhZDRhNzA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGJiYzlmYTBkZTlmNDk5Yzk3ZDM1MjBkNjkxOGUyNDYuYmluZFBvcHVwKHBvcHVwXzUxMDJiYzdjMzc3YjQzZWE5ZWNlNWEyODgzMmY3Njk4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNTliMmJhMWVlMTI4NDM1NmE3N2YyYTY0NjBmZmJkYmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY4NTM1Nzk5OTkzMTc0LCAtNzMuOTM4NTE1MDAyMjU1MV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83M2Q5NWZlN2I4MWQ0OGI4YjE0MmM0ODgwNTIxZjI1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0NGRkN2E4NTBmMTQzZDc4N2FhZmFjMTQ1ZDZiMDhiID0gJCgnPGRpdiBpZD0iaHRtbF83NDRkZDdhODUwZjE0M2Q3ODdhYWZhYzE0NWQ2YjA4YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9Mzg5Ny4wLCBpbmogPTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzNkOTVmZTdiODFkNDhiOGIxNDJjNDg4MDUyMWYyNWEuc2V0Q29udGVudChodG1sXzc0NGRkN2E4NTBmMTQzZDc4N2FhZmFjMTQ1ZDZiMDhiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTliMmJhMWVlMTI4NDM1NmE3N2YyYTY0NjBmZmJkYmIuYmluZFBvcHVwKHBvcHVwXzczZDk1ZmU3YjgxZDQ4YjhiMTQyYzQ4ODA1MjFmMjVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZmEwNTk2Njc5Yjk3NDEyZWEzNTE0ZGU1ZWQwODA2YmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY4ODI4ODk5OTczODM1LCAtNzMuOTM5MDk3MDAxMjQ3ODddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDlkMGY2NWE4YTI4NDNlZThkMzUxNzdhYzM1NWUxN2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MTg3YjUyZGFkODU0NzllYWM2NTA4MzIzODYzYTg0NSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzE4N2I1MmRhZDg1NDc5ZWFjNjUwODMyMzg2M2E4NDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTM4OTguMCwgaW5qID0xNS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wOWQwZjY1YThhMjg0M2VlOGQzNTE3N2FjMzU1ZTE3ZC5zZXRDb250ZW50KGh0bWxfNzE4N2I1MmRhZDg1NDc5ZWFjNjUwODMyMzg2M2E4NDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mYTA1OTY2NzliOTc0MTJlYTM1MTRkZTVlZDA4MDZiYi5iaW5kUG9wdXAocG9wdXBfMDlkMGY2NWE4YTI4NDNlZThkMzUxNzdhYzM1NWUxN2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl84M2YyMzNmMTE4ODE0NmQ1YmJiMTEyY2I1ODg3NTM1OSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNzAwMjgwOTk5Nzk4MDEsIC03My45NDExNDkwMDM1ODE1N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNWIwOThlZTFiNmE0YmUwOTVlMGIxM2MyOGRmOWU2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFlMzkzYTg3OWM3NTRiNjE5MDA1YTYzMmJjNTljOTU3ID0gJCgnPGRpdiBpZD0iaHRtbF8xZTM5M2E4NzljNzU0YjYxOTAwNWE2MzJiYzU5Yzk1NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9Mzg5OS4wLCBpbmogPTQ1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M1YjA5OGVlMWI2YTRiZTA5NWUwYjEzYzI4ZGY5ZTZlLnNldENvbnRlbnQoaHRtbF8xZTM5M2E4NzljNzU0YjYxOTAwNWE2MzJiYzU5Yzk1Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzgzZjIzM2YxMTg4MTQ2ZDViYmIxMTJjYjU4ODc1MzU5LmJpbmRQb3B1cChwb3B1cF9jNWIwOThlZTFiNmE0YmUwOTVlMGIxM2MyOGRmOWU2ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzVkZjU2ZmEzYmFiMzQ3ODJhNzk2YjcxMjNmZGY4ZGQ5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42ODA5NjI5OTk4MTMzOCwgLTczLjkzNzY0MjAwMjczNzRdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzEzNzBiYmJmMDQ5NGRiOGJlMmVkYmE1NGE0NmJhNmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hODRkZTc3YTAzNjM0ZjcyYmJjOGQ2YmU3YmZjMDM3MyA9ICQoJzxkaXYgaWQ9Imh0bWxfYTg0ZGU3N2EwMzYzNGY3MmJiYzhkNmJlN2JmYzAzNzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTM5MDEuMCwgaW5qID03LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcxMzcwYmJiZjA0OTRkYjhiZTJlZGJhNTRhNDZiYTZjLnNldENvbnRlbnQoaHRtbF9hODRkZTc3YTAzNjM0ZjcyYmJjOGQ2YmU3YmZjMDM3Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVkZjU2ZmEzYmFiMzQ3ODJhNzk2YjcxMjNmZGY4ZGQ5LmJpbmRQb3B1cChwb3B1cF83MTM3MGJiYmYwNDk0ZGI4YmUyZWRiYTU0YTQ2YmE2YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2FmZTU4NWVlNWRhZjRkMWU5ZjgxODNmYTMzYWY1YTlmID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42ODM4OTM5OTk5MTcxOCwgLTczLjkzODIyMzAwMTk3NjddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmNmZmE0MjJlMjIyNDM5MDlkZjI5NWQwZTMxYzZmZjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wY2JiODUxNjM3NWU0M2Q5ODM3MGI0YzE2NDNjYzFiMSA9ICQoJzxkaXYgaWQ9Imh0bWxfMGNiYjg1MTYzNzVlNDNkOTgzNzBiNGMxNjQzY2MxYjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTM5MDIuMCwgaW5qID0xMS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yY2ZmYTQyMmUyMjI0MzkwOWRmMjk1ZDBlMzFjNmZmMi5zZXRDb250ZW50KGh0bWxfMGNiYjg1MTYzNzVlNDNkOTgzNzBiNGMxNjQzY2MxYjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZmU1ODVlZTVkYWY0ZDFlOWY4MTgzZmEzM2FmNWE5Zi5iaW5kUG9wdXAocG9wdXBfMmNmZmE0MjJlMjIyNDM5MDlkZjI5NWQwZTMxYzZmZjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9kZjJmMWEzNjJlZGE0YjQ3OWY3ZWU5YTc3NThmMDk0NCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjg2MDkwOTk5Nzg1Mjg2LCAtNzMuOTM4NjU5MDAxNTEyODNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2I3M2UxZDdlZDY2NGNjMmE2NmY2YTljYjYwMjRjNzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZjY2ZTg5YjE3NTY0NmJhYjdhNWQwOWRkODJlOTE1NCA9ICQoJzxkaXYgaWQ9Imh0bWxfYmY2NmU4OWIxNzU2NDZiYWI3YTVkMDlkZDgyZTkxNTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTM5MDQuMCwgaW5qID0xNC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYjczZTFkN2VkNjY0Y2MyYTY2ZjZhOWNiNjAyNGM3OC5zZXRDb250ZW50KGh0bWxfYmY2NmU4OWIxNzU2NDZiYWI3YTVkMDlkZDgyZTkxNTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZjJmMWEzNjJlZGE0YjQ3OWY3ZWU5YTc3NThmMDk0NC5iaW5kUG9wdXAocG9wdXBfM2I3M2UxZDdlZDY2NGNjMmE2NmY2YTljYjYwMjRjNzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl81OTg0MzllMzJhM2Q0ODIyODY0OTNiYzExYzU3ZDk5OSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjkzNDE1OTk5ODY2MzQsIC03My45NDAxMTgwMDAxMzkwNF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNTRjNTYwNTVmNzI0OTUyYWEyYWQ5YjBmNzE3N2U4NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlhZTFhMzdkMWFjNDQ5ZGI5Y2MxMDIxYTQ0NTY5OGMwID0gJCgnPGRpdiBpZD0iaHRtbF85YWUxYTM3ZDFhYzQ0OWRiOWNjMTAyMWE0NDU2OThjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MzkwNS4wLCBpbmogPTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTU0YzU2MDU1ZjcyNDk1MmFhMmFkOWIwZjcxNzdlODcuc2V0Q29udGVudChodG1sXzlhZTFhMzdkMWFjNDQ5ZGI5Y2MxMDIxYTQ0NTY5OGMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTk4NDM5ZTMyYTNkNDgyMjg2NDkzYmMxMWM1N2Q5OTkuYmluZFBvcHVwKHBvcHVwXzE1NGM1NjA1NWY3MjQ5NTJhYTJhZDliMGY3MTc3ZTg3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMzdmNDFkZTRiMGZlNDgzNWE2M2IzZTQ1ZWJiOWZhYmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY4NDYyNTk5OTc4OTc0NSwgLTczLjkzODM2ODAwMTc1NjMyXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZhNmU4NWVlNTNiOTRlMzA4YTk3N2EyZjA2MGNhYjQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBiYTY0MTg1YmI4NGQ2YjkxMmRkMjgzODhiOTllNDYgPSAkKCc8ZGl2IGlkPSJodG1sX2UwYmE2NDE4NWJiODRkNmI5MTJkZDI4Mzg4Yjk5ZTQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0zOTA3LjAsIGluaiA9MjUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmE2ZTg1ZWU1M2I5NGUzMDhhOTc3YTJmMDYwY2FiNDQuc2V0Q29udGVudChodG1sX2UwYmE2NDE4NWJiODRkNmI5MTJkZDI4Mzg4Yjk5ZTQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzdmNDFkZTRiMGZlNDgzNWE2M2IzZTQ1ZWJiOWZhYmIuYmluZFBvcHVwKHBvcHVwXzZhNmU4NWVlNTNiOTRlMzA4YTk3N2EyZjA2MGNhYjQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMGUzMWJmMmM3MWIyNDBhN2I4ZWY3MTYxM2FlMGRkNzMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY5MTIxODk5OTkyNjY3NiwgLTczLjkzOTY4MTAwMzE0MjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOThjODllNmJjZDdkNGI3N2EzNDc1MmRhZTQ3ZDQ3MzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YmE4MzgzMTc5ZTM0ODY0OWVlNzdhOTVkNzE0ZDFiNSA9ICQoJzxkaXYgaWQ9Imh0bWxfOGJhODM4MzE3OWUzNDg2NDllZTc3YTk1ZDcxNGQxYjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTM5MDguMCwgaW5qID0yMS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OGM4OWU2YmNkN2Q0Yjc3YTM0NzUyZGFlNDdkNDczNS5zZXRDb250ZW50KGh0bWxfOGJhODM4MzE3OWUzNDg2NDllZTc3YTk1ZDcxNGQxYjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wZTMxYmYyYzcxYjI0MGE3YjhlZjcxNjEzYWUwZGQ3My5iaW5kUG9wdXAocG9wdXBfOThjODllNmJjZDdkNGI3N2EzNDc1MmRhZTQ3ZDQ3MzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9iZjlmMzMwNDk2MjQ0ZTBiOTgwNWJlZmJlOTc3YmQyYyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjg5MDIyOTk5ODQxMiwgLTczLjkzOTI0MzAwMjc1NTE4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg2MDc4NGQwOGQ5NjRlODA5YWFlMTM1ZjVjNDIwYmIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBkNDNlZTM5YzMyNDZiZGIyODQxNWJmNWUyNjRlNDIgPSAkKCc8ZGl2IGlkPSJodG1sX2UwZDQzZWUzOWMzMjQ2YmRiMjg0MTViZjVlMjY0ZTQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0zOTA5LjAsIGluaiA9MjEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODYwNzg0ZDA4ZDk2NGU4MDlhYWUxMzVmNWM0MjBiYjIuc2V0Q29udGVudChodG1sX2UwZDQzZWUzOWMzMjQ2YmRiMjg0MTViZjVlMjY0ZTQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmY5ZjMzMDQ5NjI0NGUwYjk4MDViZWZiZTk3N2JkMmMuYmluZFBvcHVwKHBvcHVwXzg2MDc4NGQwOGQ5NjRlODA5YWFlMTM1ZjVjNDIwYmIyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYmQxMTM0ZGQwMTViNGRiMWJjM2EyNWZlY2NlM2Y3YjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY5MDQ4NDk5OTgwOTk0LCAtNzMuOTM5NTMzMDAxNTI4MjNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTFiYjUxNWRjYTg4NGNkNTg3ODMxZmQwMmM4YjAyYjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMGI4YzYxZTllY2Q0NmM1ODMzMzhmZmZiZjhkYjk4OSA9ICQoJzxkaXYgaWQ9Imh0bWxfYjBiOGM2MWU5ZWNkNDZjNTgzMzM4ZmZmYmY4ZGI5ODkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTM5MTAuMCwgaW5qID05LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUxYmI1MTVkY2E4ODRjZDU4NzgzMWZkMDJjOGIwMmI1LnNldENvbnRlbnQoaHRtbF9iMGI4YzYxZTllY2Q0NmM1ODMzMzhmZmZiZjhkYjk4OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JkMTEzNGRkMDE1YjRkYjFiYzNhMjVmZWNjZTNmN2IyLmJpbmRQb3B1cChwb3B1cF81MWJiNTE1ZGNhODg0Y2Q1ODc4MzFmZDAyYzhiMDJiNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzdhNzQyOTgxMDRjNTRkNjZhOTAyMjQzYWFmOTc2NWZiID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42OTQ4ODA5OTk3NjE2NywgLTczLjk0MDQxMTAwMjQwNTQxXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk2Nzc0ZDQ3Yjc2MjQ4OTNhY2EyYjFiNmFhY2RkYmI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWRmMjZkZmFkNTNjNDg4YWExOGUyOGNmMGFmNWZmYzQgPSAkKCc8ZGl2IGlkPSJodG1sXzVkZjI2ZGZhZDUzYzQ4OGFhMThlMjhjZjBhZjVmZmM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0zOTExLjAsIGluaiA9MTkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTY3NzRkNDdiNzYyNDg5M2FjYTJiMWI2YWFjZGRiYjguc2V0Q29udGVudChodG1sXzVkZjI2ZGZhZDUzYzQ4OGFhMThlMjhjZjBhZjVmZmM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2E3NDI5ODEwNGM1NGQ2NmE5MDIyNDNhYWY5NzY1ZmIuYmluZFBvcHVwKHBvcHVwXzk2Nzc0ZDQ3Yjc2MjQ4OTNhY2EyYjFiNmFhY2RkYmI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMjYyNWE4OGRmZWYzNDY0MThlYmU3NDk4ODFjOTQxMjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY4MTY5Mzk5OTkzNTExLCAtNzMuOTM3Nzg4MDAwMjI5NzNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmQ5OTYzYzExNDZjNDI2ZThkNjMwZmVkNWVkNDYzNjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81N2VkOTc1NzYyY2Y0ODZlYTdkNmQxY2YyNzIxNGZlYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTdlZDk3NTc2MmNmNDg2ZWE3ZDZkMWNmMjcyMTRmZWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTM5MTIuMCwgaW5qID0yMi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZDk5NjNjMTE0NmM0MjZlOGQ2MzBmZWQ1ZWQ0NjM2OS5zZXRDb250ZW50KGh0bWxfNTdlZDk3NTc2MmNmNDg2ZWE3ZDZkMWNmMjcyMTRmZWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNjI1YTg4ZGZlZjM0NjQxOGViZTc0OTg4MWM5NDEyOS5iaW5kUG9wdXAocG9wdXBfZmQ5OTYzYzExNDZjNDI2ZThkNjMwZmVkNWVkNDYzNjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9hMDM0NDU4NjdjZWU0MGNlODA0NzdkY2IzZjVmZDcyNCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjkxOTQ5OTk5ODI3ODQsIC03My45Mzk4MjYwMDMzMDQ4Ml0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNTU0OGFkNTI0OGI0NGI5OGI3MmQ4NjE2ODZmY2I1OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdmNjIxNmU2ODFlYTRkNjc5N2E1ZGViYWE3YmU4N2IzID0gJCgnPGRpdiBpZD0iaHRtbF83ZjYyMTZlNjgxZWE0ZDY3OTdhNWRlYmFhN2JlODdiMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MzkxMy4wLCBpbmogPTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjU1NDhhZDUyNDhiNDRiOThiNzJkODYxNjg2ZmNiNTguc2V0Q29udGVudChodG1sXzdmNjIxNmU2ODFlYTRkNjc5N2E1ZGViYWE3YmU4N2IzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTAzNDQ1ODY3Y2VlNDBjZTgwNDc3ZGNiM2Y1ZmQ3MjQuYmluZFBvcHVwKHBvcHVwX2I1NTQ4YWQ1MjQ4YjQ0Yjk4YjcyZDg2MTY4NmZjYjU4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMWIzMGZmYTIwM2FmNDlkYzk0YmU5NDQzMWFiYTI5NWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjU3NjgyNjk5OTg1MjgwNSwgLTczLjk2NTA5NTAwMDE5ODk0XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkOTk3OGE0MjZlZTQwOGJhYWM2NTAzMDFiZjJmNDY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjIzNjA1YWM2NDVmNGUzYzg1NmQwNDZlN2M2OTkyYzMgPSAkKCc8ZGl2IGlkPSJodG1sXzIyMzYwNWFjNjQ1ZjRlM2M4NTZkMDQ2ZTdjNjk5MmMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0zOTE1LjAsIGluaiA9NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZDk5NzhhNDI2ZWU0MDhiYWFjNjUwMzAxYmYyZjQ2NS5zZXRDb250ZW50KGh0bWxfMjIzNjA1YWM2NDVmNGUzYzg1NmQwNDZlN2M2OTkyYzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xYjMwZmZhMjAzYWY0OWRjOTRiZTk0NDMxYWJhMjk1YS5iaW5kUG9wdXAocG9wdXBfMmQ5OTc4YTQyNmVlNDA4YmFhYzY1MDMwMWJmMmY0NjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9iNWIzNTVjYTE0ODQ0MTFkOTVjYmU1NjhhYzcxY2NjYSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNTc3MDE3OTk5ODIyMzksIC03My45NjQxOTAwMDAyMTcyXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RlYmQzNWNiYjI5MTQyYWY5YmU0MTQzODljNzI5ZTY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGQ5YWNkMDBlNjgwNDk1Mzk0YTViNmFkNjllNzhiMmEgPSAkKCc8ZGl2IGlkPSJodG1sXzhkOWFjZDAwZTY4MDQ5NTM5NGE1YjZhZDY5ZTc4YjJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0zOTM2LjAsIGluaiA9MTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGViZDM1Y2JiMjkxNDJhZjliZTQxNDM4OWM3MjllNjkuc2V0Q29udGVudChodG1sXzhkOWFjZDAwZTY4MDQ5NTM5NGE1YjZhZDY5ZTc4YjJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjViMzU1Y2ExNDg0NDExZDk1Y2JlNTY4YWM3MWNjY2EuYmluZFBvcHVwKHBvcHVwX2RlYmQzNWNiYjI5MTQyYWY5YmU0MTQzODljNzI5ZTY5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMTFlNmRjODUzNThjNDFiNmI2YWMzZDJiOGQ4NjZhNTggPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjYzNTMwMjk5OTkzODg0NCwgLTc0LjAwNjE2OTAwMDM1OTA0XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk2NDMzNmViNjI1YjRmMjJiMGJjZGMzYWU4Y2QyZDc4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGUyMDY3ZTNkZmUzNDM1NzlhMmM0MTZlMzQwNjlhZmYgPSAkKCc8ZGl2IGlkPSJodG1sXzBlMjA2N2UzZGZlMzQzNTc5YTJjNDE2ZTM0MDY5YWZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00MDU1LjAsIGluaiA9MTQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTY0MzM2ZWI2MjViNGYyMmIwYmNkYzNhZThjZDJkNzguc2V0Q29udGVudChodG1sXzBlMjA2N2UzZGZlMzQzNTc5YTJjNDE2ZTM0MDY5YWZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTFlNmRjODUzNThjNDFiNmI2YWMzZDJiOGQ4NjZhNTguYmluZFBvcHVwKHBvcHVwXzk2NDMzNmViNjI1YjRmMjJiMGJjZGMzYWU4Y2QyZDc4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMjE5MGU3MTNiMmNhNDUwYzkyZjYyOTZjZDBiNzk1MzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjYyOTk4NTk5OTgyNjI2LCAtNzMuOTk3MzU5MDAwMDY1ODddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODFmMjAxMWFjYmQ3NDAwNTgyYzQ0MGVhZWM1NmM1MGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZGM4N2E1NWI1ZGY0NTAyYjVkYTZkM2E4MDAxNGJlYyA9ICQoJzxkaXYgaWQ9Imh0bWxfMmRjODdhNTViNWRmNDUwMmI1ZGE2ZDNhODAwMTRiZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQwNTkuMCwgaW5qID0yLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxZjIwMTFhY2JkNzQwMDU4MmM0NDBlYWVjNTZjNTBiLnNldENvbnRlbnQoaHRtbF8yZGM4N2E1NWI1ZGY0NTAyYjVkYTZkM2E4MDAxNGJlYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzIxOTBlNzEzYjJjYTQ1MGM5MmY2Mjk2Y2QwYjc5NTM0LmJpbmRQb3B1cChwb3B1cF84MWYyMDExYWNiZDc0MDA1ODJjNDQwZWFlYzU2YzUwYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2Q5NzhkYjUzMmEwMzQ4YzVhYTEyMmFkYjUzNDZhZTA4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42NzkyNzY5OTk3ODIxMywgLTczLjkyOTA1ODAwMjk2NjM0XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ4Zjk4ZDIwZWVmZDRlOGE4ZjM0MWE3MjFiMzIzNTdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDYxOWQyMThkNDljNGYzY2JkNDhlNDU2MDI0ZDg2MzMgPSAkKCc8ZGl2IGlkPSJodG1sXzQ2MTlkMjE4ZDQ5YzRmM2NiZDQ4ZTQ1NjAyNGQ4NjMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00MDczLjAsIGluaiA9MTUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDhmOThkMjBlZWZkNGU4YThmMzQxYTcyMWIzMjM1N2Yuc2V0Q29udGVudChodG1sXzQ2MTlkMjE4ZDQ5YzRmM2NiZDQ4ZTQ1NjAyNGQ4NjMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDk3OGRiNTMyYTAzNDhjNWFhMTIyYWRiNTM0NmFlMDguYmluZFBvcHVwKHBvcHVwXzQ4Zjk4ZDIwZWVmZDRlOGE4ZjM0MWE3MjFiMzIzNTdmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNTljMDkxMGNmZTJiNDUwMTk3MTRmMzE4YmZhNzAwMzggPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjU3Nzc5NTk5OTkwMjQ0LCAtNzMuOTYwNTc4MDAwMjk4NDddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODhlZTEwYWNjNGJhNDZmMmE5NGM5MTM2NTkwMWUxZmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYWE2YWUzMzJhMDk0NTZkYjk2ZGMzOTAyZTc0YTQ3YSA9ICQoJzxkaXYgaWQ9Imh0bWxfM2FhNmFlMzMyYTA5NDU2ZGI5NmRjMzkwMmU3NGE0N2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQxMDcuMCwgaW5qID00LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg4ZWUxMGFjYzRiYTQ2ZjJhOTRjOTEzNjU5MDFlMWZlLnNldENvbnRlbnQoaHRtbF8zYWE2YWUzMzJhMDk0NTZkYjk2ZGMzOTAyZTc0YTQ3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU5YzA5MTBjZmUyYjQ1MDE5NzE0ZjMxOGJmYTcwMDM4LmJpbmRQb3B1cChwb3B1cF84OGVlMTBhY2M0YmE0NmYyYTk0YzkxMzY1OTAxZTFmZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzJkOWJjN2I4N2YzYTQzMjk5ZDBjZDU0NTI3NjI2MjQ5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42ODg3NzU5OTk4NjM5OCwgLTczLjk0Nzg5MzAwMDA1OTg5XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlMjY4YWFkMTJlMjQ2ZDY4YmMwYTQ2Mjc5YTQ4MDhkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzRlOWM5ZDVkZjFjNDAxZjgxZjkzZDI3MTk0NzFhOWEgPSAkKCc8ZGl2IGlkPSJodG1sXzc0ZTljOWQ1ZGYxYzQwMWY4MWY5M2QyNzE5NDcxYTlhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00MTc4LjAsIGluaiA9OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZTI2OGFhZDEyZTI0NmQ2OGJjMGE0NjI3OWE0ODA4ZC5zZXRDb250ZW50KGh0bWxfNzRlOWM5ZDVkZjFjNDAxZjgxZjkzZDI3MTk0NzFhOWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZDliYzdiODdmM2E0MzI5OWQwY2Q1NDUyNzYyNjI0OS5iaW5kUG9wdXAocG9wdXBfMWUyNjhhYWQxMmUyNDZkNjhiYzBhNDYyNzlhNDgwOGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8zMzViODFmYWViMGQ0M2VlYmExN2NiYTBiM2IyN2NhMCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjg5NDI3OTk5NzI1ODg2LCAtNzMuOTQyMjIyMDAwMTMyNDddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2JhMGViMWU3MTI2NGY4NGFjMjEzYTQ4OGFlNTUwNTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNWZkNDhmYzQ4MzY0YmYyOGZhYzdiMDc4N2M1MTAwNyA9ICQoJzxkaXYgaWQ9Imh0bWxfZDVmZDQ4ZmM0ODM2NGJmMjhmYWM3YjA3ODdjNTEwMDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQxODAuMCwgaW5qID03LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdiYTBlYjFlNzEyNjRmODRhYzIxM2E0ODhhZTU1MDU2LnNldENvbnRlbnQoaHRtbF9kNWZkNDhmYzQ4MzY0YmYyOGZhYzdiMDc4N2M1MTAwNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzMzNWI4MWZhZWIwZDQzZWViYTE3Y2JhMGIzYjI3Y2EwLmJpbmRQb3B1cChwb3B1cF83YmEwZWIxZTcxMjY0Zjg0YWMyMTNhNDg4YWU1NTA1NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzNmNzg2MWE3NDgxMDRlOTBhZTY1Yzg4YTRjZmNjMWVhID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42OTEwOTg5OTk3MzM3NywgLTczLjkyNzY5NDAwMDI1NDI4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkZTliYTU2NTJiZjQ0ODBhOTk3YTI4YmE2YTI5MmE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTYxMmM5NjJhMzVjNDk1OTk4YzYyZjIyYjRlYzNiMjcgPSAkKCc8ZGl2IGlkPSJodG1sX2E2MTJjOTYyYTM1YzQ5NTk5OGM2MmYyMmI0ZWMzYjI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00MTgxLjAsIGluaiA9Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZGU5YmE1NjUyYmY0NDgwYTk5N2EyOGJhNmEyOTJhNy5zZXRDb250ZW50KGh0bWxfYTYxMmM5NjJhMzVjNDk1OTk4YzYyZjIyYjRlYzNiMjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zZjc4NjFhNzQ4MTA0ZTkwYWU2NWM4OGE0Y2ZjYzFlYS5iaW5kUG9wdXAocG9wdXBfNmRlOWJhNTY1MmJmNDQ4MGE5OTdhMjhiYTZhMjkyYTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8xMWVmNGEzNzQwMGM0YzRhOTBmZGRlY2Q0Y2YxODJiNSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjg5MTAxOTk5OTc2NjE0LCAtNzMuOTQ1MDU2MDAwMDY2MjJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzI5NjJmMTg0NWU0NDI1ODkwOTBmNjNjMTA0MDU2MWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNzQ1MTQ3Y2JmMzk0OWViYmI2NTFhYTYzMDdmOTQ0ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZDc0NTE0N2NiZjM5NDllYmJiNjUxYWE2MzA3Zjk0NGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQxODQuMCwgaW5qID0xNS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMjk2MmYxODQ1ZTQ0MjU4OTA5MGY2M2MxMDQwNTYxYi5zZXRDb250ZW50KGh0bWxfZDc0NTE0N2NiZjM5NDllYmJiNjUxYWE2MzA3Zjk0NGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMWVmNGEzNzQwMGM0YzRhOTBmZGRlY2Q0Y2YxODJiNS5iaW5kUG9wdXAocG9wdXBfMzI5NjJmMTg0NWU0NDI1ODkwOTBmNjNjMTA0MDU2MWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8zY2ExNTNkNTQzZDM0OTg2ODNjYjMwOTQyYzUwODMyYiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjkwNDI3OTk5Nzg5NzQsIC03My45MzM1NDIwMDA5ODA0Ml0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85Njc4ZGQ2N2U3ZGI0ODczODIwOGIzNzljOGYwODlkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzODkwMTMxZWVhNjQwN2ViNTMxYThiZGI1NmI5NDhkID0gJCgnPGRpdiBpZD0iaHRtbF8zMzg5MDEzMWVlYTY0MDdlYjUzMWE4YmRiNTZiOTQ4ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NDE4Ni4wLCBpbmogPTQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTY3OGRkNjdlN2RiNDg3MzgyMDhiMzc5YzhmMDg5ZDEuc2V0Q29udGVudChodG1sXzMzODkwMTMxZWVhNjQwN2ViNTMxYThiZGI1NmI5NDhkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2NhMTUzZDU0M2QzNDk4NjgzY2IzMDk0MmM1MDgzMmIuYmluZFBvcHVwKHBvcHVwXzk2NzhkZDY3ZTdkYjQ4NzM4MjA4YjM3OWM4ZjA4OWQxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfODYzNjkwZmVmYmZlNDUwNDlkMjg0NzJkOGNjYWRhNTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY5MzQzNzk5OTc0MzUxNiwgLTczLjk3NzgyNzAwMDI5OTcxXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkMTkxMmRhYjNkODRmMzVhN2NhOGI0MDFhMDI4YTg4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWYzZTNhNTE2MDVmNDBiZGIwMTQzZDZiNzU1NmRmNGIgPSAkKCc8ZGl2IGlkPSJodG1sXzFmM2UzYTUxNjA1ZjQwYmRiMDE0M2Q2Yjc1NTZkZjRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00MjQ1LjAsIGluaiA9Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZDE5MTJkYWIzZDg0ZjM1YTdjYThiNDAxYTAyOGE4OC5zZXRDb250ZW50KGh0bWxfMWYzZTNhNTE2MDVmNDBiZGIwMTQzZDZiNzU1NmRmNGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NjM2OTBmZWZiZmU0NTA0OWQyODQ3MmQ4Y2NhZGE1My5iaW5kUG9wdXAocG9wdXBfNmQxOTEyZGFiM2Q4NGYzNWE3Y2E4YjQwMWEwMjhhODgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8zZGRlMmYzOTI0NGQ0YjM3OTU0ZTNhNTJmNDZmNzdlYyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjM1ODY1OTk5ODg0NDMsIC03NC4wMDU1ODYwMDAyNzk0MV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYjdmZDJlMTc5YjM0NGM3OTgyZTAzMDY0ZDM2ZDJhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhjYTc2ZTExN2E4NjQ2ZTE4MGFmZjE3NjFjNzI0ZDI5ID0gJCgnPGRpdiBpZD0iaHRtbF84Y2E3NmUxMTdhODY0NmUxODBhZmYxNzYxYzcyNGQyOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NDMyNi4wLCBpbmogPTQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWI3ZmQyZTE3OWIzNDRjNzk4MmUwMzA2NGQzNmQyYTAuc2V0Q29udGVudChodG1sXzhjYTc2ZTExN2E4NjQ2ZTE4MGFmZjE3NjFjNzI0ZDI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2RkZTJmMzkyNDRkNGIzNzk1NGUzYTUyZjQ2Zjc3ZWMuYmluZFBvcHVwKHBvcHVwX2ViN2ZkMmUxNzliMzQ0Yzc5ODJlMDMwNjRkMzZkMmEwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNjEzZDdkZDJkMTY4NGU0MmJmOTRhMGY3OGU5YTMwZWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjYzMDU0Njk5OTg0NjMxLCAtNzMuOTk2Nzc5MDAwMjc4NjJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjc4ODkxY2E3MzgyNGNmZGI2MWRmOGQyOWFjZjAzZTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Y2MzYWQ3MWU4Nzc0MWE0OGUzNDYyNjAxMWM4ZDNlOCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWNjM2FkNzFlODc3NDFhNDhlMzQ2MjYwMTFjOGQzZTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQzMjkuMCwgaW5qID04LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI3ODg5MWNhNzM4MjRjZmRiNjFkZjhkMjlhY2YwM2U3LnNldENvbnRlbnQoaHRtbF85Y2MzYWQ3MWU4Nzc0MWE0OGUzNDYyNjAxMWM4ZDNlOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYxM2Q3ZGQyZDE2ODRlNDJiZjk0YTBmNzhlOWEzMGViLmJpbmRQb3B1cChwb3B1cF8yNzg4OTFjYTczODI0Y2ZkYjYxZGY4ZDI5YWNmMDNlNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2M2NDcyYzk4M2U5MzRlYzk4ZTJlNWJmZWRlOTVmN2NmID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42ODMxODg5OTk4MTE5MiwgLTczLjg2NjI5NTAwMDkyNjE0XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNhNDlkZThlYzVhYjQxZWI4ZjIxNTIxNjRlODMyNDRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmU2NGI3YmRmOWY1NGQ0NTlkMmM1N2ZhYWFkODc5ZWMgPSAkKCc8ZGl2IGlkPSJodG1sXzJlNjRiN2JkZjlmNTRkNDU5ZDJjNTdmYWFhZDg3OWVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00MzQyLjAsIGluaiA9MzcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2E0OWRlOGVjNWFiNDFlYjhmMjE1MjE2NGU4MzI0NGUuc2V0Q29udGVudChodG1sXzJlNjRiN2JkZjlmNTRkNDU5ZDJjNTdmYWFhZDg3OWVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzY0NzJjOTgzZTkzNGVjOThlMmU1YmZlZGU5NWY3Y2YuYmluZFBvcHVwKHBvcHVwXzNhNDlkZThlYzVhYjQxZWI4ZjIxNTIxNjRlODMyNDRlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMjU3NDhiMWI0ZjI4NGY1ZWI5Y2YzZTFkMjhiZDY1OTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgzOTgxMzk5OTk5MDgyLCAtNzMuOTEzMTM3MDAyNDI1NDJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzdlYTRlZGFkMzk3NDYxMmFmYjhiZTJjZTI0NDU4ZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yODQ1Y2VkMDhmNzk0M2M1OWY1NDFjNGU3MzgwYmIzNiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjg0NWNlZDA4Zjc5NDNjNTlmNTQxYzRlNzM4MGJiMzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQzOTIuMCwgaW5qID0xNi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jN2VhNGVkYWQzOTc0NjEyYWZiOGJlMmNlMjQ0NThmNS5zZXRDb250ZW50KGh0bWxfMjg0NWNlZDA4Zjc5NDNjNTlmNTQxYzRlNzM4MGJiMzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNTc0OGIxYjRmMjg0ZjVlYjljZjNlMWQyOGJkNjU5Ny5iaW5kUG9wdXAocG9wdXBfYzdlYTRlZGFkMzk3NDYxMmFmYjhiZTJjZTI0NDU4ZjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8yZTI3NzdkZTE5NDA0ZDE1OTBmZDQ4NzQxNmQwNWM3OSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODQ3Nzg3OTk5OTc0OSwgLTczLjkwNzQwODAwMTIwMjg3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1YTQxMjI3OGUwZjQwZGRiZTAyY2NjYTVmMzQ5ZjQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjcyYzZlNzdlNWRkNDM1NTljNTY4M2VmZmIyMTIxZTkgPSAkKCc8ZGl2IGlkPSJodG1sX2I3MmM2ZTc3ZTVkZDQzNTU5YzU2ODNlZmZiMjEyMWU5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00NDAyLjAsIGluaiA9MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNWE0MTIyNzhlMGY0MGRkYmUwMmNjY2E1ZjM0OWY0MC5zZXRDb250ZW50KGh0bWxfYjcyYzZlNzdlNWRkNDM1NTljNTY4M2VmZmIyMTIxZTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZTI3NzdkZTE5NDA0ZDE1OTBmZDQ4NzQxNmQwNWM3OS5iaW5kUG9wdXAocG9wdXBfZTVhNDEyMjc4ZTBmNDBkZGJlMDJjY2NhNWYzNDlmNDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl82YzJiYTMzYjVjNGQ0YjEyYTRlYjQwY2IwZTJlNjczMyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODQzMjAzOTk5ODEyNTgsIC03My45MTE5NDkwMDI4NjE5Nl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNTUwY2Q3M2I2NTE0NGE1YWMyMzRhNmE5MjA4ZjY3MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc4OWNjOGRlYmMzYTQ5ZTA4MzhlMzU4MDc1ZTAwYjU2ID0gJCgnPGRpdiBpZD0iaHRtbF83ODljYzhkZWJjM2E0OWUwODM4ZTM1ODA3NWUwMGI1NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NDQxMi4wLCBpbmogPTI4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA1NTBjZDczYjY1MTQ0YTVhYzIzNGE2YTkyMDhmNjcxLnNldENvbnRlbnQoaHRtbF83ODljYzhkZWJjM2E0OWUwODM4ZTM1ODA3NWUwMGI1Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZjMmJhMzNiNWM0ZDRiMTJhNGViNDBjYjBlMmU2NzMzLmJpbmRQb3B1cChwb3B1cF8wNTUwY2Q3M2I2NTE0NGE1YWMyMzRhNmE5MjA4ZjY3MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzljMGU2YmI5YjI1YjQ0NThiNzZkNTNkYWVkNmFmYjU5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NDg1NDA5OTk3NzY4NCwgLTczLjkwNjc2NzAwMDg1OTQ2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EzNTYxMzg5MDdjMDQ0OGI4NDlkMTNjYjZiMmM3MjQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWZmZDMzNzY3MDFlNDBjNjhhOWY4OWVlMjc0OTI2YTEgPSAkKCc8ZGl2IGlkPSJodG1sX2FmZmQzMzc2NzAxZTQwYzY4YTlmODllZTI3NDkyNmExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00NDE0LjAsIGluaiA9NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMzU2MTM4OTA3YzA0NDhiODQ5ZDEzY2I2YjJjNzI0NC5zZXRDb250ZW50KGh0bWxfYWZmZDMzNzY3MDFlNDBjNjhhOWY4OWVlMjc0OTI2YTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85YzBlNmJiOWIyNWI0NDU4Yjc2ZDUzZGFlZDZhZmI1OS5iaW5kUG9wdXAocG9wdXBfYTM1NjEzODkwN2MwNDQ4Yjg0OWQxM2NiNmIyYzcyNDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jNmEyMDRkYjkzMjc0NzExODc3OGU5MjdiMjVjZjdkYyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODU0NTg1OTk5ODk0NSwgLTczLjkwMTg2MDAwMTI5NDg5XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkyNmM5ZDhhYmMxNzRmODQ4NmViNmZlZjIxNzJiNDc1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2RmNjk2NjkwMmIzNGM1OGFhODExODdmYTUwZTYzMGEgPSAkKCc8ZGl2IGlkPSJodG1sX2NkZjY5NjY5MDJiMzRjNThhYTgxMTg3ZmE1MGU2MzBhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00NDMxLjAsIGluaiA9NDEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTI2YzlkOGFiYzE3NGY4NDg2ZWI2ZmVmMjE3MmI0NzUuc2V0Q29udGVudChodG1sX2NkZjY5NjY5MDJiMzRjNThhYTgxMTg3ZmE1MGU2MzBhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzZhMjA0ZGI5MzI3NDcxMTg3NzhlOTI3YjI1Y2Y3ZGMuYmluZFBvcHVwKHBvcHVwXzkyNmM5ZDhhYmMxNzRmODQ4NmViNmZlZjIxNzJiNDc1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfODJhMDQ3ZmZkMGIyNDlkYjhkNjgwMzJjMzlmOTM5OGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg1NjA0Njk5OTc2NTYyNCwgLTczLjkwMDc3OTAwMjgxNzQyXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU2YzVhNWNmNWUwZjQ5NjViMzc3YmRmOGIwMGI2NmIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjM3MzMyOTE0MzUxNGU1YmI3ZGRiNTdjOTZkNjAwM2IgPSAkKCc8ZGl2IGlkPSJodG1sXzYzNzMzMjkxNDM1MTRlNWJiN2RkYjU3Yzk2ZDYwMDNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00NDMyLjAsIGluaiA9NTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTZjNWE1Y2Y1ZTBmNDk2NWIzNzdiZGY4YjAwYjY2YjEuc2V0Q29udGVudChodG1sXzYzNzMzMjkxNDM1MTRlNWJiN2RkYjU3Yzk2ZDYwMDNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODJhMDQ3ZmZkMGIyNDlkYjhkNjgwMzJjMzlmOTM5OGQuYmluZFBvcHVwKHBvcHVwXzU2YzVhNWNmNWUwZjQ5NjViMzc3YmRmOGIwMGI2NmIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfOWU2YmJlZjZlZjA0NDdlYWJlNTZjMjBjYzI5Y2JjYjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg1NzQxOTk5OTc4OTg5LCAtNzMuODk5OTQ5MDAyNDEzOTZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjkwNzM0OGI4M2I2NGRlYmIxOGJkODY0YzBjNTlmMWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MTRkZDhiYzM2YmI0ZjQ1YWQyODgxN2UzMTlmMThjNiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjE0ZGQ4YmMzNmJiNGY0NWFkMjg4MTdlMzE5ZjE4YzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQ0MzMuMCwgaW5qID01Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOTA3MzQ4YjgzYjY0ZGViYjE4YmQ4NjRjMGM1OWYxZi5zZXRDb250ZW50KGh0bWxfNjE0ZGQ4YmMzNmJiNGY0NWFkMjg4MTdlMzE5ZjE4YzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZTZiYmVmNmVmMDQ0N2VhYmU1NmMyMGNjMjljYmNiMi5iaW5kUG9wdXAocG9wdXBfZjkwNzM0OGI4M2I2NGRlYmIxOGJkODY0YzBjNTlmMWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9hMzYyYmJmOTcxNWQ0NDhhYTViYzYzYjUxOWQ3OWE2YyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODU5MzA0OTk5ODk1OCwgLTczLjg5ODgzMjAwMjI3MTk2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMyNGJhOTExNjNjMDRkODFhYzdjMWRhOWY5YzRjNGZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzk4NTE4NzIzMzNhNDg4YjgwMDQwNjA4YTFhOWIyMWUgPSAkKCc8ZGl2IGlkPSJodG1sX2M5ODUxODcyMzMzYTQ4OGI4MDA0MDYwOGExYTliMjFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00NDM0LjAsIGluaiA9NzYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzI0YmE5MTE2M2MwNGQ4MWFjN2MxZGE5ZjljNGM0ZmMuc2V0Q29udGVudChodG1sX2M5ODUxODcyMzMzYTQ4OGI4MDA0MDYwOGExYTliMjFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTM2MmJiZjk3MTVkNDQ4YWE1YmM2M2I1MTlkNzlhNmMuYmluZFBvcHVwKHBvcHVwXzMyNGJhOTExNjNjMDRkODFhYzdjMWRhOWY5YzRjNGZjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMjZlNDkxYjI1NDQ0NDgxMjgyYWJjMWZlYTZkYzFhNjggPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg2MDMzMTk5OTg3MzQ0LCAtNzMuODk4Mjc3MDAwNDk5NzZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzk5OGY5MjZjMDhhNGVlZjhkZDI4OTRhZDRiMGM3NDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNGQ3MWE2N2U1MTg0ZDE0OGMzZGJhOWQ5ZTBlZDE1YyA9ICQoJzxkaXYgaWQ9Imh0bWxfZDRkNzFhNjdlNTE4NGQxNDhjM2RiYTlkOWUwZWQxNWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQ0MzUuMCwgaW5qID00LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5OThmOTI2YzA4YTRlZWY4ZGQyODk0YWQ0YjBjNzQyLnNldENvbnRlbnQoaHRtbF9kNGQ3MWE2N2U1MTg0ZDE0OGMzZGJhOWQ5ZTBlZDE1Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI2ZTQ5MWIyNTQ0NDQ4MTI4MmFiYzFmZWE2ZGMxYTY4LmJpbmRQb3B1cChwb3B1cF8zOTk4ZjkyNmMwOGE0ZWVmOGRkMjg5NGFkNGIwYzc0MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzk3MGRjZWY4NWZkZTRmZGZiNmQ3NGMzNjAyYjRjNzJhID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NjEzNDg5OTk4ODMxNywgLTczLjg5NzcyOTAwMzIyNjQ3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY3M2EwOTc5YWQxNTRjNjQ4NjZlYzBlZDM3NzZkYjFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTAyMzQzNzdlYjE4NDU5ZGFmZWQyNGE5ODEzNWJhN2UgPSAkKCc8ZGl2IGlkPSJodG1sX2UwMjM0Mzc3ZWIxODQ1OWRhZmVkMjRhOTgxMzViYTdlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00NDM2LjAsIGluaiA9NDcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjczYTA5NzlhZDE1NGM2NDg2NmVjMGVkMzc3NmRiMWUuc2V0Q29udGVudChodG1sX2UwMjM0Mzc3ZWIxODQ1OWRhZmVkMjRhOTgxMzViYTdlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTcwZGNlZjg1ZmRlNGZkZmI2ZDc0YzM2MDJiNGM3MmEuYmluZFBvcHVwKHBvcHVwXzY3M2EwOTc5YWQxNTRjNjQ4NjZlYzBlZDM3NzZkYjFlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNTk2NDIzMjI2NTMzNDJjMjk1NTFjNTg4ZTI5MmM2ZWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg2NTM0OTk5OTc1NTExLCAtNzMuODk0OTIyMDAxMDMyODRdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzZiNDkyYWVmNTAzNDgzYmJlMmQ1YTNhNmZjODMxMjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNDQ3NTBhZjM0Nzg0M2E1YTU3ZDQ1ZDgyMzI5OTIwYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjQ0NzUwYWYzNDc4NDNhNWE1N2Q0NWQ4MjMyOTkyMGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQ0MzguMCwgaW5qID0wLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM2YjQ5MmFlZjUwMzQ4M2JiZTJkNWEzYTZmYzgzMTIzLnNldENvbnRlbnQoaHRtbF8yNDQ3NTBhZjM0Nzg0M2E1YTU3ZDQ1ZDgyMzI5OTIwYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU5NjQyMzIyNjUzMzQyYzI5NTUxYzU4OGUyOTJjNmViLmJpbmRQb3B1cChwb3B1cF8zNmI0OTJhZWY1MDM0ODNiYmUyZDVhM2E2ZmM4MzEyMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzY3Y2QxMjJkNWQ1ODQyNjVhOGY5MWZhNzBmNDY5YTJjID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44Njc4ODE5OTk3NDE0LCAtNzMuODkyOTk2MDAxMTk5MDFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmY5ZGIwMzU1YTc1NDRhZDgwYjEzZmYwOGRlOGE5MzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NDg0M2Y0ODE5Zjg0ZTUyODhlMThlN2I2MTY0ZmRhOSA9ICQoJzxkaXYgaWQ9Imh0bWxfNTQ4NDNmNDgxOWY4NGU1Mjg4ZTE4ZTdiNjE2NGZkYTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQ0MzkuMCwgaW5qID00Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZjlkYjAzNTVhNzU0NGFkODBiMTNmZjA4ZGU4YTkzMS5zZXRDb250ZW50KGh0bWxfNTQ4NDNmNDgxOWY4NGU1Mjg4ZTE4ZTdiNjE2NGZkYTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82N2NkMTIyZDVkNTg0MjY1YThmOTFmYTcwZjQ2OWEyYy5iaW5kUG9wdXAocG9wdXBfZmY5ZGIwMzU1YTc1NDRhZDgwYjEzZmYwOGRlOGE5MzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9kMDc0YTc0MDIwN2U0Yjk2YTdlYThlOWJkYmM2YWIxYiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODc0NjkwOTk5OTA0NTY2LCAtNzMuODg2NDkzMDAyOTY5OV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNGE4YWY2YzlmZjQ0NDMyYmNjNTNlMGZhMTkzOTRjZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZlMjUyOThiMGUzNzQxNWY4NGViYWExZGY2ZDgzZWNmID0gJCgnPGRpdiBpZD0iaHRtbF82ZTI1Mjk4YjBlMzc0MTVmODRlYmFhMWRmNmQ4M2VjZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NDQ0Ni4wLCBpbmogPTEyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0YThhZjZjOWZmNDQ0MzJiY2M1M2UwZmExOTM5NGNmLnNldENvbnRlbnQoaHRtbF82ZTI1Mjk4YjBlMzc0MTVmODRlYmFhMWRmNmQ4M2VjZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QwNzRhNzQwMjA3ZTRiOTZhN2VhOGU5YmRiYzZhYjFiLmJpbmRQb3B1cChwb3B1cF9lNGE4YWY2YzlmZjQ0NDMyYmNjNTNlMGZhMTkzOTRjZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzgyYWRlMjg4Yzc1MjQwMzNiZjdhZmUwYjdjOTVhOTQzID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NjI1MzM5OTk5MDkxMjUsIC03My44OTcwNjgwMDE3NjA5OV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84Zjc5OGZlZDkyOTc0Y2U5OWY5ZWFjZmRhNmNkMjM1MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UzOGY1ZDQ5MDJlMjRiZjhhMGYxMGM0ZDdjNzgwY2MwID0gJCgnPGRpdiBpZD0iaHRtbF9lMzhmNWQ0OTAyZTI0YmY4YTBmMTBjNGQ3Yzc4MGNjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NDQ1NS4wLCBpbmogPTExLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmNzk4ZmVkOTI5NzRjZTk5ZjllYWNmZGE2Y2QyMzUzLnNldENvbnRlbnQoaHRtbF9lMzhmNWQ0OTAyZTI0YmY4YTBmMTBjNGQ3Yzc4MGNjMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzgyYWRlMjg4Yzc1MjQwMzNiZjdhZmUwYjdjOTVhOTQzLmJpbmRQb3B1cChwb3B1cF84Zjc5OGZlZDkyOTc0Y2U5OWY5ZWFjZmRhNmNkMjM1MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2Y4OTdkYTA3OTI4ZjRkYjhiMjQyMTNhOGE0MjA3MjE0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NDk0NTA5OTk5MDIxNzQsIC03My45MDU5NDkwMDE3NDM0MV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NzBjYzhkNTgwNjA0OGE4OGZjOTU3MjY1Yjc2MjFhNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M1NWZiZmJmM2JjYjQ0YjU5NTkwZWMyNzMxMWVlMDc2ID0gJCgnPGRpdiBpZD0iaHRtbF9jNTVmYmZiZjNiY2I0NGI1OTU5MGVjMjczMTFlZTA3NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NDQ2MC4wLCBpbmogPTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjcwY2M4ZDU4MDYwNDhhODhmYzk1NzI2NWI3NjIxYTUuc2V0Q29udGVudChodG1sX2M1NWZiZmJmM2JjYjQ0YjU5NTkwZWMyNzMxMWVlMDc2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjg5N2RhMDc5MjhmNGRiOGIyNDIxM2E4YTQyMDcyMTQuYmluZFBvcHVwKHBvcHVwXzY3MGNjOGQ1ODA2MDQ4YTg4ZmM5NTcyNjViNzYyMWE1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMzQ3MWY0M2FkMDQ0NGJmY2IzYjY3MTBlMTQyOTgxNGMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg2NjA2Njk5OTc0MjIzLCAtNzMuODk0Mzc2MDAwMDc3N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOWIxNWQwOGQ4NzU0NDkwYWQ4MjkwNTY1YTc5ZTgyNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyNmFkMTQzOTk2MjQ5MzZiMWZjMmMyMTdjZDQ1NTEzID0gJCgnPGRpdiBpZD0iaHRtbF82MjZhZDE0Mzk5NjI0OTM2YjFmYzJjMjE3Y2Q0NTUxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NDQ3Mi4wLCBpbmogPTQ2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5YjE1ZDA4ZDg3NTQ0OTBhZDgyOTA1NjVhNzllODI2LnNldENvbnRlbnQoaHRtbF82MjZhZDE0Mzk5NjI0OTM2YjFmYzJjMjE3Y2Q0NTUxMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM0NzFmNDNhZDA0NDRiZmNiM2I2NzEwZTE0Mjk4MTRjLmJpbmRQb3B1cChwb3B1cF8zOWIxNWQwOGQ4NzU0NDkwYWQ4MjkwNTY1YTc5ZTgyNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzAxYWJkZmRiYTQ5ZDQ0ZjM4OGRjODNlMTlhMzkwNWM0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NzIxMjA5OTk5MTc2NSwgLTczLjg4Nzg1MTAwMDkwNTYxXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVmNGIxZWZlODQ5MzQxMTE5YjI5YTlkOGZiNWVmZGM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2E0NDM0NjA1M2FjNGVjOThkMzc3ZDM5ZTA0Y2VhZjMgPSAkKCc8ZGl2IGlkPSJodG1sXzNhNDQzNDYwNTNhYzRlYzk4ZDM3N2QzOWUwNGNlYWYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00NDczLjAsIGluaiA9MjYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWY0YjFlZmU4NDkzNDExMTliMjlhOWQ4ZmI1ZWZkYzUuc2V0Q29udGVudChodG1sXzNhNDQzNDYwNTNhYzRlYzk4ZDM3N2QzOWUwNGNlYWYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDFhYmRmZGJhNDlkNDRmMzg4ZGM4M2UxOWEzOTA1YzQuYmluZFBvcHVwKHBvcHVwXzVmNGIxZWZlODQ5MzQxMTE5YjI5YTlkOGZiNWVmZGM1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNTU5YjY4YmI3OWM4NDc0OTljOTllOGQwMjMzNzBjMzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgxODU1OTk5OTg1MTQxLCAtNzMuOTI3MzEzMDAxMjgyODNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmFlZGQ0ZTM3OGI0NDcwMWFkZWFjYWE3ZTg2ODI4ZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOTRkYmE3OThmZjg0OGQ1YmMxM2VmNTM0M2VmNjI4MSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzk0ZGJhNzk4ZmY4NDhkNWJjMTNlZjUzNDNlZjYyODEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQ0ODUuMCwgaW5qID05NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYWVkZDRlMzc4YjQ0NzAxYWRlYWNhYTdlODY4MjhmMy5zZXRDb250ZW50KGh0bWxfYzk0ZGJhNzk4ZmY4NDhkNWJjMTNlZjUzNDNlZjYyODEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81NTliNjhiYjc5Yzg0NzQ5OWM5OWU4ZDAyMzM3MGMzNi5iaW5kUG9wdXAocG9wdXBfYmFlZGQ0ZTM3OGI0NDcwMWFkZWFjYWE3ZTg2ODI4ZjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl80YzMzZDAwZWI1NjA0NGE3ODFjZTNlN2JiMzM2ODc5NCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODMwOTE0OTk5OTU0NjQsIC03My45MjA0NjEwMDI4MTA5NF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNGNlMTU4ZmM5ZDU0ZjM3OWQwMDQ4OTM5MDQzNjM4YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I1YzBmMjgzZjUxYzRlOWNiMTRmYzcyMmUyYjA1MDY5ID0gJCgnPGRpdiBpZD0iaHRtbF9iNWMwZjI4M2Y1MWM0ZTljYjE0ZmM3MjJlMmIwNTA2OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NDQ5NS4wLCBpbmogPTY4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E0Y2UxNThmYzlkNTRmMzc5ZDAwNDg5MzkwNDM2MzhjLnNldENvbnRlbnQoaHRtbF9iNWMwZjI4M2Y1MWM0ZTljYjE0ZmM3MjJlMmIwNTA2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRjMzNkMDBlYjU2MDQ0YTc4MWNlM2U3YmIzMzY4Nzk0LmJpbmRQb3B1cChwb3B1cF9hNGNlMTU4ZmM5ZDU0ZjM3OWQwMDQ4OTM5MDQzNjM4YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzdiYWVlODY4ODhmMDQ4OTJiYTgxZTA1ODkzMzA3MDY4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MzE5NDg5OTk4NTY3OCwgLTczLjkxOTg1NjAwMTg2NTc3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwZDM0NTJhZjU2MjQwY2U4MDNiZDViNTQ5NTQ3MjY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmE0OTNmMjQ5NzllNDA5OTk4OGVhMWNkOTQ0N2UwZjggPSAkKCc8ZGl2IGlkPSJodG1sX2JhNDkzZjI0OTc5ZTQwOTk5ODhlYTFjZDk0NDdlMGY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00NDk2LjAsIGluaiA9MTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTBkMzQ1MmFmNTYyNDBjZTgwM2JkNWI1NDk1NDcyNjcuc2V0Q29udGVudChodG1sX2JhNDkzZjI0OTc5ZTQwOTk5ODhlYTFjZDk0NDdlMGY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2JhZWU4Njg4OGYwNDg5MmJhODFlMDU4OTMzMDcwNjguYmluZFBvcHVwKHBvcHVwXzUwZDM0NTJhZjU2MjQwY2U4MDNiZDViNTQ5NTQ3MjY3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfM2UzODllNjQ4ZGYxNDc4OTliY2I4OWEyNDA2ZDkzZTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgzNDUwOTk5OTk0OCwgLTczLjkxNzcwNjAwMTk1NzUzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY0ZDU5N2U1NTlmYzRkZjhhZmUwNDhiOWIzMDIzOGMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzYwZGIyMDA5YjdiNDM0OWE1MWEzYzg0ZTliZTdjNTYgPSAkKCc8ZGl2IGlkPSJodG1sXzM2MGRiMjAwOWI3YjQzNDlhNTFhM2M4NGU5YmU3YzU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00NDk3LjAsIGluaiA9NTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjRkNTk3ZTU1OWZjNGRmOGFmZTA0OGI5YjMwMjM4YzEuc2V0Q29udGVudChodG1sXzM2MGRiMjAwOWI3YjQzNDlhNTFhM2M4NGU5YmU3YzU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2UzODllNjQ4ZGYxNDc4OTliY2I4OWEyNDA2ZDkzZTAuYmluZFBvcHVwKHBvcHVwXzY0ZDU5N2U1NTlmYzRkZjhhZmUwNDhiOWIzMDIzOGMxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMjUzY2EzMmJmZTA3NDBiOTkyOTFmY2I2NWExZTM0NTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgzNjM5Mjk5OTczNTU3LCAtNzMuOTE1ODcxMDAwNTUyOTVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTU4Zjc3NjFhOTZjNDUwMzk5NDMzNjM0Y2Q4Y2NiZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNzA2NjgxOWYzOWQ0YTQzYmFlMGI4ZjU2NDg3ZDVlOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjcwNjY4MTlmMzlkNGE0M2JhZTBiOGY1NjQ4N2Q1ZTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQ0OTkuMCwgaW5qID00My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNThmNzc2MWE5NmM0NTAzOTk0MzM2MzRjZDhjY2JkNC5zZXRDb250ZW50KGh0bWxfMjcwNjY4MTlmMzlkNGE0M2JhZTBiOGY1NjQ4N2Q1ZTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNTNjYTMyYmZlMDc0MGI5OTI5MWZjYjY1YTFlMzQ1NC5iaW5kUG9wdXAocG9wdXBfYTU4Zjc3NjFhOTZjNDUwMzk5NDMzNjM0Y2Q4Y2NiZDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl81YjExYTQwYzhjYzc0NjcxYTY3ODFkZjk0YzMyMGI1NSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODM4NzQyOTk5ODQ3MTM1LCAtNzMuOTEzNzU1MDAyNzQ0OTVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmRhM2E4ZmM1NmMwNDk5YWI2YmY3YWZiMmEzOGFmMWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOGRlMWMyMzIxYzk0MTUzYTliNTI1OTc2MzUyNDBiZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDhkZTFjMjMyMWM5NDE1M2E5YjUyNTk3NjM1MjQwYmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQ1MDAuMCwgaW5qID04LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZkYTNhOGZjNTZjMDQ5OWFiNmJmN2FmYjJhMzhhZjFmLnNldENvbnRlbnQoaHRtbF8wOGRlMWMyMzIxYzk0MTUzYTliNTI1OTc2MzUyNDBiZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzViMTFhNDBjOGNjNzQ2NzFhNjc4MWRmOTRjMzIwYjU1LmJpbmRQb3B1cChwb3B1cF9mZGEzYThmYzU2YzA0OTlhYjZiZjdhZmIyYTM4YWYxZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzM4Yzg3OWU1NzQ2MjQyNGI5MGU2MzQ5MzM0OWNkYTU4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44Mzk4MTM5OTk5OTA4MiwgLTczLjkxMzEzNzAwMjQyNTQyXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M2NGIwMTU1MDhmMTQ4NThhODZlMTViNzMxY2VlNTMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjcwYjViM2ZmZGY1NDk5YmIzYWQzOTM2YTEyNTZhNDUgPSAkKCc8ZGl2IGlkPSJodG1sXzI3MGI1YjNmZmRmNTQ5OWJiM2FkMzkzNmExMjU2YTQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00NTAxLjAsIGluaiA9My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNjRiMDE1NTA4ZjE0ODU4YTg2ZTE1YjczMWNlZTUzMi5zZXRDb250ZW50KGh0bWxfMjcwYjViM2ZmZGY1NDk5YmIzYWQzOTM2YTEyNTZhNDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zOGM4NzllNTc0NjI0MjRiOTBlNjM0OTMzNDljZGE1OC5iaW5kUG9wdXAocG9wdXBfYzY0YjAxNTUwOGYxNDg1OGE4NmUxNWI3MzFjZWU1MzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8xZTdlZDlmYTg2NWI0YTUwOGUwOThmZGVjZWZiYzZjOCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODM3NTE2OTk5OTYzNDQsIC03My45MTQ3ODAwMDAzMTM3M10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNWZjYjMwODg2YWY0YTg3YTQxYzgxZTk4ZmEwYTJhZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5YmZhMDU5Y2E5ZTRlNDBiMDU2YmE0OTM0ZjJmN2Y3ID0gJCgnPGRpdiBpZD0iaHRtbF82OWJmYTA1OWNhOWU0ZTQwYjA1NmJhNDkzNGYyZjdmNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NDUwNC4wLCBpbmogPTExLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1ZmNiMzA4ODZhZjRhODdhNDFjODFlOThmYTBhMmFlLnNldENvbnRlbnQoaHRtbF82OWJmYTA1OWNhOWU0ZTQwYjA1NmJhNDkzNGYyZjdmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFlN2VkOWZhODY1YjRhNTA4ZTA5OGZkZWNlZmJjNmM4LmJpbmRQb3B1cChwb3B1cF9iNWZjYjMwODg2YWY0YTg3YTQxYzgxZTk4ZmEwYTJhZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzliYTE5N2M4MWY2YTRmMWU5NmY0MDk1OTcxYjJlNDAwID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MzMwODk5OTk4NjU1NywgLTczLjkxOTAyOTAwMTk2NTM4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U4YmYwZWI0MmRhMjRiMjZiNDUxZDViMTVhYWFmM2ZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGQ0YjNmYmU1OWExNDM0MWI5MDVkNDdmNmU2YWZlYjIgPSAkKCc8ZGl2IGlkPSJodG1sXzBkNGIzZmJlNTlhMTQzNDFiOTA1ZDQ3ZjZlNmFmZWIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00NTA5LjAsIGluaiA9MTQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZThiZjBlYjQyZGEyNGIyNmI0NTFkNWIxNWFhYWYzZmQuc2V0Q29udGVudChodG1sXzBkNGIzZmJlNTlhMTQzNDFiOTA1ZDQ3ZjZlNmFmZWIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWJhMTk3YzgxZjZhNGYxZTk2ZjQwOTU5NzFiMmU0MDAuYmluZFBvcHVwKHBvcHVwX2U4YmYwZWI0MmRhMjRiMjZiNDUxZDViMTVhYWFmM2ZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZDkxZmJhMDViNjY5NDk3NGIzNWM2NmRmZDY3NWExNmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg5OTk5MDk5OTkwNTg3LCAtNzMuODUzMDA0MDAyMTY3MzddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGQ4Njc2NjY0Yjk3NGE3MTg4ODAxMDNhMmY0ZDQ1OTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ODM3YWJkOWI1ZmM0ZTY2YWFiZjY0YzgzNjZlMjI3MiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTgzN2FiZDliNWZjNGU2NmFhYmY2NGM4MzY2ZTIyNzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQ1NDIuMCwgaW5qID02LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RkODY3NjY2NGI5NzRhNzE4ODgwMTAzYTJmNGQ0NTk4LnNldENvbnRlbnQoaHRtbF81ODM3YWJkOWI1ZmM0ZTY2YWFiZjY0YzgzNjZlMjI3Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q5MWZiYTA1YjY2OTQ5NzRiMzVjNjZkZmQ2NzVhMTZiLmJpbmRQb3B1cChwb3B1cF9kZDg2NzY2NjRiOTc0YTcxODg4MDEwM2EyZjRkNDU5OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2UwNWQ2YTliMzNmNDQyMDU5MjNmZTY5MmQwNjc3MzUwID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MjE4NTQ5OTk4NDMxMjYsIC03My44MTg4ODkwMDA0OTgzNl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODQ1YzQ0OTBmNjc0ZDAzYjg4NDI0YjEwNmM3YmIwYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI5ZWE4NGQ3NGEwMjQ3NWVhMmQ2YjA0YmMzZTk4OTBhID0gJCgnPGRpdiBpZD0iaHRtbF8yOWVhODRkNzRhMDI0NzVlYTJkNmIwNGJjM2U5ODkwYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NDYzOS4wLCBpbmogPTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzg0NWM0NDkwZjY3NGQwM2I4ODQyNGIxMDZjN2JiMGEuc2V0Q29udGVudChodG1sXzI5ZWE4NGQ3NGEwMjQ3NWVhMmQ2YjA0YmMzZTk4OTBhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTA1ZDZhOWIzM2Y0NDIwNTkyM2ZlNjkyZDA2NzczNTAuYmluZFBvcHVwKHBvcHVwX2M4NDVjNDQ5MGY2NzRkMDNiODg0MjRiMTA2YzdiYjBhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMGYyZTE1ZjU4MWNjNGY5NGE1NDBlZjBmNDY1N2MwYTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjczMDAyMDk5OTgzODk1LCAtNzMuOTgzNTQzMDAwMDEzMTFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGNiNTFjZThlOWE0NGNlMThhOGE3MTdkNDQwNTM0NmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81N2ZlMmI4Mzg4ZmI0ZDNkYjkwMDIzYzhhY2YwZmM2MiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTdmZTJiODM4OGZiNGQzZGI5MDAyM2M4YWNmMGZjNjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTQ3ODYuMCwgaW5qID02LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhjYjUxY2U4ZTlhNDRjZTE4YThhNzE3ZDQ0MDUzNDZlLnNldENvbnRlbnQoaHRtbF81N2ZlMmI4Mzg4ZmI0ZDNkYjkwMDIzYzhhY2YwZmM2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBmMmUxNWY1ODFjYzRmOTRhNTQwZWYwZjQ2NTdjMGE1LmJpbmRQb3B1cChwb3B1cF84Y2I1MWNlOGU5YTQ0Y2UxOGE4YTcxN2Q0NDA1MzQ2ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzA4ZDI5ZDdhNzEyNTQxMjhhNmJkNjQyZTY5NDQ2YjE1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MzEwMTg5OTk4MTM0MzYsIC03My45ODU5MDkwMDAwMzE3M10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZjI4YzNiZjk2NDg0NmQ5YjY3MTAyYjM4Mzc5ZGEyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlmNjNhZDBhZDMyZDQwMDRhOTUzMTk5ZGYyYjdiZmJhID0gJCgnPGRpdiBpZD0iaHRtbF85ZjYzYWQwYWQzMmQ0MDA0YTk1MzE5OWRmMmI3YmZiYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NDc4Ny4wLCBpbmogPTI0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmMjhjM2JmOTY0ODQ2ZDliNjcxMDJiMzgzNzlkYTJlLnNldENvbnRlbnQoaHRtbF85ZjYzYWQwYWQzMmQ0MDA0YTk1MzE5OWRmMmI3YmZiYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA4ZDI5ZDdhNzEyNTQxMjhhNmJkNjQyZTY5NDQ2YjE1LmJpbmRQb3B1cChwb3B1cF9iZjI4YzNiZjk2NDg0NmQ5YjY3MTAyYjM4Mzc5ZGEyZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzNjNjMwZGFmZTM2NzQ4OWViNTFiZjc2NDY5ZDE1NDI2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC41OTIwMjY5OTk5NjA2MTYsIC03NC4xOTAxMDEwMDAwNDI2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NlZWMwMGI0NzBkMTRkNDhhOTc4NjllMzdmMzdjNTYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjNlNWVhM2E2ODYzNGMxNWE1ZmU4YzAzZGIwZjEyZTMgPSAkKCc8ZGl2IGlkPSJodG1sXzIzZTVlYTNhNjg2MzRjMTVhNWZlOGMwM2RiMGYxMmUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD00ODU0LjAsIGluaiA9MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZWVjMDBiNDcwZDE0ZDQ4YTk3ODY5ZTM3ZjM3YzU2MC5zZXRDb250ZW50KGh0bWxfMjNlNWVhM2E2ODYzNGMxNWE1ZmU4YzAzZGIwZjEyZTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zYzYzMGRhZmUzNjc0ODllYjUxYmY3NjQ2OWQxNTQyNi5iaW5kUG9wdXAocG9wdXBfY2VlYzAwYjQ3MGQxNGQ0OGE5Nzg2OWUzN2YzN2M1NjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jOGMzZWNhYzk5NDU0YzFkOTk2NmZmYjg4ODhjNDIwMyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNTY4Nzc3OTk5ODI3NiwgLTc0LjEwNjYwNDAwMDE1ODQ2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzOTI5YmQ5ZGI0MzRlYjdiZTQwYWRhNzJhNTE3M2Y4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjA1YjVhMjMzM2MxNDBiYzgyZGU2NDQ3Mjc0NWI3OGEgPSAkKCc8ZGl2IGlkPSJodG1sXzYwNWI1YTIzMzNjMTQwYmM4MmRlNjQ0NzI3NDViNzhhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD01MTQ3LjAsIGluaiA9Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MzkyOWJkOWRiNDM0ZWI3YmU0MGFkYTcyYTUxNzNmOC5zZXRDb250ZW50KGh0bWxfNjA1YjVhMjMzM2MxNDBiYzgyZGU2NDQ3Mjc0NWI3OGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jOGMzZWNhYzk5NDU0YzFkOTk2NmZmYjg4ODhjNDIwMy5iaW5kUG9wdXAocG9wdXBfNTM5MjliZDlkYjQzNGViN2JlNDBhZGE3MmE1MTczZjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9iZWVhNTEwMjY2Yjc0NzBkYWE5M2QyYWViYmQ3ZmFjZiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjgwMDI2OTk5OTg4MDcsIC03My44Mzk5NjQwMDA1NDg2Nl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wOTQ0ZmQ5MmE1NTk0ZDg3ODg2ZDNhMjczMDYxNTdlZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdiY2NmNjY0N2IzYjRlNjI4ZjYwY2NkZjc3Yjk2MjE4ID0gJCgnPGRpdiBpZD0iaHRtbF83YmNjZjY2NDdiM2I0ZTYyOGY2MGNjZGY3N2I5NjIxOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NTg2Ny4wLCBpbmogPTkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDk0NGZkOTJhNTU5NGQ4Nzg4NmQzYTI3MzA2MTU3ZWYuc2V0Q29udGVudChodG1sXzdiY2NmNjY0N2IzYjRlNjI4ZjYwY2NkZjc3Yjk2MjE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmVlYTUxMDI2NmI3NDcwZGFhOTNkMmFlYmJkN2ZhY2YuYmluZFBvcHVwKHBvcHVwXzA5NDRmZDkyYTU1OTRkODc4ODZkM2EyNzMwNjE1N2VmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNGQwNzlmNjRhMDYxNGE0MDk1NjBiMGRiMWY0MTgxYjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY4NDI3Njk5OTk2NDc2LCAtNzMuNzgzMDE2MDAwMzg3MjhdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWVkODJjOGNhNzJjNDg4MDg1YzJkNjFhMzM4ZGQ4YWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MzZlM2Q5NmMxYTk0ODIyYTRkMTQ0MDAxNjY2ZjNkZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjM2ZTNkOTZjMWE5NDgyMmE0ZDE0NDAwMTY2NmYzZGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTU5MzcuMCwgaW5qID01My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZWQ4MmM4Y2E3MmM0ODgwODVjMmQ2MWEzMzhkZDhhYS5zZXRDb250ZW50KGh0bWxfNjM2ZTNkOTZjMWE5NDgyMmE0ZDE0NDAwMTY2NmYzZGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80ZDA3OWY2NGEwNjE0YTQwOTU2MGIwZGIxZjQxODFiNy5iaW5kUG9wdXAocG9wdXBfYWVkODJjOGNhNzJjNDg4MDg1YzJkNjFhMzM4ZGQ4YWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl85Nzk0MjQ3YjAyM2M0NzY0OWNjMTIyMTZhZGIxNzViZCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjkzMzk3OTk5NzY2OTQsIC03My43ODg5MzEwMDAzNDQ2OV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOTFkYzA0ZGQxODM0YjBjYWIyMTk2MDE5NDQwMWJlZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM1MmI5MzBkM2Q2ZDRlY2Y5OTYxMjcwMDkwMzhiMWM1ID0gJCgnPGRpdiBpZD0iaHRtbF8zNTJiOTMwZDNkNmQ0ZWNmOTk2MTI3MDA5MDM4YjFjNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NTkzOC4wLCBpbmogPTI3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5MWRjMDRkZDE4MzRiMGNhYjIxOTYwMTk0NDAxYmVlLnNldENvbnRlbnQoaHRtbF8zNTJiOTMwZDNkNmQ0ZWNmOTk2MTI3MDA5MDM4YjFjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk3OTQyNDdiMDIzYzQ3NjQ5Y2MxMjIxNmFkYjE3NWJkLmJpbmRQb3B1cChwb3B1cF9lOTFkYzA0ZGQxODM0YjBjYWIyMTk2MDE5NDQwMWJlZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzczMGViYTcxNGJmNTQxMTJhZTA2NjkwZWNiMTE5MzVlID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC42ODc1MzE5OTk3OTA1NywgLTczLjc4NDkzOTAwMTYyODY2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA3MjBmNmJkMDgyODQ0ODNhMWQ4YWRhYjRkODJmNzdkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzI0M2M1ZjIyNjA5NDExYWFkZGUxNWExOTVjMTkwYmYgPSAkKCc8ZGl2IGlkPSJodG1sX2MyNDNjNWYyMjYwOTQxMWFhZGRlMTVhMTk1YzE5MGJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD01OTQyLjAsIGluaiA9NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNzIwZjZiZDA4Mjg0NDgzYTFkOGFkYWI0ZDgyZjc3ZC5zZXRDb250ZW50KGh0bWxfYzI0M2M1ZjIyNjA5NDExYWFkZGUxNWExOTVjMTkwYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83MzBlYmE3MTRiZjU0MTEyYWUwNjY5MGVjYjExOTM1ZS5iaW5kUG9wdXAocG9wdXBfMDcyMGY2YmQwODI4NDQ4M2ExZDhhZGFiNGQ4MmY3N2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9iNjcwZDgzZmFhYzA0ZTllOGJkNzBiYTE1NmNiOTg2NyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjc2NTA0OTk5ODkyNTksIC03My43NzgwNDUwMDE3ODYxOF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYWU4MGJkZWQyZDM0Zjk1OTFiNTdiZmU2NTU0NmU1ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzNTg3NjY3Nzk2NzRlNTM5NzVhZGY0YTBmYzU3NjRiID0gJCgnPGRpdiBpZD0iaHRtbF81MzU4NzY2Nzc5Njc0ZTUzOTc1YWRmNGEwZmM1NzY0YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NTk1Ni4wLCBpbmogPTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmFlODBiZGVkMmQzNGY5NTkxYjU3YmZlNjU1NDZlNWQuc2V0Q29udGVudChodG1sXzUzNTg3NjY3Nzk2NzRlNTM5NzVhZGY0YTBmYzU3NjRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjY3MGQ4M2ZhYWMwNGU5ZThiZDcwYmExNTZjYjk4NjcuYmluZFBvcHVwKHBvcHVwX2ZhZTgwYmRlZDJkMzRmOTU5MWI1N2JmZTY1NTQ2ZTVkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfOGZmM2QyYzlhOTJmNDFmM2E2YmRlM2IxNWJiNmU2YWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY3MTgyNzk5OTkwMTA5LCAtNzMuNzc0NDk2MDAxMTA1MzhdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODY5Y2RhN2E3MmI5NDE5ZWJhMTM3NzI5MDBiNjJkZjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZTExN2IzZjZmM2I0MTU0ODVlODc1MjkwYmIzNGMzZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMWUxMTdiM2Y2ZjNiNDE1NDg1ZTg3NTI5MGJiMzRjM2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTU5NTguMCwgaW5qID00OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NjljZGE3YTcyYjk0MTllYmExMzc3MjkwMGI2MmRmMi5zZXRDb250ZW50KGh0bWxfMWUxMTdiM2Y2ZjNiNDE1NDg1ZTg3NTI5MGJiMzRjM2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84ZmYzZDJjOWE5MmY0MWYzYTZiZGUzYjE1YmI2ZTZhZS5iaW5kUG9wdXAocG9wdXBfODY5Y2RhN2E3MmI5NDE5ZWJhMTM3NzI5MDBiNjJkZjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl84YzAwMTg5MjhhYTc0NzBkYWNjYjZkNjc0MzU2NWNhMyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjg4OTk3MDAwMDA0NzgsIC03My43ODU4MDUwMDM0MjE4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMxNTljNzNhNWYxMTRiMWFhMTNlY2YzYmJlZDAxNTczID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTMxYzJiMjRlZDc2NDJmZTkxNmYyM2JlOGM0MGQwZTYgPSAkKCc8ZGl2IGlkPSJodG1sX2UzMWMyYjI0ZWQ3NjQyZmU5MTZmMjNiZThjNDBkMGU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD01OTcxLjAsIGluaiA9MzUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzE1OWM3M2E1ZjExNGIxYWExM2VjZjNiYmVkMDE1NzMuc2V0Q29udGVudChodG1sX2UzMWMyYjI0ZWQ3NjQyZmU5MTZmMjNiZThjNDBkMGU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGMwMDE4OTI4YWE3NDcwZGFjY2I2ZDY3NDM1NjVjYTMuYmluZFBvcHVwKHBvcHVwXzMxNTljNzNhNWYxMTRiMWFhMTNlY2YzYmJlZDAxNTczKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYjVlNzRhNzllNDBmNGUxY2EzMmFiOGEzNDgyNzUwMjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjY3ODM2NDk5OTk5NjQwNCwgLTczLjc3OTQ3ODAwMTI2NTNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMThlMzJiYTlmMmVmNDlhMzgxMzE5ODcyZWEzNDQ3MDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYzFjMTgxNGQ3MWE0MWI4YmVlMGZhN2MxZDBiMGM0ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfY2MxYzE4MTRkNzFhNDFiOGJlZTBmYTdjMWQwYjBjNGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTU5NzQuMCwgaW5qID03NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOGUzMmJhOWYyZWY0OWEzODEzMTk4NzJlYTM0NDcwOC5zZXRDb250ZW50KGh0bWxfY2MxYzE4MTRkNzFhNDFiOGJlZTBmYTdjMWQwYjBjNGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNWU3NGE3OWU0MGY0ZTFjYTMyYWI4YTM0ODI3NTAyNS5iaW5kUG9wdXAocG9wdXBfMThlMzJiYTlmMmVmNDlhMzgxMzE5ODcyZWEzNDQ3MDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jNGY2YjdmMWQ0MzE0NjE2OWZlZDEzNGQ5MWMyMDQyNSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuNjYwMzQ3OTk5OTkyODQsIC03My43Njc5NjQwMDI5NjM0XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIzNTdiZTUwOGUxNjQ5OTZhMjZkZmZjODk3ZTg3Nzc4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTM1MWY4OWMyYjNiNDk5ZWEzMjBkNjI2NWZjMDdiNWEgPSAkKCc8ZGl2IGlkPSJodG1sXzEzNTFmODljMmIzYjQ5OWVhMzIwZDYyNjVmYzA3YjVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD01OTkwLjAsIGluaiA9MjguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjM1N2JlNTA4ZTE2NDk5NmEyNmRmZmM4OTdlODc3Nzguc2V0Q29udGVudChodG1sXzEzNTFmODljMmIzYjQ5OWVhMzIwZDYyNjVmYzA3YjVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzRmNmI3ZjFkNDMxNDYxNjlmZWQxMzRkOTFjMjA0MjUuYmluZFBvcHVwKHBvcHVwXzIzNTdiZTUwOGUxNjQ5OTZhMjZkZmZjODk3ZTg3Nzc4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfODM2OTZhMDI5ZGQ3NGVjNTg4ZWJmMzA4NWVlNzQ0MTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjc3OTE0NDk5OTc2ODc2LCAtNzMuOTQ0Nzc1MDAwMjkzOTZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDZiMDAyNzgxYzYwNDkxNzhiOGViMzFmODcyN2QwZjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYzhkNzBhM2UzNWE0ZTM5OGFhMWUwM2ViNDA4NmE5MiA9ICQoJzxkaXYgaWQ9Imh0bWxfZmM4ZDcwYTNlMzVhNGUzOThhYTFlMDNlYjQwODZhOTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTYyMjEuMCwgaW5qID00LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ2YjAwMjc4MWM2MDQ5MTc4YjhlYjMxZjg3MjdkMGY4LnNldENvbnRlbnQoaHRtbF9mYzhkNzBhM2UzNWE0ZTM5OGFhMWUwM2ViNDA4NmE5Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzgzNjk2YTAyOWRkNzRlYzU4OGViZjMwODVlZTc0NDE5LmJpbmRQb3B1cChwb3B1cF80NmIwMDI3ODFjNjA0OTE3OGI4ZWIzMWY4NzI3ZDBmOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2Q4NzBmNjcyZTY4MzRkMDQ5NmFlZWZjNzMyZDM3ZTcxID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MDQwNjU5OTk5ODM0MywgLTczLjkzODU5OTAwMTI5NzddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTdjYTU2ZjRhYzZmNGMyMmFlMDg1NDgwNDk3ODgyZmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YTIwNGI1NjdiZjQ0MDg3YmZjMDNmZTZmOWJlYjk5OCA9ICQoJzxkaXYgaWQ9Imh0bWxfOGEyMDRiNTY3YmY0NDA4N2JmYzAzZmU2ZjliZWI5OTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTYyNDcuMCwgaW5qID0zLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk3Y2E1NmY0YWM2ZjRjMjJhZTA4NTQ4MDQ5Nzg4MmZkLnNldENvbnRlbnQoaHRtbF84YTIwNGI1NjdiZjQ0MDg3YmZjMDNmZTZmOWJlYjk5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q4NzBmNjcyZTY4MzRkMDQ5NmFlZWZjNzMyZDM3ZTcxLmJpbmRQb3B1cChwb3B1cF85N2NhNTZmNGFjNmY0YzIyYWUwODU0ODA0OTc4ODJmZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2RkYmUzZDVmMjEyMTRkNThhOTZiMjBjY2ZjZjE5YTMzID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MzQxOTQ5OTk4OTQ4MjUsIC03My44MTk3NDkwMDE5MTc0Nl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZGJmNTlmZGFhZjc0MzBmYjRjMjQ1Mzk2MjdmZDcyYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RmMDlhZTBkOGYzMTRlNTQ4YWQwNTBlMzU0ZTBkZjUyID0gJCgnPGRpdiBpZD0iaHRtbF9kZjA5YWUwZDhmMzE0ZTU0OGFkMDUwZTM1NGUwZGY1MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NjMyMS4wLCBpbmogPTEwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdkYmY1OWZkYWFmNzQzMGZiNGMyNDUzOTYyN2ZkNzJjLnNldENvbnRlbnQoaHRtbF9kZjA5YWUwZDhmMzE0ZTU0OGFkMDUwZTM1NGUwZGY1Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RkYmUzZDVmMjEyMTRkNThhOTZiMjBjY2ZjZjE5YTMzLmJpbmRQb3B1cChwb3B1cF83ZGJmNTlmZGFhZjc0MzBmYjRjMjQ1Mzk2MjdmZDcyYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2FkZWE4Y2VlOWIyNDRhZTdhNWI1N2E5NzgwYTUzNWIxID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC43MzIzMTQ5OTk5ODk1NywgLTc0LjAwMDUxMTAwMDI3NzY3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkYzhjYmQ4OTkyZDRmMDM5MzVlMTZkMjJmMWVkNjIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDg4MzZkNjI4NGVmNDk2YjhkODU4MGE1MjkzZGJlZDEgPSAkKCc8ZGl2IGlkPSJodG1sXzQ4ODM2ZDYyODRlZjQ5NmI4ZDg1ODBhNTI5M2RiZWQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD02NTQ5LjAsIGluaiA9Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZGM4Y2JkODk5MmQ0ZjAzOTM1ZTE2ZDIyZjFlZDYyMy5zZXRDb250ZW50KGh0bWxfNDg4MzZkNjI4NGVmNDk2YjhkODU4MGE1MjkzZGJlZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZGVhOGNlZTliMjQ0YWU3YTViNTdhOTc4MGE1MzViMS5iaW5kUG9wdXAocG9wdXBfNGRjOGNiZDg5OTJkNGYwMzkzNWUxNmQyMmYxZWQ2MjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl84YjE2ZjAxYmQzNDE0MWU5OWEwM2JkYjhiMjVjZTllNiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODE3MTE1OTk5NzMxNzI2LCAtNzMuOTQ4MDA5MDAwMDU3NjFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTYzODJmN2Q4ZWEwNDg1ZThlMjBiNGMwODQxZWJhMmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNGUwMDJiZTBiZDU0ZWViODUwODliNTg1YTVhNTMzYyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDRlMDAyYmUwYmQ1NGVlYjg1MDg5YjU4NWE1YTUzM2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTY1NjUuMCwgaW5qID0xNi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNjM4MmY3ZDhlYTA0ODVlOGUyMGI0YzA4NDFlYmEyZS5zZXRDb250ZW50KGh0bWxfMDRlMDAyYmUwYmQ1NGVlYjg1MDg5YjU4NWE1YTUzM2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YjE2ZjAxYmQzNDE0MWU5OWEwM2JkYjhiMjVjZTllNi5iaW5kUG9wdXAocG9wdXBfYTYzODJmN2Q4ZWEwNDg1ZThlMjBiNGMwODQxZWJhMmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8yZjNlYWZlYjU3Mjk0OGNkODgxYWRiZTAyZjI5Zjk2NiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODI0MDMxOTk5ODYyODI1LCAtNzMuOTQ0NzU2MDAwMDcwNjddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTE1NDllNTI0MGVhNDRhNDhiMjVmZDI2YTNlNDU4YTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lN2U4Mjk4YjEyYjE0ODU4YTU1NDI0MzZiNDc4NzBiOSA9ICQoJzxkaXYgaWQ9Imh0bWxfZTdlODI5OGIxMmIxNDg1OGE1NTQyNDM2YjQ3ODcwYjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTY2MDEuMCwgaW5qID0zMy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMTU0OWU1MjQwZWE0NGE0OGIyNWZkMjZhM2U0NThhNi5zZXRDb250ZW50KGh0bWxfZTdlODI5OGIxMmIxNDg1OGE1NTQyNDM2YjQ3ODcwYjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZjNlYWZlYjU3Mjk0OGNkODgxYWRiZTAyZjI5Zjk2Ni5iaW5kUG9wdXAocG9wdXBfMTE1NDllNTI0MGVhNDRhNDhiMjVmZDI2YTNlNDU4YTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9hYWU0MjQ0M2RhMjY0ZWY2ODAwMjhhZWU3NTRiZjBkNCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODQ2MTA0OTk5NzI2NDksIC03My45MzYwNzgwMDE3NTI0Nl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MGU1M2QwOWRmNjY0YTc2OTcwNjk5NTFkZjFlZWVlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI4YTM5YjBlZWRjMjQ4NGJhNzkxYjMyNmI0MDlkZWI4ID0gJCgnPGRpdiBpZD0iaHRtbF8yOGEzOWIwZWVkYzI0ODRiYTc5MWIzMjZiNDA5ZGViOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NjcxNC4wLCBpbmogPTQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODBlNTNkMDlkZjY2NGE3Njk3MDY5OTUxZGYxZWVlZTMuc2V0Q29udGVudChodG1sXzI4YTM5YjBlZWRjMjQ4NGJhNzkxYjMyNmI0MDlkZWI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWFlNDI0NDNkYTI2NGVmNjgwMDI4YWVlNzU0YmYwZDQuYmluZFBvcHVwKHBvcHVwXzgwZTUzZDA5ZGY2NjRhNzY5NzA2OTk1MWRmMWVlZWUzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZWUzZmUwODNhZDVmNGJjYzk1YjQ1N2Q3M2NhMWJlMDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg0NjcyNjk5OTkzNDk2LCAtNzMuOTM1NjIyMDAzMTAyMDFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGQxZTkyYmQwZDc1NDVlZmI4NGRmYTk1NjU5ZTBhZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YzMwNDRiOWUzM2E0MzlhYjVhY2RjZTU2NDFiNGMyYSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2MzMDQ0YjllMzNhNDM5YWI1YWNkY2U1NjQxYjRjMmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTY3MTUuMCwgaW5qID0xOC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZDFlOTJiZDBkNzU0NWVmYjg0ZGZhOTU2NTllMGFkNC5zZXRDb250ZW50KGh0bWxfN2MzMDQ0YjllMzNhNDM5YWI1YWNkY2U1NjQxYjRjMmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lZTNmZTA4M2FkNWY0YmNjOTViNDU3ZDczY2ExYmUwNi5iaW5kUG9wdXAocG9wdXBfZGQxZTkyYmQwZDc1NDVlZmI4NGRmYTk1NjU5ZTBhZDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl81NTU4NjlhMmJlMDU0NzdjODk0ZjViZGVhNTkxZjg1OCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODQ3MzU3OTk5ODkzNzgsIC03My45MzUxNzIwMDE1ODE5OF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MzY5MmJkZDc2Mzc0YzViOGM5OGVjNmQzZjk5NjMwYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlkZmNlMDEyNjJmMjQzYWE5ZWU0ODBlN2NlMTFiOWZhID0gJCgnPGRpdiBpZD0iaHRtbF85ZGZjZTAxMjYyZjI0M2FhOWVlNDgwZTdjZTExYjlmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NjcxNi4wLCBpbmogPTIzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQzNjkyYmRkNzYzNzRjNWI4Yzk4ZWM2ZDNmOTk2MzBhLnNldENvbnRlbnQoaHRtbF85ZGZjZTAxMjYyZjI0M2FhOWVlNDgwZTdjZTExYjlmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU1NTg2OWEyYmUwNTQ3N2M4OTRmNWJkZWE1OTFmODU4LmJpbmRQb3B1cChwb3B1cF80MzY5MmJkZDc2Mzc0YzViOGM5OGVjNmQzZjk5NjMwYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2IxNGIyNGRkMjY2NTQ2ZjJhMjg5ZmJlZTljYzQ5MjE5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NDc5OTg5OTk3OTU1MywgLTczLjkzNDY5MzAwMDgzMjA0XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwNjkzMmUyMGU2ZDRiOTNhMzNmMTU4YmU4MjAzMDg3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGRhMDZkYjg1Y2M0NDZlNmFlM2FkYzMyZjU4ZDQ2NjAgPSAkKCc8ZGl2IGlkPSJodG1sX2RkYTA2ZGI4NWNjNDQ2ZTZhZTNhZGMzMmY1OGQ0NjYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD02NzE3LjAsIGluaiA9MTguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzA2OTMyZTIwZTZkNGI5M2EzM2YxNThiZTgyMDMwODcuc2V0Q29udGVudChodG1sX2RkYTA2ZGI4NWNjNDQ2ZTZhZTNhZGMzMmY1OGQ0NjYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjE0YjI0ZGQyNjY1NDZmMmEyODlmYmVlOWNjNDkyMTkuYmluZFBvcHVwKHBvcHVwXzcwNjkzMmUyMGU2ZDRiOTNhMzNmMTU4YmU4MjAzMDg3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMmRhZmZmNTI2MjFhNDhlNTk0OWZlNzNmMjgxYTMwN2QgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg0ODYyNTk5OTkwMTc5LCAtNzMuOTM0MjM5MDAyNjUzMTddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmNlZDg4MWU0ZGUzNGFlNWIwZTQzZTA4ZTUxY2EyZmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZDk4MTY0NWVjOWM0ZTlkYTc0NGUxZDE1ZWE3NzNmYSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2Q5ODE2NDVlYzljNGU5ZGE3NDRlMWQxNWVhNzczZmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTY3MTguMCwgaW5qID0xMy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82Y2VkODgxZTRkZTM0YWU1YjBlNDNlMDhlNTFjYTJmYS5zZXRDb250ZW50KGh0bWxfY2Q5ODE2NDVlYzljNGU5ZGE3NDRlMWQxNWVhNzczZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZGFmZmY1MjYyMWE0OGU1OTQ5ZmU3M2YyODFhMzA3ZC5iaW5kUG9wdXAocG9wdXBfNmNlZDg4MWU0ZGUzNGFlNWIwZTQzZTA4ZTUxY2EyZmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9iYjk1ZGM2OWQ1YjY0MGVmOGExOGY4YzFmNzI2MDBiZCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODQ5MzIwOTk5ODgzMiwgLTczLjkzMzczMTAwMjc2Njg2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdkMmI4YTU5YTEwOTQwY2NiZGIyNzEwOGRhOGE4NWJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWU0NzI2Y2JkYzkyNGQ5YWFhNWU0ZWE3NjhkYjJmYzcgPSAkKCc8ZGl2IGlkPSJodG1sX2FlNDcyNmNiZGM5MjRkOWFhYTVlNGVhNzY4ZGIyZmM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD02NzE5LjAsIGluaiA9MTkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2QyYjhhNTlhMTA5NDBjY2JkYjI3MTA4ZGE4YTg1YmUuc2V0Q29udGVudChodG1sX2FlNDcyNmNiZGM5MjRkOWFhYTVlNGVhNzY4ZGIyZmM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmI5NWRjNjlkNWI2NDBlZjhhMThmOGMxZjcyNjAwYmQuYmluZFBvcHVwKHBvcHVwXzdkMmI4YTU5YTEwOTQwY2NiZGIyNzEwOGRhOGE4NWJlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfY2U4MTcwOWQ3YTE3NGQ2NjgwMTQ3YWY1MzJhZDdjZDUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg0OTg5NDk5OTgwMTQ5LCAtNzMuOTMzMzEwMDAxMDE0MDJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmQxYmYxMzgwZWZlNDA0ZWJiOTJiZTY2YzE2MjU1Y2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZmRlNzcyNmUwYjI0MzI4OGRjNTdkNjJmYzJmNGQ1NyA9ICQoJzxkaXYgaWQ9Imh0bWxfMmZkZTc3MjZlMGIyNDMyODhkYzU3ZDYyZmMyZjRkNTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTY3MjAuMCwgaW5qID0xMS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZDFiZjEzODBlZmU0MDRlYmI5MmJlNjZjMTYyNTVjYS5zZXRDb250ZW50KGh0bWxfMmZkZTc3MjZlMGIyNDMyODhkYzU3ZDYyZmMyZjRkNTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZTgxNzA5ZDdhMTc0ZDY2ODAxNDdhZjUzMmFkN2NkNS5iaW5kUG9wdXAocG9wdXBfYmQxYmYxMzgwZWZlNDA0ZWJiOTJiZTY2YzE2MjU1Y2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9kNmE3MzM3ODA0ZTI0YmUyODJiYjZlMjI3ODFkZTIyYiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODUwNTA1OTk5OTQ2NjcsIC03My45MzI4NjEwMDI4NTcwN10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NDQ5OTY0ZjZjYTM0OTFhYTg5YzkxZjEwNmE2ZmM4OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZkNTEwODYzZjJjZDQyNTk5MWQ2MWI3ODhjNzI4Y2ZkID0gJCgnPGRpdiBpZD0iaHRtbF9mZDUxMDg2M2YyY2Q0MjU5OTFkNjFiNzg4YzcyOGNmZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NjcyMS4wLCBpbmogPTkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODQ0OTk2NGY2Y2EzNDkxYWE4OWM5MWYxMDZhNmZjODguc2V0Q29udGVudChodG1sX2ZkNTEwODYzZjJjZDQyNTk5MWQ2MWI3ODhjNzI4Y2ZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDZhNzMzNzgwNGUyNGJlMjgyYmI2ZTIyNzgxZGUyMmIuYmluZFBvcHVwKHBvcHVwXzg0NDk5NjRmNmNhMzQ5MWFhODljOTFmMTA2YTZmYzg4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNGRjMzZlYzc0YjUyNDVkMmFmZjBlZmNmYjQzOGMxZWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg1MTA5NDk5OTk3NTksIC03My45MzI0MzMwMDE4MjA3NV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYTY2NDVlOWM1Yjk0ZjUxOTY0MzAzZWRlNWM0OWZlYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNmZGRhNGNmM2ZiMjQyZGVhYTI3MDc3Y2MzNWE3OTg3ID0gJCgnPGRpdiBpZD0iaHRtbF8zZmRkYTRjZjNmYjI0MmRlYWEyNzA3N2NjMzVhNzk4NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NjcyMi4wLCBpbmogPTE1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhNjY0NWU5YzViOTRmNTE5NjQzMDNlZGU1YzQ5ZmVhLnNldENvbnRlbnQoaHRtbF8zZmRkYTRjZjNmYjI0MmRlYWEyNzA3N2NjMzVhNzk4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRkYzM2ZWM3NGI1MjQ1ZDJhZmYwZWZjZmI0MzhjMWViLmJpbmRQb3B1cChwb3B1cF9mYTY2NDVlOWM1Yjk0ZjUxOTY0MzAzZWRlNWM0OWZlYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzk4ZWRlNTljNDFiNzQ1ODJhYTJlNjg4MDgzNjg2MjBhID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NTE2OTU5OTk5OTg0MzQsIC03My45MzE5OTUwMDA4MDk1XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQyMjI2NjQwM2I0YjRiZjA5NGY1YTA0NWY4MmM5MTQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTYwZTNjNDA1ZTVlNDVmMTk0MjdmN2U0N2JiZmFkYTcgPSAkKCc8ZGl2IGlkPSJodG1sX2E2MGUzYzQwNWU1ZTQ1ZjE5NDI3ZjdlNDdiYmZhZGE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD02NzIzLjAsIGluaiA9OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MjIyNjY0MDNiNGI0YmYwOTRmNWEwNDVmODJjOTE0OC5zZXRDb250ZW50KGh0bWxfYTYwZTNjNDA1ZTVlNDVmMTk0MjdmN2U0N2JiZmFkYTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85OGVkZTU5YzQxYjc0NTgyYWEyZTY4ODA4MzY4NjIwYS5iaW5kUG9wdXAocG9wdXBfNDIyMjY2NDAzYjRiNGJmMDk0ZjVhMDQ1ZjgyYzkxNDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl84ZThiZDA3ZjA2N2Y0MjE1OGUyNmI1NGQzYzY2ZDY2NyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODI3MDgzOTk5OTUyODQsIC03My44NDk5MTAwMDI1MTg1OF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81Y2RjMTQyZTVjYzY0YmNhYmUwMDM3YjhhZDdhODI4MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBjOTNkZGE0NTQ1NzQwOGM4OGE3Mzg2ZjkyYzAxZjUzID0gJCgnPGRpdiBpZD0iaHRtbF8wYzkzZGRhNDU0NTc0MDhjODhhNzM4NmY5MmMwMWY1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NzU4MC4wLCBpbmogPTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWNkYzE0MmU1Y2M2NGJjYWJlMDAzN2I4YWQ3YTgyODEuc2V0Q29udGVudChodG1sXzBjOTNkZGE0NTQ1NzQwOGM4OGE3Mzg2ZjkyYzAxZjUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGU4YmQwN2YwNjdmNDIxNThlMjZiNTRkM2M2NmQ2NjcuYmluZFBvcHVwKHBvcHVwXzVjZGMxNDJlNWNjNjRiY2FiZTAwMzdiOGFkN2E4MjgxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZGZlZDk0YzgwZGZiNDhkYWFmMjQyMGRjMjNhMGM3OTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgyNjAxNjk5OTgyNTQ4NCwgLTczLjg1OTU4NjAwMjI4OTVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjg0NjM3NjdlMzBmNDkwOGExNTI4YWU4NWQ2ZmI1MTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wODU5N2M1NzNhNDE0NWU3YTllMjg3NDM5MjYyMzkzNyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDg1OTdjNTczYTQxNDVlN2E5ZTI4NzQzOTI2MjM5MzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTc1ODYuMCwgaW5qID01LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY4NDYzNzY3ZTMwZjQ5MDhhMTUyOGFlODVkNmZiNTEzLnNldENvbnRlbnQoaHRtbF8wODU5N2M1NzNhNDE0NWU3YTllMjg3NDM5MjYyMzkzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RmZWQ5NGM4MGRmYjQ4ZGFhZjI0MjBkYzIzYTBjNzk0LmJpbmRQb3B1cChwb3B1cF82ODQ2Mzc2N2UzMGY0OTA4YTE1MjhhZTg1ZDZmYjUxMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2JmOTI3NWI1OWZlNDRlMzBiOWE4ZDVlNWMwYTljNmI3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MTA5NDg5OTk4NTk2NSwgLTczLjkyNzEyMTAwMjI0MTYzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiYTI1MDQyOTFiZTQ0NjI4YjY4NGVhZDg3MmE1M2ExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjRmMGQ5NWUwODZiNDk1OWJiMDNkZjNiYjlkZWUwYjIgPSAkKCc8ZGl2IGlkPSJodG1sX2Y0ZjBkOTVlMDg2YjQ5NTliYjAzZGYzYmI5ZGVlMGIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD03Njg1LjAsIGluaiA9MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYmEyNTA0MjkxYmU0NDYyOGI2ODRlYWQ4NzJhNTNhMS5zZXRDb250ZW50KGh0bWxfZjRmMGQ5NWUwODZiNDk1OWJiMDNkZjNiYjlkZWUwYjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iZjkyNzViNTlmZTQ0ZTMwYjlhOGQ1ZTVjMGE5YzZiNy5iaW5kUG9wdXAocG9wdXBfY2JhMjUwNDI5MWJlNDQ2MjhiNjg0ZWFkODcyYTUzYTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9mNzI3YTdkZmM0MTU0OThiOWRhOGMyMTBjOGY4NTA4ZCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODE2NTU2OTk5OTIyOTcsIC03My45MTY3NjQwMDA4NTg4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNiMTBkNjM2NGRhMjQ2N2I4OGVhNTUzYThlNzQxNmYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMThmZjc1YWZlMGE0NDU5ZGI1YWIxZWI5Mzc2ZTg3NTggPSAkKCc8ZGl2IGlkPSJodG1sXzE4ZmY3NWFmZTBhNDQ1OWRiNWFiMWViOTM3NmU4NzU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD03Njk4LjAsIGluaiA9NDIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2IxMGQ2MzY0ZGEyNDY3Yjg4ZWE1NTNhOGU3NDE2ZjAuc2V0Q29udGVudChodG1sXzE4ZmY3NWFmZTBhNDQ1OWRiNWFiMWViOTM3NmU4NzU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjcyN2E3ZGZjNDE1NDk4YjlkYThjMjEwYzhmODUwOGQuYmluZFBvcHVwKHBvcHVwXzNiMTBkNjM2NGRhMjQ2N2I4OGVhNTUzYThlNzQxNmYwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYjA3NGQ1MzUzMmYyNGJkZTgwYmY5YTg0NGJjY2Y5YjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgxNzIxMDk5OTc1NDM5LCAtNzMuOTE1OTkxMDAzNTAwMDRdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTRmMjI3YTc1MmYwNDBmZTgzNDlkYTIyZTIzMmRjZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOWNlYmJmMmRmYjY0MDAzOTMwMzQ2MjQyMTNiOWE3YiA9ICQoJzxkaXYgaWQ9Imh0bWxfMDljZWJiZjJkZmI2NDAwMzkzMDM0NjI0MjEzYjlhN2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTc2OTkuMCwgaW5qID0yNC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NGYyMjdhNzUyZjA0MGZlODM0OWRhMjJlMjMyZGNlNC5zZXRDb250ZW50KGh0bWxfMDljZWJiZjJkZmI2NDAwMzkzMDM0NjI0MjEzYjlhN2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMDc0ZDUzNTMyZjI0YmRlODBiZjlhODQ0YmNjZjliMS5iaW5kUG9wdXAocG9wdXBfNTRmMjI3YTc1MmYwNDBmZTgzNDlkYTIyZTIzMmRjZTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8xZTE3N2Q5OTZjZGU0YmZkODBkMmIyODliNGVjYjdlNSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODE4NTA2OTk5OTYxMDQsIC03My45MTQ0NzIwMDI5MjE2M10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNWEzMzU1N2JjNzA0YjQ4OTMwOTAzYWRiMTEwN2ZkNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEzZGRhODhlNzM4MzQ5OGI4Nzg5Yzc0M2RmYmZkNmI0ID0gJCgnPGRpdiBpZD0iaHRtbF8xM2RkYTg4ZTczODM0OThiODc4OWM3NDNkZmJmZDZiNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NzcwMi4wLCBpbmogPTEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzVhMzM1NTdiYzcwNGI0ODkzMDkwM2FkYjExMDdmZDQuc2V0Q29udGVudChodG1sXzEzZGRhODhlNzM4MzQ5OGI4Nzg5Yzc0M2RmYmZkNmI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWUxNzdkOTk2Y2RlNGJmZDgwZDJiMjg5YjRlY2I3ZTUuYmluZFBvcHVwKHBvcHVwX2M1YTMzNTU3YmM3MDRiNDg5MzA5MDNhZGIxMTA3ZmQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYmU1ZGNlNzFhZGI2NGRkY2JkODZlMGJjYTAwYTJmYTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgxODk1NTk5OTk1MDg1LCAtNzMuOTE0MDMxMDAyNDcwMTNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjJjZjdlYjNlMDRjNDU3YzliNjFlZDQ0YjY5NjdlMmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZGY5ODE0MGU1M2E0ZjUyODAyNjZlZDkzYTQ5ZmUzZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZWRmOTgxNDBlNTNhNGY1MjgwMjY2ZWQ5M2E0OWZlM2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTc3MDMuMCwgaW5qID0zLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YyY2Y3ZWIzZTA0YzQ1N2M5YjYxZWQ0NGI2OTY3ZTJjLnNldENvbnRlbnQoaHRtbF9lZGY5ODE0MGU1M2E0ZjUyODAyNjZlZDkzYTQ5ZmUzZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JlNWRjZTcxYWRiNjRkZGNiZDg2ZTBiY2EwMGEyZmEwLmJpbmRQb3B1cChwb3B1cF9mMmNmN2ViM2UwNGM0NTdjOWI2MWVkNDRiNjk2N2UyYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzEyYmRjYTk2MzRlZDQ2YWFhYmY0NTM3NmE0YmVjODAyID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MTk1NDE5OTk3NTMyMSwgLTczLjkxMzUyMDAwMTg3MjM3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgxZTA5MWI3ZGI5MjRlZDI5NTYyZDczM2E3Mjg2YTBlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzY1MWU3ZWMyMzI3NGEwY2I3NzBjMDYwMDNmODYzOWQgPSAkKCc8ZGl2IGlkPSJodG1sXzc2NTFlN2VjMjMyNzRhMGNiNzcwYzA2MDAzZjg2MzlkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD03NzA0LjAsIGluaiA9MTkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODFlMDkxYjdkYjkyNGVkMjk1NjJkNzMzYTcyODZhMGUuc2V0Q29udGVudChodG1sXzc2NTFlN2VjMjMyNzRhMGNiNzcwYzA2MDAzZjg2MzlkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTJiZGNhOTYzNGVkNDZhYWFiZjQ1Mzc2YTRiZWM4MDIuYmluZFBvcHVwKHBvcHVwXzgxZTA5MWI3ZGI5MjRlZDI5NTYyZDczM2E3Mjg2YTBlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZTE0M2IwM2ZhZjM0NGUxMmEyNDI3MWUyMDBiMzkwN2MgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgyMDEzMjk5OTg3Mjc4LCAtNzMuOTEzMDYzMDAzMTY0NTFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWZkZTNkMDI4OGJmNDVlM2FmYWYyYWRlMTVhYjZhMjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iM2FjYTU0OTBkNWY0ZTg0YWRhYzMyMDFkNDg2OTJjZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjNhY2E1NDkwZDVmNGU4NGFkYWMzMjAxZDQ4NjkyY2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTc3MDUuMCwgaW5qID0xNy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZmRlM2QwMjg4YmY0NWUzYWZhZjJhZGUxNWFiNmEyNC5zZXRDb250ZW50KGh0bWxfYjNhY2E1NDkwZDVmNGU4NGFkYWMzMjAxZDQ4NjkyY2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMTQzYjAzZmFmMzQ0ZTEyYTI0MjcxZTIwMGIzOTA3Yy5iaW5kUG9wdXAocG9wdXBfMWZkZTNkMDI4OGJmNDVlM2FmYWYyYWRlMTVhYjZhMjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jZjlkYmRjM2RlMmM0ZmU0YjM2MWZiMTZjNzY0MDljNCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODIyMTA2OTk5ODQyMzA1LCAtNzMuOTExNzQ1MDAyNDU0MzJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2M1NTNmMWViNTQwNGNiNDgyMDI1YWM5ZTVjNjUxZTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNjQyMjEwZDAyZDI0NWRiYWUwMDExNzBlYmM1NDdhYSA9ICQoJzxkaXYgaWQ9Imh0bWxfYjY0MjIxMGQwMmQyNDVkYmFlMDAxMTcwZWJjNTQ3YWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTc3MDguMCwgaW5qID0wLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdjNTUzZjFlYjU0MDRjYjQ4MjAyNWFjOWU1YzY1MWUxLnNldENvbnRlbnQoaHRtbF9iNjQyMjEwZDAyZDI0NWRiYWUwMDExNzBlYmM1NDdhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NmOWRiZGMzZGUyYzRmZTRiMzYxZmIxNmM3NjQwOWM0LmJpbmRQb3B1cChwb3B1cF83YzU1M2YxZWI1NDA0Y2I0ODIwMjVhYzllNWM2NTFlMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzQ2NmE3MjZiZTEyNTRlMTFiOTY0ZmE2NjgwNTNhMGYzID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44Mjk0NTE5OTk4NTA5MywgLTczLjkwNjU3MTAwMDAzMTUyXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZkYTg0ODY0NDUzMjQzNGNiOWU2NDc0ZGU2MDA5YmNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjY4ODFlNWNiYWI0NDNjYzlkOTM2YmU2OTkyZjI1MWYgPSAkKCc8ZGl2IGlkPSJodG1sXzI2ODgxZTVjYmFiNDQzY2M5ZDkzNmJlNjk5MmYyNTFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD03NzE3LjAsIGluaiA9MjYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmRhODQ4NjQ0NTMyNDM0Y2I5ZTY0NzRkZTYwMDliY2Quc2V0Q29udGVudChodG1sXzI2ODgxZTVjYmFiNDQzY2M5ZDkzNmJlNjk5MmYyNTFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDY2YTcyNmJlMTI1NGUxMWI5NjRmYTY2ODA1M2EwZjMuYmluZFBvcHVwKHBvcHVwX2ZkYTg0ODY0NDUzMjQzNGNiOWU2NDc0ZGU2MDA5YmNkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMTAzNjkxOTBmYjc1NGVjNjhlNjgyNWI1YmY5Yzc3NTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgzMTA1ODk5OTk3MDc4LCAtNzMuOTA1ODQwMDAwODc3NTVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODNhZGIxMGI1OTUzNDBlYzhhNzhlZThjYzNiOWJhYmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NDBmZTljZjVkYWQ0NDA2YmUwY2I0MTk4Mjg3MTExMiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTQwZmU5Y2Y1ZGFkNDQwNmJlMGNiNDE5ODI4NzExMTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTc3MTguMCwgaW5qID0yNy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84M2FkYjEwYjU5NTM0MGVjOGE3OGVlOGNjM2I5YmFiYS5zZXRDb250ZW50KGh0bWxfNTQwZmU5Y2Y1ZGFkNDQwNmJlMGNiNDE5ODI4NzExMTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMDM2OTE5MGZiNzU0ZWM2OGU2ODI1YjViZjljNzc1My5iaW5kUG9wdXAocG9wdXBfODNhZGIxMGI1OTUzNDBlYzhhNzhlZThjYzNiOWJhYmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl83N2IzMTEwZmE2ZDc0NThmYTdhNTg2YjA4Njc0NzhiZiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODMyNzA3OTk5OTAwMTE2LCAtNzMuOTA1MDUxMDAxNDE2NjhdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzhiMTcwODkxZjQ3NDg1NTk3ZjE1MDEyZGVhNmI1ZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNjEyMDQ1ODIyNWI0NmJkYWJkN2VlZWQ3MWQ4NWMxMyA9ICQoJzxkaXYgaWQ9Imh0bWxfZDYxMjA0NTgyMjViNDZiZGFiZDdlZWVkNzFkODVjMTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTc3MTkuMCwgaW5qID0yMy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jOGIxNzA4OTFmNDc0ODU1OTdmMTUwMTJkZWE2YjVkZC5zZXRDb250ZW50KGh0bWxfZDYxMjA0NTgyMjViNDZiZGFiZDdlZWVkNzFkODVjMTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83N2IzMTEwZmE2ZDc0NThmYTdhNTg2YjA4Njc0NzhiZi5iaW5kUG9wdXAocG9wdXBfYzhiMTcwODkxZjQ3NDg1NTk3ZjE1MDEyZGVhNmI1ZGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9mMDllZDgxZjNkZDE0ZjNmODRjYzE4NmEyZWMxNzc2OSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODM1MDA5OTk5OTk4NzksIC03My45MDM1MjEwMDIwNTU2MV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMzAxYzFjM2VlYTY0YmRhOGM5NzZiZWY2MzQzNDYxOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU0YTlhOTVkZDYzODQyYTY4YjE3Y2Q2ZGJjZWRkMzZlID0gJCgnPGRpdiBpZD0iaHRtbF81NGE5YTk1ZGQ2Mzg0MmE2OGIxN2NkNmRiY2VkZDM2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NzcyMC4wLCBpbmogPTI1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzMDFjMWMzZWVhNjRiZGE4Yzk3NmJlZjYzNDM0NjE4LnNldENvbnRlbnQoaHRtbF81NGE5YTk1ZGQ2Mzg0MmE2OGIxN2NkNmRiY2VkZDM2ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YwOWVkODFmM2RkMTRmM2Y4NGNjMTg2YTJlYzE3NzY5LmJpbmRQb3B1cChwb3B1cF9mMzAxYzFjM2VlYTY0YmRhOGM5NzZiZWY2MzQzNDYxOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzJhNTU2MDY5MjVlOTQ5ZDM5YWE0NGFmM2YzMjBlMTk5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MzcxNzE5OTk5NzI3MywgLTczLjkwMTk2NzAwMTk5NTE5XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NmOGZjYTdmY2EzNDRjNjY5ZDQ4MWFlYjMwMWEzYWZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjEyMTAzNzJjY2Y5NDRjOTk4N2M1NGUwMDk4ZDFlZWMgPSAkKCc8ZGl2IGlkPSJodG1sXzYxMjEwMzcyY2NmOTQ0Yzk5ODdjNTRlMDA5OGQxZWVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD03NzIxLjAsIGluaiA9MTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2Y4ZmNhN2ZjYTM0NGM2NjlkNDgxYWViMzAxYTNhZmUuc2V0Q29udGVudChodG1sXzYxMjEwMzcyY2NmOTQ0Yzk5ODdjNTRlMDA5OGQxZWVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmE1NTYwNjkyNWU5NDlkMzlhYTQ0YWYzZjMyMGUxOTkuYmluZFBvcHVwKHBvcHVwX2NmOGZjYTdmY2EzNDRjNjY5ZDQ4MWFlYjMwMWEzYWZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYTNhN2Y2OTc2NDQyNDM2MTg4NDk5MzIxNGEzN2M0YTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgzOTY3NTk5OTk5MjczNSwgLTczLjkwMDEwNzAwMDExMzY0XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlOWI1NjVlODYwNDQ4ZWRhZGQ1MGVmZjkxNDQ3OTcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTQxNjM5MWQyM2EwNGZkYTgxMmJmOWVhNzY5OGM2YzYgPSAkKCc8ZGl2IGlkPSJodG1sX2U0MTYzOTFkMjNhMDRmZGE4MTJiZjllYTc2OThjNmM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD03NzIyLjAsIGluaiA9MTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWU5YjU2NWU4NjA0NDhlZGFkZDUwZWZmOTE0NDc5NzIuc2V0Q29udGVudChodG1sX2U0MTYzOTFkMjNhMDRmZGE4MTJiZjllYTc2OThjNmM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTNhN2Y2OTc2NDQyNDM2MTg4NDk5MzIxNGEzN2M0YTkuYmluZFBvcHVwKHBvcHVwXzFlOWI1NjVlODYwNDQ4ZWRhZGQ1MGVmZjkxNDQ3OTcyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZDk1MzQ2OTg3NDY0NGVmZGFkNjZmZTI2MTIyMTcxZTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg0MDk2ODk5OTkzMjQ2LCAtNzMuODk5MTczMDAxMTYzNF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMjA0YTQxOWE4OGE0NWRmOGM2YjY2YWNkODYyNTliNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwYzhmNGY5OWY3MjRhYWNiZjk2MTM0NzczNDgxMjkzID0gJCgnPGRpdiBpZD0iaHRtbF9lMGM4ZjRmOTlmNzI0YWFjYmY5NjEzNDc3MzQ4MTI5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NzcyMy4wLCBpbmogPTE0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIyMDRhNDE5YTg4YTQ1ZGY4YzZiNjZhY2Q4NjI1OWI2LnNldENvbnRlbnQoaHRtbF9lMGM4ZjRmOTlmNzI0YWFjYmY5NjEzNDc3MzQ4MTI5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q5NTM0Njk4NzQ2NDRlZmRhZDY2ZmUyNjEyMjE3MWUwLmJpbmRQb3B1cChwb3B1cF8yMjA0YTQxOWE4OGE0NWRmOGM2YjY2YWNkODYyNTliNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2ExYzY3M2E5MWZkZjRkNTI4NmFmMWU4NTY5YmRiOTk0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NDIzNDY5OTk5ODkxMjUsIC03My44OTgzNTAwMDA1NTM3NV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNDQxYTU2NDY0Zjk0ZTBmOTQ5MTE2NzMwMDIzMzRhYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzODJlMjRkYTRlZTRmZWY5YmYwYzNhM2JmOTU2MjQ0ID0gJCgnPGRpdiBpZD0iaHRtbF80MzgyZTI0ZGE0ZWU0ZmVmOWJmMGMzYTNiZjk1NjI0NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NzcyNC4wLCBpbmogPTE4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E0NDFhNTY0NjRmOTRlMGY5NDkxMTY3MzAwMjMzNGFjLnNldENvbnRlbnQoaHRtbF80MzgyZTI0ZGE0ZWU0ZmVmOWJmMGMzYTNiZjk1NjI0NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ExYzY3M2E5MWZkZjRkNTI4NmFmMWU4NTY5YmRiOTk0LmJpbmRQb3B1cChwb3B1cF9hNDQxYTU2NDY0Zjk0ZTBmOTQ5MTE2NzMwMDIzMzRhYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2EyMDJiZTdkNGRhYzQ5ZDdiZDhiMjIyNzJkNTE5NWFlID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NDUzNjE5OTk4OTk3OCwgLTczLjg5NjgzNzAwMTE0NjE3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E0OWY2MzE2NDY2ZjRiNmE5NDY1NzE0ZDhhZGJlNzdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWRjMzc0YjllZDI1NGRjNGFjMjkwN2E0ODMyNDIxM2YgPSAkKCc8ZGl2IGlkPSJodG1sX2FkYzM3NGI5ZWQyNTRkYzRhYzI5MDdhNDgzMjQyMTNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD03NzI2LjAsIGluaiA9OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNDlmNjMxNjQ2NmY0YjZhOTQ2NTcxNGQ4YWRiZTc3Zi5zZXRDb250ZW50KGh0bWxfYWRjMzc0YjllZDI1NGRjNGFjMjkwN2E0ODMyNDIxM2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hMjAyYmU3ZDRkYWM0OWQ3YmQ4YjIyMjcyZDUxOTVhZS5iaW5kUG9wdXAocG9wdXBfYTQ5ZjYzMTY0NjZmNGI2YTk0NjU3MTRkOGFkYmU3N2YpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8xZTY2OGVmMzliOGI0MjE1ODBlMjAzYWVmZjc3MjA0OSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODQ3ODAxOTk5ODI0NDU1LCAtNzMuODk1NTcwMDAwMTk3ODRdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzRmNjBlYmViOWViNDczMWE4ZDAzMzU3ZGM5MTExOTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NmM4NzBmZWIxNGU0ZDBjYjZlZGRmMGUyZDVkZjgzMSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzZjODcwZmViMTRlNGQwY2I2ZWRkZjBlMmQ1ZGY4MzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTc3MjcuMCwgaW5qID0wLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc0ZjYwZWJlYjllYjQ3MzFhOGQwMzM1N2RjOTExMTk0LnNldENvbnRlbnQoaHRtbF83NmM4NzBmZWIxNGU0ZDBjYjZlZGRmMGUyZDVkZjgzMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFlNjY4ZWYzOWI4YjQyMTU4MGUyMDNhZWZmNzcyMDQ5LmJpbmRQb3B1cChwb3B1cF83NGY2MGViZWI5ZWI0NzMxYThkMDMzNTdkYzkxMTE5NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzQ4NjRmMTllNzg2ZDRlOGNhZWE5NDNiOTY0MmZkMTY3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NTE0MDM5OTk3ODE2NDUsIC03My44OTM0MjYwMDAyNzc4M10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MDllMTlhMTNjMWI0OWJlYTMzZWY1ZTE0NDhlODFiNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZjZjc4ODVhOTYzNjQxMzk4NTM4YWJhN2Q1MjNlMjQ3ID0gJCgnPGRpdiBpZD0iaHRtbF9mY2Y3ODg1YTk2MzY0MTM5ODUzOGFiYTdkNTIzZTI0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9NzczMC4wLCBpbmogPTE0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgwOWUxOWExM2MxYjQ5YmVhMzNlZjVlMTQ0OGU4MWI3LnNldENvbnRlbnQoaHRtbF9mY2Y3ODg1YTk2MzY0MTM5ODUzOGFiYTdkNTIzZTI0Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ4NjRmMTllNzg2ZDRlOGNhZWE5NDNiOTY0MmZkMTY3LmJpbmRQb3B1cChwb3B1cF84MDllMTlhMTNjMWI0OWJlYTMzZWY1ZTE0NDhlODFiNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2FhNGZkNDJkMzlmMTQ5MzQ5ZjA4OGY0OTJhZTAzMDJiID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NTI3Njk5OTk4NzEwOCwgLTczLjg5MjE2NzAwMzI3OTE0XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RlYjZmMDY4ODcxZTQzYWFiMDhkM2JlNDBjYWM4YjY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzllYTU4NTBlMThmNGZmMmE0NTU1MDVlNTAwZDQzNjggPSAkKCc8ZGl2IGlkPSJodG1sXzc5ZWE1ODUwZTE4ZjRmZjJhNDU1NTA1ZTUwMGQ0MzY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD03NzMxLjAsIGluaiA9OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZWI2ZjA2ODg3MWU0M2FhYjA4ZDNiZTQwY2FjOGI2NS5zZXRDb250ZW50KGh0bWxfNzllYTU4NTBlMThmNGZmMmE0NTU1MDVlNTAwZDQzNjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYTRmZDQyZDM5ZjE0OTM0OWYwODhmNDkyYWUwMzAyYi5iaW5kUG9wdXAocG9wdXBfZGViNmYwNjg4NzFlNDNhYWIwOGQzYmU0MGNhYzhiNjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9lNDc4ODkwZTNhN2I0MjFmOTIxNmIxMDgzN2VjZDQ5OSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODEwOTQ4OTk5ODU5NjUsIC03My45MjcxMjEwMDIyNDE2M10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NDUxNWRlMDQzZjk0YjgyYWVkYjIxY2NkNGZjODJlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IyOTZhYjg2MWJmNzQ0YWFiZDk2OTNkMTMzMzk0OWIxID0gJCgnPGRpdiBpZD0iaHRtbF9iMjk2YWI4NjFiZjc0NGFhYmQ5NjkzZDEzMzM5NDliMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9Nzc0OC4wLCBpbmogPTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTQ1MTVkZTA0M2Y5NGI4MmFlZGIyMWNjZDRmYzgyZTEuc2V0Q29udGVudChodG1sX2IyOTZhYjg2MWJmNzQ0YWFiZDk2OTNkMTMzMzk0OWIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTQ3ODg5MGUzYTdiNDIxZjkyMTZiMTA4MzdlY2Q0OTkuYmluZFBvcHVwKHBvcHVwXzk0NTE1ZGUwNDNmOTRiODJhZWRiMjFjY2Q0ZmM4MmUxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZTY5MGUwNjYzNzE0NDIzN2E1YTMzNmYyNDMzN2RlZjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg0NjY1ODk5OTk5NjExNiwgLTczLjg5NjE3NzAwMTU1OTVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmZiOGFiZjkxNjYyNDI0M2IzY2RiZGJlZjQ1YzQ1YWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZWFlZWI1YWRkZWE0N2JkYTBhYzNlNjI4MGI3YWNkZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZGVhZWViNWFkZGVhNDdiZGEwYWMzZTYyODBiN2FjZGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTc3NTAuMCwgaW5qID02Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZmI4YWJmOTE2NjI0MjQzYjNjZGJkYmVmNDVjNDVhYS5zZXRDb250ZW50KGh0bWxfZGVhZWViNWFkZGVhNDdiZGEwYWMzZTYyODBiN2FjZGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lNjkwZTA2NjM3MTQ0MjM3YTVhMzM2ZjI0MzM3ZGVmMy5iaW5kUG9wdXAocG9wdXBfMmZiOGFiZjkxNjYyNDI0M2IzY2RiZGJlZjQ1YzQ1YWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9kZDM3MGQyNWM4NzA0MTMyYjFkNDJiODg1OTQ2M2E1YyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODM1OTI2OTk5ODkyNDY1LCAtNzMuOTAyOTA2MDAxODU4MzNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWI1ZmRkMjVlOWY4NDdjMWE4YzZlMGU5MWQ1YjM4YjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xN2RiYzQxZWMzNDU0NjZiYTA5YTExY2ZiOTM0NDhiYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTdkYmM0MWVjMzQ1NDY2YmEwOWExMWNmYjkzNDQ4YmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTc3NTUuMCwgaW5qID0xNy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYjVmZGQyNWU5Zjg0N2MxYThjNmUwZTkxZDViMzhiMy5zZXRDb250ZW50KGh0bWxfMTdkYmM0MWVjMzQ1NDY2YmEwOWExMWNmYjkzNDQ4YmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZDM3MGQyNWM4NzA0MTMyYjFkNDJiODg1OTQ2M2E1Yy5iaW5kUG9wdXAocG9wdXBfYWI1ZmRkMjVlOWY4NDdjMWE4YzZlMGU5MWQ1YjM4YjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9kMTdiMzllNGFjYmQ0YWU3ODY4ZTY2Yzc3YzJlYWU4ZCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODM4MTk3OTk5OTQ5NzQsIC03My45MDExNzUwMDA5MDg1Ml0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NmQwNjAzZmUyYTU0NmM5OWNlMmUxZTM3MmRmMzliOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U3MjcxOGYwZDE5NzRmMmFhOTI5OWJhMDEyM2I5MTMyID0gJCgnPGRpdiBpZD0iaHRtbF9lNzI3MThmMGQxOTc0ZjJhYTkyOTliYTAxMjNiOTEzMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9Nzc1Ni4wLCBpbmogPTI5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc2ZDA2MDNmZTJhNTQ2Yzk5Y2UyZTFlMzcyZGYzOWI4LnNldENvbnRlbnQoaHRtbF9lNzI3MThmMGQxOTc0ZjJhYTkyOTliYTAxMjNiOTEzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QxN2IzOWU0YWNiZDRhZTc4NjhlNjZjNzdjMmVhZThkLmJpbmRQb3B1cChwb3B1cF83NmQwNjAzZmUyYTU0NmM5OWNlMmUxZTM3MmRmMzliOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzQ3MmQ0OGNiMjcwYTQwNGI4N2Q2NzdjMDY3MTNlNWE5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MjIzMjM5OTk5NjI5NCwgLTczLjkxMDcwMDAwMjQ1MjU2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0YTljZDQ3ZTMwMzRkMWI5ODZlZWQ4NWZjZTI0ZmY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmU3M2FiMWVkZTBkNGQyMzlhNjdhNTgxMjI2MTcwMWMgPSAkKCc8ZGl2IGlkPSJodG1sXzJlNzNhYjFlZGUwZDRkMjM5YTY3YTU4MTIyNjE3MDFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD03NzY1LjAsIGluaiA9MTIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDRhOWNkNDdlMzAzNGQxYjk4NmVlZDg1ZmNlMjRmZjYuc2V0Q29udGVudChodG1sXzJlNzNhYjFlZGUwZDRkMjM5YTY3YTU4MTIyNjE3MDFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDcyZDQ4Y2IyNzBhNDA0Yjg3ZDY3N2MwNjcxM2U1YTkuYmluZFBvcHVwKHBvcHVwXzQ0YTljZDQ3ZTMwMzRkMWI5ODZlZWQ4NWZjZTI0ZmY2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNzFiYzQyZjQ0ZTY1NDU0MzkwYTAwZjgzMWFiYjdjOTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgxMzA4Njk5OTk5NzU2LCAtNzMuOTA0MTgzMDAxMjY2MDJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDdjYWQwMzM0Y2YxNDMzYmE2NWM0NjA2ODZiYjE2ODYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYjc3ZDA1NWU0MWM0YzA5YjM1OWRjZTI1NTkwYWUwZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYmI3N2QwNTVlNDFjNGMwOWIzNTlkY2UyNTU5MGFlMGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTc5MjAuMCwgaW5qID0yLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3Y2FkMDMzNGNmMTQzM2JhNjVjNDYwNjg2YmIxNjg2LnNldENvbnRlbnQoaHRtbF9iYjc3ZDA1NWU0MWM0YzA5YjM1OWRjZTI1NTkwYWUwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcxYmM0MmY0NGU2NTQ1NDM5MGEwMGY4MzFhYmI3Yzk1LmJpbmRQb3B1cChwb3B1cF9kN2NhZDAzMzRjZjE0MzNiYTY1YzQ2MDY4NmJiMTY4NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzJlNjExOGYzYzVjNjRhNDFiMTYyMWJlY2M4N2U2YTEwID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44Njk1MzI5OTk4NDAyOSwgLTczLjg1NzQ1MDAwMjA0NzQ2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYwZGM5ODkyMjkwMjQ5Mjc4YmZkZjUwYTM1NzEzNzkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOThkZTk4NTRhNTg1NDg1NzgwM2U3YWZhMWYxMWZhNDMgPSAkKCc8ZGl2IGlkPSJodG1sXzk4ZGU5ODU0YTU4NTQ4NTc4MDNlN2FmYTFmMTFmYTQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD04MDA1LjAsIGluaiA9NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MGRjOTg5MjI5MDI0OTI3OGJmZGY1MGEzNTcxMzc5MS5zZXRDb250ZW50KGh0bWxfOThkZTk4NTRhNTg1NDg1NzgwM2U3YWZhMWYxMWZhNDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZTYxMThmM2M1YzY0YTQxYjE2MjFiZWNjODdlNmExMC5iaW5kUG9wdXAocG9wdXBfNjBkYzk4OTIyOTAyNDkyNzhiZmRmNTBhMzU3MTM3OTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl83MGFiZjExMGJkODE0ODMyOTRjNDBjODhhMTkzOWQzNSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODE0MTMxOTk5OTI1NjUsIC03My45MDM4MDQwMDEyODFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODlhYTQ0MGU1YWVmNGFkODkxYmYyY2M0NDk5NDM2NWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNDViNWFiNDE0M2I0OTc2ODdiZWY2NDIzOTNmOTk1NyA9ICQoJzxkaXYgaWQ9Imh0bWxfYTQ1YjVhYjQxNDNiNDk3Njg3YmVmNjQyMzkzZjk5NTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTgwNTkuMCwgaW5qID0zLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5YWE0NDBlNWFlZjRhZDg5MWJmMmNjNDQ5OTQzNjVjLnNldENvbnRlbnQoaHRtbF9hNDViNWFiNDE0M2I0OTc2ODdiZWY2NDIzOTNmOTk1Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcwYWJmMTEwYmQ4MTQ4MzI5NGM0MGM4OGExOTM5ZDM1LmJpbmRQb3B1cChwb3B1cF84OWFhNDQwZTVhZWY0YWQ4OTFiZjJjYzQ0OTk0MzY1YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzRiNmQ4MDEwMmUyOTRkMGFiZTg5NzQzYWU2ZWE0NDgyID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NDE4MzI5OTk4NTk1MzQsIC03My44ODM4NzcwMDAwNjQ5XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZlODdjMThlZGY2NTRmNjlhZmI5MTljMTJlM2FlNzMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDJiZmY5Zjc1MThmNDM5Mzg1YzUzZTBiMWYyNzdjNGQgPSAkKCc8ZGl2IGlkPSJodG1sXzAyYmZmOWY3NTE4ZjQzOTM4NWM1M2UwYjFmMjc3YzRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD04MTIwLjAsIGluaiA9MTIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmU4N2MxOGVkZjY1NGY2OWFmYjkxOWMxMmUzYWU3MzEuc2V0Q29udGVudChodG1sXzAyYmZmOWY3NTE4ZjQzOTM4NWM1M2UwYjFmMjc3YzRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGI2ZDgwMTAyZTI5NGQwYWJlODk3NDNhZTZlYTQ0ODIuYmluZFBvcHVwKHBvcHVwXzZlODdjMThlZGY2NTRmNjlhZmI5MTljMTJlM2FlNzMxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNWE1NDhhMDhmNWQ3NDlmOTk5Y2Q2MzBjNzM1MTdkZGUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg4NDcxMDk5OTk3MzMzNiwgLTczLjgzMTMwMjAwMzM1MTk2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0MWRjNjk0ZjRjODRiMjU5NmJmM2EyN2I0YmNmODBjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTA2ZjE0YzVkOTNjNGFhZjg0YTJhMTQ5OTFmY2I5NjAgPSAkKCc8ZGl2IGlkPSJodG1sXzUwNmYxNGM1ZDkzYzRhYWY4NGEyYTE0OTkxZmNiOTYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD04MTU4LjAsIGluaiA9NDguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDQxZGM2OTRmNGM4NGIyNTk2YmYzYTI3YjRiY2Y4MGMuc2V0Q29udGVudChodG1sXzUwNmYxNGM1ZDkzYzRhYWY4NGEyYTE0OTkxZmNiOTYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWE1NDhhMDhmNWQ3NDlmOTk5Y2Q2MzBjNzM1MTdkZGUuYmluZFBvcHVwKHBvcHVwXzQ0MWRjNjk0ZjRjODRiMjU5NmJmM2EyN2I0YmNmODBjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMWFiM2MwYzBmMWFiNDJjMGJkYmNkZTQ3ODg2ZGJkMGMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg3NTg3NDk5OTkzNDAzNCwgLTczLjg0OTg4NDAwMjQ2NDY4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1MmI3ODFkYjJjOTQ2OTdiODUwYTk5NjU1YTg1MTIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjkwMTBhY2UzYmI3NGEyMDkwYjUxNjUyMGRiMGRkYjUgPSAkKCc8ZGl2IGlkPSJodG1sXzY5MDEwYWNlM2JiNzRhMjA5MGI1MTY1MjBkYjBkZGI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD04MTk4LjAsIGluaiA9OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NTJiNzgxZGIyYzk0Njk3Yjg1MGE5OTY1NWE4NTEyMi5zZXRDb250ZW50KGh0bWxfNjkwMTBhY2UzYmI3NGEyMDkwYjUxNjUyMGRiMGRkYjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xYWIzYzBjMGYxYWI0MmMwYmRiY2RlNDc4ODZkYmQwYy5iaW5kUG9wdXAocG9wdXBfNTUyYjc4MWRiMmM5NDY5N2I4NTBhOTk2NTVhODUxMjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl81OWNmZmU3NDhiNTY0OGE0YWQzZTlkZjBmMTRlNGUyZCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODQ4ODIwOTk5OTE5MjEsIC03My44NTQ2NjMwMDA5NTU5Ml0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZWZkMjVhOWI2MmY0MzYyYjJhNjQzMDhlYzAwYTg0YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5ODgyMTY5OWFiMjQxMTVhYWIyM2Y3ZjRlYjVlZDMzID0gJCgnPGRpdiBpZD0iaHRtbF84OTg4MjE2OTlhYjI0MTE1YWFiMjNmN2Y0ZWI1ZWQzMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9ODI5Mi4wLCBpbmogPTIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGVmZDI1YTliNjJmNDM2MmIyYTY0MzA4ZWMwMGE4NGMuc2V0Q29udGVudChodG1sXzg5ODgyMTY5OWFiMjQxMTVhYWIyM2Y3ZjRlYjVlZDMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTljZmZlNzQ4YjU2NDhhNGFkM2U5ZGYwZjE0ZTRlMmQuYmluZFBvcHVwKHBvcHVwXzhlZmQyNWE5YjYyZjQzNjJiMmE2NDMwOGVjMDBhODRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNTA5MDAyYzg2YWY1NDU2Njg1ZDIyYmE0MWU2MjIwY2IgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgxODUwNDk5OTkwOTIxLCAtNzMuOTAyMTA3MDAyMDU5OTJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTU3YzhjNjk3YWFiNGQ3MWFhMGU1N2QxNDg3ZTA0MmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNzdjYzA5ODBlNTg0YjY2OGVmNWQzYmZmZDY2NWVjOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzc3Y2MwOTgwZTU4NGI2NjhlZjVkM2JmZmQ2NjVlYzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTg0MTEuMCwgaW5qID00LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1N2M4YzY5N2FhYjRkNzFhYTBlNTdkMTQ4N2UwNDJlLnNldENvbnRlbnQoaHRtbF8zNzdjYzA5ODBlNTg0YjY2OGVmNWQzYmZmZDY2NWVjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUwOTAwMmM4NmFmNTQ1NjY4NWQyMmJhNDFlNjIyMGNiLmJpbmRQb3B1cChwb3B1cF9lNTdjOGM2OTdhYWI0ZDcxYWEwZTU3ZDE0ODdlMDQyZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzM1NDM2N2I4ZmM4ODQyYjA5ODE0MTk0OGU4ZjBmZjM2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MTYxMTg5OTk5MzI0ODUsIC03My45MjY2MjcwMDIxMzkzN10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMjhiYmI3NzI3NjM0NGMwODQ2ZGQ5ZjA1M2RlZDkxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NhMDVhMTQ3MmViYTQ1ZTRhMGM0Mzg0Y2EzNmYzNzRkID0gJCgnPGRpdiBpZD0iaHRtbF9jYTA1YTE0NzJlYmE0NWU0YTBjNDM4NGNhMzZmMzc0ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9ODQ1MC4wLCBpbmogPTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTI4YmJiNzcyNzYzNDRjMDg0NmRkOWYwNTNkZWQ5MTYuc2V0Q29udGVudChodG1sX2NhMDVhMTQ3MmViYTQ1ZTRhMGM0Mzg0Y2EzNmYzNzRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzU0MzY3YjhmYzg4NDJiMDk4MTQxOTQ4ZThmMGZmMzYuYmluZFBvcHVwKHBvcHVwX2EyOGJiYjc3Mjc2MzQ0YzA4NDZkZDlmMDUzZGVkOTE2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZjI5M2U0ZTk3YTM2NDRmNGEwMzY1MjdmN2YzODFmZWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg0MTI5NDk5OTg1NjM2NiwgLTczLjg4Mjc4NzAwMDQ4NTg2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I3ZWE3MThlMzcwMDQ0ZTE5NzY3OGI1NWI4MzBmYTc2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzBiOGEyZGYxMzFiNDNkY2FjMDdiZjMwZGZiOTM1MjkgPSAkKCc8ZGl2IGlkPSJodG1sXzcwYjhhMmRmMTMxYjQzZGNhYzA3YmYzMGRmYjkzNTI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD04Njk4LjAsIGluaiA9MTQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjdlYTcxOGUzNzAwNDRlMTk3Njc4YjU1YjgzMGZhNzYuc2V0Q29udGVudChodG1sXzcwYjhhMmRmMTMxYjQzZGNhYzA3YmYzMGRmYjkzNTI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjI5M2U0ZTk3YTM2NDRmNGEwMzY1MjdmN2YzODFmZWEuYmluZFBvcHVwKHBvcHVwX2I3ZWE3MThlMzcwMDQ0ZTE5NzY3OGI1NWI4MzBmYTc2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMmU3MDcwODBkOWJhNGFjM2I3OWZhNTdkNDdkOGVhYmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg2ODY5NTk5OTg5MjU0LCAtNzMuOTAyMzU4MDAxNjg2OThdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTg4ODFhYjUxNWIzNGJkZjkyNTRjNWI5MTQ1ZGE5MmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNDdlYjBjNzY4N2E0YzFjYWUyOGU2NTAyY2QwZmMwZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYTQ3ZWIwYzc2ODdhNGMxY2FlMjhlNjUwMmNkMGZjMGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTg3MjAuMCwgaW5qID0xOC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ODg4MWFiNTE1YjM0YmRmOTI1NGM1YjkxNDVkYTkyYS5zZXRDb250ZW50KGh0bWxfYTQ3ZWIwYzc2ODdhNGMxY2FlMjhlNjUwMmNkMGZjMGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZTcwNzA4MGQ5YmE0YWMzYjc5ZmE1N2Q0N2Q4ZWFiYy5iaW5kUG9wdXAocG9wdXBfNTg4ODFhYjUxNWIzNGJkZjkyNTRjNWI5MTQ1ZGE5MmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl82NjQ2ZWYyYmQ4YzI0YTNkODlkZTA0NDg1OGZjMjM5ZSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODM3NDIzOTk5ODU5MSwgLTczLjg2MDUyNTAwMDQ3MzM5XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE3NmNjM2QyYzUyMTQzMjY4MjFjMjNiMWRjOGE0NzBlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjc1OTIwNjYzNjc5NDNjM2IxMDgwMDRhMTY5ZWNlMGIgPSAkKCc8ZGl2IGlkPSJodG1sXzY3NTkyMDY2MzY3OTQzYzNiMTA4MDA0YTE2OWVjZTBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD04NzM5LjAsIGluaiA9MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNzZjYzNkMmM1MjE0MzI2ODIxYzIzYjFkYzhhNDcwZS5zZXRDb250ZW50KGh0bWxfNjc1OTIwNjYzNjc5NDNjM2IxMDgwMDRhMTY5ZWNlMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NjQ2ZWYyYmQ4YzI0YTNkODlkZTA0NDg1OGZjMjM5ZS5iaW5kUG9wdXAocG9wdXBfMTc2Y2MzZDJjNTIxNDMyNjgyMWMyM2IxZGM4YTQ3MGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl80NTQ2MzgyMGZiYmI0NWMyYjZiOTYzZDcxYTY4ODY5MiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODM3NDIzOTk5ODU5MSwgLTczLjg2MDUyNTAwMDQ3MzM5XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgwMWYxNWIxYjlmYTQ0ZDc5YWE3ZWYzOGQ5ZTQwMzU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTI4NmYzNzA0MzAyNDI2NmI3MDhjNDU0NTljOTVhMDIgPSAkKCc8ZGl2IGlkPSJodG1sXzUyODZmMzcwNDMwMjQyNjZiNzA4YzQ1NDU5Yzk1YTAyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD04NzQyLjAsIGluaiA9MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MDFmMTViMWI5ZmE0NGQ3OWFhN2VmMzhkOWU0MDM1OC5zZXRDb250ZW50KGh0bWxfNTI4NmYzNzA0MzAyNDI2NmI3MDhjNDU0NTljOTVhMDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80NTQ2MzgyMGZiYmI0NWMyYjZiOTYzZDcxYTY4ODY5Mi5iaW5kUG9wdXAocG9wdXBfODAxZjE1YjFiOWZhNDRkNzlhYTdlZjM4ZDllNDAzNTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8zOTNmZGU5MDgyMGQ0M2U5ODRmMTY5NjIzMmMyMmYxMiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODA0ODcxOTk5OTgzODc0LCAtNzMuOTE0OTk3MDAyOTExMjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjUxZmNiNzAwMTc0NDU3YWIzY2JjZjg0NTExZTY1ZTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOTA2NzFjMjgzMmE0MTkzYmRhOGRmM2ZhYzQwNjcwMSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjkwNjcxYzI4MzJhNDE5M2JkYThkZjNmYWM0MDY3MDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTg4NTYuMCwgaW5qID0xMi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNTFmY2I3MDAxNzQ0NTdhYjNjYmNmODQ1MTFlNjVlMS5zZXRDb250ZW50KGh0bWxfZjkwNjcxYzI4MzJhNDE5M2JkYThkZjNmYWM0MDY3MDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zOTNmZGU5MDgyMGQ0M2U5ODRmMTY5NjIzMmMyMmYxMi5iaW5kUG9wdXAocG9wdXBfMjUxZmNiNzAwMTc0NDU3YWIzY2JjZjg0NTExZTY1ZTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9hZDE3NzYyZmE1NjY0OWZlOTQ4YTIzM2QzNWE4OTYwZiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODA3OTA2OTk5NzU1NzIsIC03My45MjAwNDYwMDE5MTIyXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkZDYyY2ZmZTg5NjQwNTlhMzdkMDZkYjk1ZGQ3YjZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzk2NzA0OTI5Yzc0NDBhNWFmNjMxMjRmMjAyYzBiNmIgPSAkKCc8ZGl2IGlkPSJodG1sXzM5NjcwNDkyOWM3NDQwYTVhZjYzMTI0ZjIwMmMwYjZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD04ODY4LjAsIGluaiA9MTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmRkNjJjZmZlODk2NDA1OWEzN2QwNmRiOTVkZDdiNmQuc2V0Q29udGVudChodG1sXzM5NjcwNDkyOWM3NDQwYTVhZjYzMTI0ZjIwMmMwYjZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWQxNzc2MmZhNTY2NDlmZTk0OGEyMzNkMzVhODk2MGYuYmluZFBvcHVwKHBvcHVwXzJkZDYyY2ZmZTg5NjQwNTlhMzdkMDZkYjk1ZGQ3YjZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNDQzMjUzNzg1ZmI1NGI4Y2JjOTA0ZWFjYTUwNzAyMDMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgxMDk0ODk5OTg1OTY1LCAtNzMuOTI3MTIxMDAyMjQxNjNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjk2NjUzMGQ3MzYzNDljZmIyYTk2NDI0ZTgwZDYzOGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hY2YyNThkYWMwM2Y0OGNhODU0NjVjMmI3MjlhN2Y3ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYWNmMjU4ZGFjMDNmNDhjYTg1NDY1YzJiNzI5YTdmN2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTg4NzIuMCwgaW5qID0wLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI5NjY1MzBkNzM2MzQ5Y2ZiMmE5NjQyNGU4MGQ2MzhkLnNldENvbnRlbnQoaHRtbF9hY2YyNThkYWMwM2Y0OGNhODU0NjVjMmI3MjlhN2Y3ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ0MzI1Mzc4NWZiNTRiOGNiYzkwNGVhY2E1MDcwMjAzLmJpbmRQb3B1cChwb3B1cF8yOTY2NTMwZDczNjM0OWNmYjJhOTY0MjRlODBkNjM4ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzRkYzNhN2IwNzkwODQ2NDA5NTZlMTIzNzg4Zjc3YWJjID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MDU1NjA5OTk4NzQ2MSwgLTczLjkxNDQ5NTAwMjYwNjM2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc5ODQyZDc5MjYyMTQ3NjlhNzE4OGM4N2M4Mzk5NWI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmQ1OGJhZmJiZDZkNDE2MmJiNjRmNTg0YTNiNDNmYzEgPSAkKCc8ZGl2IGlkPSJodG1sX2ZkNThiYWZiYmQ2ZDQxNjJiYjY0ZjU4NGEzYjQzZmMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD04ODc1LjAsIGluaiA9MjkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzk4NDJkNzkyNjIxNDc2OWE3MTg4Yzg3YzgzOTk1YjYuc2V0Q29udGVudChodG1sX2ZkNThiYWZiYmQ2ZDQxNjJiYjY0ZjU4NGEzYjQzZmMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGRjM2E3YjA3OTA4NDY0MDk1NmUxMjM3ODhmNzdhYmMuYmluZFBvcHVwKHBvcHVwXzc5ODQyZDc5MjYyMTQ3NjlhNzE4OGM4N2M4Mzk5NWI2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNTYzNWFkYjdmYTA2NDFiMjk5MmQ4NTUwMWI2OTA4ZTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgwNDgzOTk5OTkwOTcyNCwgLTczLjkxMjc4ODAwMzQwNDE5XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBkZTUzNzljYjY0ODQ1M2Y4MzQyOTZmNzQ5NTIyZmVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2Q4YjlkNzljM2ZkNDc3MTgyMWM4OTdhMjQ1NWQwN2EgPSAkKCc8ZGl2IGlkPSJodG1sXzdkOGI5ZDc5YzNmZDQ3NzE4MjFjODk3YTI0NTVkMDdhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD04ODc2LjAsIGluaiA9MTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGRlNTM3OWNiNjQ4NDUzZjgzNDI5NmY3NDk1MjJmZWQuc2V0Q29udGVudChodG1sXzdkOGI5ZDc5YzNmZDQ3NzE4MjFjODk3YTI0NTVkMDdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTYzNWFkYjdmYTA2NDFiMjk5MmQ4NTUwMWI2OTA4ZTMuYmluZFBvcHVwKHBvcHVwXzBkZTUzNzljYjY0ODQ1M2Y4MzQyOTZmNzQ5NTIyZmVkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZmFjMzI2NjY1MDVjNDg1ZWE2NWQ4ZGIxMTQ3M2E2NzkgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgxMDk0ODk5OTg1OTY1LCAtNzMuOTI3MTIxMDAyMjQxNjNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzJiNDM0ZDE0MjhiNDg4NGFjNjQ4ZDMxNTY3ZTk0OGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Zjk0N2FjNWQ4Nzc0MjIwOGY5NmQ5MDdlNzRmMGMyYSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2Y5NDdhYzVkODc3NDIyMDhmOTZkOTA3ZTc0ZjBjMmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTg4NzcuMCwgaW5qID0wLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcyYjQzNGQxNDI4YjQ4ODRhYzY0OGQzMTU2N2U5NDhhLnNldENvbnRlbnQoaHRtbF83Zjk0N2FjNWQ4Nzc0MjIwOGY5NmQ5MDdlNzRmMGMyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZhYzMyNjY2NTA1YzQ4NWVhNjVkOGRiMTE0NzNhNjc5LmJpbmRQb3B1cChwb3B1cF83MmI0MzRkMTQyOGI0ODg0YWM2NDhkMzE1NjdlOTQ4YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzZlM2IwNDA3N2VkYzQ5OTBhZjNiMmUyMDI4ZjIyYzM1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MDY4MjI5OTk5MTYwODYsIC03My45MTc0NzkwMDAyOTE3Nl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMWMxNTE4MmI2OGY0ZWJlOTIyMTM2YTg3MzM1NGM3OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJjOGM3YWU2NDFiMTRkMGM5MjUwYjAwMjVkMDk4ZWJlID0gJCgnPGRpdiBpZD0iaHRtbF8yYzhjN2FlNjQxYjE0ZDBjOTI1MGIwMDI1ZDA5OGViZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9ODg3OC4wLCBpbmogPTYxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UxYzE1MTgyYjY4ZjRlYmU5MjIxMzZhODczMzU0Yzc4LnNldENvbnRlbnQoaHRtbF8yYzhjN2FlNjQxYjE0ZDBjOTI1MGIwMDI1ZDA5OGViZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZlM2IwNDA3N2VkYzQ5OTBhZjNiMmUyMDI4ZjIyYzM1LmJpbmRQb3B1cChwb3B1cF9lMWMxNTE4MmI2OGY0ZWJlOTIyMTM2YTg3MzM1NGM3OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2RkY2Q2MjE5YjljMzQwNjE4M2I3ZDgzZGU3NWJlYTFhID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MTAwNDk5OTk4NTkwMiwgLTczLjkyNTE0MjAwMzEyNTMzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk4NTUwNzE5YTE4OTRiMmI4NjNjNDZiZTE5ZDc0YmZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2EwY2Y2YzU3M2Q1NDZhYWI3MjQ2ZjY3ZDRmZGZmZWYgPSAkKCc8ZGl2IGlkPSJodG1sXzNhMGNmNmM1NzNkNTQ2YWFiNzI0NmY2N2Q0ZmRmZmVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD04ODgwLjAsIGluaiA9OTUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTg1NTA3MTlhMTg5NGIyYjg2M2M0NmJlMTlkNzRiZmQuc2V0Q29udGVudChodG1sXzNhMGNmNmM1NzNkNTQ2YWFiNzI0NmY2N2Q0ZmRmZmVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGRjZDYyMTliOWMzNDA2MTgzYjdkODNkZTc1YmVhMWEuYmluZFBvcHVwKHBvcHVwXzk4NTUwNzE5YTE4OTRiMmI4NjNjNDZiZTE5ZDc0YmZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMWNlNThlMjhkOTVkNDI3ZjgwMDQzNDAyOTdmNjI5ZTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgxMDk5Nzk5OTg4NDkyNSwgLTczLjkwNTgzODAwMTQ5Mjk3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ5YWZkODA4OGZlOTRkOWI5N2Q3ODkzNTE1MjFiNDdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmZmMWVhNDk5NDUyNGQxNTgwZTIxMjkxMTc4Y2FkNGUgPSAkKCc8ZGl2IGlkPSJodG1sXzJmZjFlYTQ5OTQ1MjRkMTU4MGUyMTI5MTE3OGNhZDRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD05MDIyLjAsIGluaiA9NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OWFmZDgwODhmZTk0ZDliOTdkNzg5MzUxNTIxYjQ3Zi5zZXRDb250ZW50KGh0bWxfMmZmMWVhNDk5NDUyNGQxNTgwZTIxMjkxMTc4Y2FkNGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xY2U1OGUyOGQ5NWQ0MjdmODAwNDM0MDI5N2Y2MjllMi5iaW5kUG9wdXAocG9wdXBfNDlhZmQ4MDg4ZmU5NGQ5Yjk3ZDc4OTM1MTUyMWI0N2YpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jMWU4NDgwOWE0NGU0NzNhYWI4YzA4ZWJmZGRiOTA4NCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODE4ODA5OTk5OTk0ODksIC03My45MjgyNzcwMDE4NDMyNl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OGMwYTg2ZTA0Yzg0NTg0YjFiMDRhYmRmY2Q2MGRmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyMjhjY2NmOTQ0MDRkNmZiNjA4OTMwYTI5MjE3ZGYyID0gJCgnPGRpdiBpZD0iaHRtbF9lMjI4Y2NjZjk0NDA0ZDZmYjYwODkzMGEyOTIxN2RmMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTA3NS4wLCBpbmogPTMxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4YzBhODZlMDRjODQ1ODRiMWIwNGFiZGZjZDYwZGY4LnNldENvbnRlbnQoaHRtbF9lMjI4Y2NjZjk0NDA0ZDZmYjYwODkzMGEyOTIxN2RmMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2MxZTg0ODA5YTQ0ZTQ3M2FhYjhjMDhlYmZkZGI5MDg0LmJpbmRQb3B1cChwb3B1cF83OGMwYTg2ZTA0Yzg0NTg0YjFiMDRhYmRmY2Q2MGRmOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzE0OWFhNjFkY2U3MTQ4YWI4ZDdhYWNlNGQzYjkxNWJmID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MTUwNzQ5OTk5ODk3MywgLTczLjkwMzQ3MDAwMzQwNTQ2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIxNzVkOTJkMDg4ZTQxZmVhMjU3ZDI3MDhhNTk2ZTEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTc3MDdjMWJlYzdhNDA5ZjkzZTE5OTMzMzZiYWYwMjYgPSAkKCc8ZGl2IGlkPSJodG1sX2U3NzA3YzFiZWM3YTQwOWY5M2UxOTkzMzM2YmFmMDI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD05MTQyLjAsIGluaiA9Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMTc1ZDkyZDA4OGU0MWZlYTI1N2QyNzA4YTU5NmUxMC5zZXRDb250ZW50KGh0bWxfZTc3MDdjMWJlYzdhNDA5ZjkzZTE5OTMzMzZiYWYwMjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xNDlhYTYxZGNlNzE0OGFiOGQ3YWFjZTRkM2I5MTViZi5iaW5kUG9wdXAocG9wdXBfMjE3NWQ5MmQwODhlNDFmZWEyNTdkMjcwOGE1OTZlMTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl81OWNhMTM5NGY3N2Y0ODc2YjExYzI3ZmViOTdiYTlhZiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODE2MzE3OTk5NzcxOTEsIC03My45MDMwMTAwMDE2MzUwOF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NzNmMjZmZWNhZTY0Yjk4YTg3NTc3NGM5ZjI3ZDNiOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg0NTVhNWZkOTUyMDQzZTQ4OWZjZDhiMDhlZDUzZTM4ID0gJCgnPGRpdiBpZD0iaHRtbF84NDU1YTVmZDk1MjA0M2U0ODlmY2Q4YjA4ZWQ1M2UzOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTE5Mi4wLCBpbmogPTUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzczZjI2ZmVjYWU2NGI5OGE4NzU3NzRjOWYyN2QzYjkuc2V0Q29udGVudChodG1sXzg0NTVhNWZkOTUyMDQzZTQ4OWZjZDhiMDhlZDUzZTM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTljYTEzOTRmNzdmNDg3NmIxMWMyN2ZlYjk3YmE5YWYuYmluZFBvcHVwKHBvcHVwXzc3M2YyNmZlY2FlNjRiOThhODc1Nzc0YzlmMjdkM2I5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNDdjYTc2ZDI2NDY3NDNkMGFlNDgyYTc2ZGRkZjQyMjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgxNzM2OTk5OTg0MzU2LCAtNzMuOTAyNTc5MDAyMzA1OV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMDQ2NGVjNmIzOGI0OGU1OGQ0MjkyNmYwZDRhM2QzNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RiMzZiMjRlYjEyNDRhMDRiMmI4YWU4OTRjOTZhNTY1ID0gJCgnPGRpdiBpZD0iaHRtbF9kYjM2YjI0ZWIxMjQ0YTA0YjJiOGFlODk0Yzk2YTU2NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTIyOS4wLCBpbmogPTEzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwNDY0ZWM2YjM4YjQ4ZTU4ZDQyOTI2ZjBkNGEzZDM3LnNldENvbnRlbnQoaHRtbF9kYjM2YjI0ZWIxMjQ0YTA0YjJiOGFlODk0Yzk2YTU2NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ3Y2E3NmQyNjQ2NzQzZDBhZTQ4MmE3NmRkZGY0MjIwLmJpbmRQb3B1cChwb3B1cF9iMDQ2NGVjNmIzOGI0OGU1OGQ0MjkyNmYwZDRhM2QzNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzQ3OWY0YTdhNzFmMTQwN2Y5ZjcyMTc3NDdjOTU2YzEwID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MjU1NzM5OTk5MDIxMjYsIC03My45MTg0NTkwMDAyMTIxMl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNDBlNGJlZWI1YTI0ZDI2YWM0MmYzYzI4Nzc5ZGJkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ5YTI5NDZjMjZmMTQ4ZjliZmY5OWU1M2UyOWQyM2Y5ID0gJCgnPGRpdiBpZD0iaHRtbF80OWEyOTQ2YzI2ZjE0OGY5YmZmOTllNTNlMjlkMjNmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTMwNC4wLCBpbmogPTI2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I0MGU0YmVlYjVhMjRkMjZhYzQyZjNjMjg3NzlkYmQ4LnNldENvbnRlbnQoaHRtbF80OWEyOTQ2YzI2ZjE0OGY5YmZmOTllNTNlMjlkMjNmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ3OWY0YTdhNzFmMTQwN2Y5ZjcyMTc3NDdjOTU2YzEwLmJpbmRQb3B1cChwb3B1cF9iNDBlNGJlZWI1YTI0ZDI2YWM0MmYzYzI4Nzc5ZGJkOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzRkNjRhYzgxYzM5ZjQ0NjFiOWFmZTMwZGRhNTY0MmNmID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MjU1NzM5OTk5MDIxMjYsIC03My45MTg0NTkwMDAyMTIxMl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xODdhMDNlOWEzZmE0ZmRkOWFmNzUyOTgzZWE5MDdjYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxNzNiNWEwZjgxOTRmNWE4MzZhOTdhN2MzNzRmN2EzID0gJCgnPGRpdiBpZD0iaHRtbF9kMTczYjVhMGY4MTk0ZjVhODM2YTk3YTdjMzc0ZjdhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTMxNS4wLCBpbmogPTQyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4N2EwM2U5YTNmYTRmZGQ5YWY3NTI5ODNlYTkwN2NjLnNldENvbnRlbnQoaHRtbF9kMTczYjVhMGY4MTk0ZjVhODM2YTk3YTdjMzc0ZjdhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRkNjRhYzgxYzM5ZjQ0NjFiOWFmZTMwZGRhNTY0MmNmLmJpbmRQb3B1cChwb3B1cF8xODdhMDNlOWEzZmE0ZmRkOWFmNzUyOTgzZWE5MDdjYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2Q3NTRhZDk3OTBjOTQwMDY5OGQ2OTYxOTQ3NTBlOTY5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MzAxNDI5OTk5NzI4NiwgLTczLjkyODU3MjAwMjE4NDIxXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNjNWY5ZTk1YzYwZTQzMjdiMzcyYmExMmJiZWRlOWU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzBhOTA0ZjdhM2ZiNDM2MGIxMWZlMTBiZjNjYWUyMmUgPSAkKCc8ZGl2IGlkPSJodG1sX2MwYTkwNGY3YTNmYjQzNjBiMTFmZTEwYmYzY2FlMjJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD05MzM0LjAsIGluaiA9MTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2M1ZjllOTVjNjBlNDMyN2IzNzJiYTEyYmJlZGU5ZTYuc2V0Q29udGVudChodG1sX2MwYTkwNGY3YTNmYjQzNjBiMTFmZTEwYmYzY2FlMjJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDc1NGFkOTc5MGM5NDAwNjk4ZDY5NjE5NDc1MGU5NjkuYmluZFBvcHVwKHBvcHVwXzNjNWY5ZTk1YzYwZTQzMjdiMzcyYmExMmJiZWRlOWU2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYTlhODkwZmM1YzNlNDg3NThjNTg0NTljNmU2NmU2NTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgyMjEwODk5OTc2MTU1NCwgLTczLjkwMDYxMjAwMTcxNzc1XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwYTlkNjRkNjY0YzRhZTA5N2ZhMTNmZjliMzU1NzJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjcxYTgwNjliYWVkNGQwYjlmYjJhMmFlMjUyZDI4YjAgPSAkKCc8ZGl2IGlkPSJodG1sX2Y3MWE4MDY5YmFlZDRkMGI5ZmIyYTJhZTI1MmQyOGIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD05MzgyLjAsIGluaiA9NTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzBhOWQ2NGQ2NjRjNGFlMDk3ZmExM2ZmOWIzNTU3MmUuc2V0Q29udGVudChodG1sX2Y3MWE4MDY5YmFlZDRkMGI5ZmIyYTJhZTI1MmQyOGIwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTlhODkwZmM1YzNlNDg3NThjNTg0NTljNmU2NmU2NTcuYmluZFBvcHVwKHBvcHVwXzMwYTlkNjRkNjY0YzRhZTA5N2ZhMTNmZjliMzU1NzJlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMDRlN2I2MWUxODE4NGEwZTk5ZjBiYTBmZTUxMDM2Y2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgyOTI4OTk5OTk3NjUzLCAtNzMuOTE2NDEwMDAwNDM0OF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNWZhOGYzMjg3YTA0YmE4ODQwODk1YTQxYWJlNGVjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I1NDNhOTAwMWFmNjQzYjc4NmE4MzBhNDBlNDg5ZDYwID0gJCgnPGRpdiBpZD0iaHRtbF9iNTQzYTkwMDFhZjY0M2I3ODZhODMwYTQwZTQ4OWQ2MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTQzMS4wLCBpbmogPTIzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI1ZmE4ZjMyODdhMDRiYTg4NDA4OTVhNDFhYmU0ZWM5LnNldENvbnRlbnQoaHRtbF9iNTQzYTkwMDFhZjY0M2I3ODZhODMwYTQwZTQ4OWQ2MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA0ZTdiNjFlMTgxODRhMGU5OWYwYmEwZmU1MTAzNmNlLmJpbmRQb3B1cChwb3B1cF8yNWZhOGYzMjg3YTA0YmE4ODQwODk1YTQxYWJlNGVjOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzdkNGE2YjQyZTMzOTQ3MjI5OWIwOWZlNDI0NThmNTA0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MzAwMDQ5OTk3ODExNywgLTczLjkxODExMDAwMjAwMjk1XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmOWQxYmI2NGUzMDQ0NjU5YzJiMjBlOTZjNDAzMTFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTU2NGE5YmIyMTE2NDg5ODhkY2VhNmI0YmExMTI0NzcgPSAkKCc8ZGl2IGlkPSJodG1sXzU1NjRhOWJiMjExNjQ4OTg4ZGNlYTZiNGJhMTEyNDc3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD05NDQwLjAsIGluaiA9My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZjlkMWJiNjRlMzA0NDY1OWMyYjIwZTk2YzQwMzExZC5zZXRDb250ZW50KGh0bWxfNTU2NGE5YmIyMTE2NDg5ODhkY2VhNmI0YmExMTI0NzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83ZDRhNmI0MmUzMzk0NzIyOTliMDlmZTQyNDU4ZjUwNC5iaW5kUG9wdXAocG9wdXBfOGY5ZDFiYjY0ZTMwNDQ2NTljMmIyMGU5NmM0MDMxMWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jM2Q5MzdjZjZjNTk0NDk1OWRkMzVjNTc2MDExZjk4OSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODM1NzIzOTk5ODgxMjQsIC03My45MjEyODUwMDI1MzA5OF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYzIzMTU3NGIyNjM0ZTNjOTZlMWM5YzM4OTdjMzBmYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI4YzVjZTgyZmFlNjQyOTFhMDhiZWJlY2M0NGJjNDZlID0gJCgnPGRpdiBpZD0iaHRtbF8yOGM1Y2U4MmZhZTY0MjkxYTA4YmViZWNjNDRiYzQ2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTUwMy4wLCBpbmogPTI5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FjMjMxNTc0YjI2MzRlM2M5NmUxYzljMzg5N2MzMGZiLnNldENvbnRlbnQoaHRtbF8yOGM1Y2U4MmZhZTY0MjkxYTA4YmViZWNjNDRiYzQ2ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2MzZDkzN2NmNmM1OTQ0OTU5ZGQzNWM1NzYwMTFmOTg5LmJpbmRQb3B1cChwb3B1cF9hYzIzMTU3NGIyNjM0ZTNjOTZlMWM5YzM4OTdjMzBmYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzc3ZjIwMTgxYWE5YjRmMDg4NTc1N2U1YWUyZjFkZGU3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MzUzOTY5OTk5NTQ4NzQsIC03My45MjAzMDQwMDI1MjA4NF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZTYxMDQwNzlkZGE0OTI5YTE4MjRjZDJhOGJkZjdjOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IwNTk1ZjQ0N2ZiYTRjNDVhNzFhNGYxOGIyMDk4MjZhID0gJCgnPGRpdiBpZD0iaHRtbF9iMDU5NWY0NDdmYmE0YzQ1YTcxYTRmMThiMjA5ODI2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTUwNi4wLCBpbmogPTE3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZlNjEwNDA3OWRkYTQ5MjlhMTgyNGNkMmE4YmRmN2M4LnNldENvbnRlbnQoaHRtbF9iMDU5NWY0NDdmYmE0YzQ1YTcxYTRmMThiMjA5ODI2YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc3ZjIwMTgxYWE5YjRmMDg4NTc1N2U1YWUyZjFkZGU3LmJpbmRQb3B1cChwb3B1cF82ZTYxMDQwNzlkZGE0OTI5YTE4MjRjZDJhOGJkZjdjOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2U0MDg2MDk1NWYxMjRhZDc4OGM5NDk0Mzg2ZmNiYmIxID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MzMyODU5OTk4ODgsIC03My45MTQwNzkwMDMzMzczM10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMWMzMDdlYWMxM2I0MDRlODU4OTU5ZWYwODc4NjhhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYwMzQ5NTFkMTc1MTRkNjQ5MzJlYzU4NTcxMTRjYjQ4ID0gJCgnPGRpdiBpZD0iaHRtbF82MDM0OTUxZDE3NTE0ZDY0OTMyZWM1ODU3MTE0Y2I0OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTUwOC4wLCBpbmogPTI4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QxYzMwN2VhYzEzYjQwNGU4NTg5NTllZjA4Nzg2OGEwLnNldENvbnRlbnQoaHRtbF82MDM0OTUxZDE3NTE0ZDY0OTMyZWM1ODU3MTE0Y2I0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U0MDg2MDk1NWYxMjRhZDc4OGM5NDk0Mzg2ZmNiYmIxLmJpbmRQb3B1cChwb3B1cF9kMWMzMDdlYWMxM2I0MDRlODU4OTU5ZWYwODc4NjhhMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2Y0YWJmNWViZDliOTRjMTVhYjBlYjQyZTNiMDY3N2MyID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MzA5MzU5OTk4MDgxNSwgLTczLjkxMjM5NTAwMTIwMDMyXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0N2I5OWUwNDM2NjRjY2U5N2Y3OWVkNWFlYzE3OGU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWFlMzA1NDkwNmQ1NGEyOThmZmNjMWNmZmU3M2RmZTggPSAkKCc8ZGl2IGlkPSJodG1sXzFhZTMwNTQ5MDZkNTRhMjk4ZmZjYzFjZmZlNzNkZmU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD05NTA5LjAsIGluaiA9MTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjQ3Yjk5ZTA0MzY2NGNjZTk3Zjc5ZWQ1YWVjMTc4ZTguc2V0Q29udGVudChodG1sXzFhZTMwNTQ5MDZkNTRhMjk4ZmZjYzFjZmZlNzNkZmU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjRhYmY1ZWJkOWI5NGMxNWFiMGViNDJlM2IwNjc3YzIuYmluZFBvcHVwKHBvcHVwX2Y0N2I5OWUwNDM2NjRjY2U5N2Y3OWVkNWFlYzE3OGU4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfODQyYTgxM2Y3MzM0NGM1MGFjMWYyOWEyYzkwN2E5MjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgzMjI2Mzk5OTgxMzUzLCAtNzMuOTEzNjgxMDAzMzM0OTldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjRkMGMyYThlYmRhNDg1ZWFkODg0MTMyZDViY2U2NjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NDYxNTdlMjU0ZDA0YzVlYjY4NmE0OTcxNGI1OGNjMyA9ICQoJzxkaXYgaWQ9Imh0bWxfODQ2MTU3ZTI1NGQwNGM1ZWI2ODZhNDk3MTRiNThjYzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTk1MTEuMCwgaW5qID0xMi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNGQwYzJhOGViZGE0ODVlYWQ4ODQxMzJkNWJjZTY2My5zZXRDb250ZW50KGh0bWxfODQ2MTU3ZTI1NGQwNGM1ZWI2ODZhNDk3MTRiNThjYzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NDJhODEzZjczMzQ0YzUwYWMxZjI5YTJjOTA3YTkyMy5iaW5kUG9wdXAocG9wdXBfMjRkMGMyYThlYmRhNDg1ZWFkODg0MTMyZDViY2U2NjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl84ZDM5YTI2MmMxMGE0M2RhOWYyNTU5MjdkY2NkMDkzMiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODMxMTg3OTk5NzgwMjc2LCAtNzMuOTEzMjc5MDAyNjA4OTNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2NjMTEwYTBmZGNiNDgzNTgyN2QzOWVkZmE0ZWJkODkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZjZhOTNkZTc1Zjk0MjMzOTI3MWI4NGU0MWRhMDc4ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2Y2YTkzZGU3NWY5NDIzMzkyNzFiODRlNDFkYTA3OGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTk1MTIuMCwgaW5qID0xNC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jY2MxMTBhMGZkY2I0ODM1ODI3ZDM5ZWRmYTRlYmQ4OS5zZXRDb250ZW50KGh0bWxfY2Y2YTkzZGU3NWY5NDIzMzkyNzFiODRlNDFkYTA3OGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84ZDM5YTI2MmMxMGE0M2RhOWYyNTU5MjdkY2NkMDkzMi5iaW5kUG9wdXAocG9wdXBfY2NjMTEwYTBmZGNiNDgzNTgyN2QzOWVkZmE0ZWJkODkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jZTMyN2UzN2EzOGM0MTNiYTM0Y2IwZmU2OTNjY2EzNCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODI5MDEzOTk5Nzg3MTgsIC03My45MDUwOTAwMDA2NzYwM10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZmFmOGNiMDE3OWQ0ZTAyOTI1Y2JlMTM5NzUwNmZjMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QyZjkxM2NjZjZlODQxM2U5M2ExOGU5NWZjYWY5YTNkID0gJCgnPGRpdiBpZD0iaHRtbF9kMmY5MTNjY2Y2ZTg0MTNlOTNhMThlOTVmY2FmOWEzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTUxNi4wLCBpbmogPTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWZhZjhjYjAxNzlkNGUwMjkyNWNiZTEzOTc1MDZmYzIuc2V0Q29udGVudChodG1sX2QyZjkxM2NjZjZlODQxM2U5M2ExOGU5NWZjYWY5YTNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2UzMjdlMzdhMzhjNDEzYmEzNGNiMGZlNjkzY2NhMzQuYmluZFBvcHVwKHBvcHVwXzlmYWY4Y2IwMTc5ZDRlMDI5MjVjYmUxMzk3NTA2ZmMyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYTRkMDQ2MmQ2OWJkNDM1ODllOTExMzY3OTdkOTRhZWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgyNjc5Mzk5OTg0OTQ5LCAtNzMuODkxOTEzMDAxOTM5NDFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGI1Yjk5ZTAyMGIwNGVlOGFkM2ZkYjBkZTk5MWVmMzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NjM2ZThjYTYyYjc0ZWI1YjAwNDQ4NGI5NDE4YmQ0ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzYzNmU4Y2E2MmI3NGViNWIwMDQ0ODRiOTQxOGJkNGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTk1MzQuMCwgaW5qID0yMS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYjViOTllMDIwYjA0ZWU4YWQzZmRiMGRlOTkxZWYzOS5zZXRDb250ZW50KGh0bWxfNzYzNmU4Y2E2MmI3NGViNWIwMDQ0ODRiOTQxOGJkNGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hNGQwNDYyZDY5YmQ0MzU4OWU5MTEzNjc5N2Q5NGFlZS5iaW5kUG9wdXAocG9wdXBfMGI1Yjk5ZTAyMGIwNGVlOGFkM2ZkYjBkZTk5MWVmMzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jOWM0M2NlYjQ5Y2E0OWJiYTVjOTZlYWYyNmI0Njk1MiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODM1NzcxOTk5OTMyMTksIC03My45MjM1MjgwMDM0NTcyNF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZWUxYTdjMGJkZGE0NWU2YjI1YmU2NWE2YTQ1MjI4YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RkODNhYmQ4MmI5YTRlNjA4MzRjNzE1MmFhYWZhYmFiID0gJCgnPGRpdiBpZD0iaHRtbF9kZDgzYWJkODJiOWE0ZTYwODM0YzcxNTJhYWFmYWJhYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTU0Ni4wLCBpbmogPTIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2VlMWE3YzBiZGRhNDVlNmIyNWJlNjVhNmE0NTIyOGIuc2V0Q29udGVudChodG1sX2RkODNhYmQ4MmI5YTRlNjA4MzRjNzE1MmFhYWZhYmFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzljNDNjZWI0OWNhNDliYmE1Yzk2ZWFmMjZiNDY5NTIuYmluZFBvcHVwKHBvcHVwX2NlZTFhN2MwYmRkYTQ1ZTZiMjViZTY1YTZhNDUyMjhiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMzU0YWU5YTA1M2VkNGJiNjliNDAzOGM1YWJkZjc2YTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgzNzg3MTk5OTgzNjksIC03My45MTk2OTYwMDExNjk3NF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MTlkOTgzYTRjMjg0ZjAzYTMwMjEyNzA2ZWQ5YzU2NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RkNDU0M2NkY2YxNTRlNzBiNzFhZDdjYTkzZTIwYjRkID0gJCgnPGRpdiBpZD0iaHRtbF9kZDQ1NDNjZGNmMTU0ZTcwYjcxYWQ3Y2E5M2UyMGI0ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTYwMy4wLCBpbmogPTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDE5ZDk4M2E0YzI4NGYwM2EzMDIxMjcwNmVkOWM1NjYuc2V0Q29udGVudChodG1sX2RkNDU0M2NkY2YxNTRlNzBiNzFhZDdjYTkzZTIwYjRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzU0YWU5YTA1M2VkNGJiNjliNDAzOGM1YWJkZjc2YTcuYmluZFBvcHVwKHBvcHVwXzQxOWQ5ODNhNGMyODRmMDNhMzAyMTI3MDZlZDljNTY2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYTVkNzhhNGNlMTRiNDYzZGFlY2U1NjQwODM1Y2ZlOTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgzODg4Nzk5OTk2OTI0NSwgLTczLjkyMTY0MDAwMDg3MjM0XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkOTU5MGY0Y2I3OTRmYzJhNmRlYjM3MTE0NDFhODdkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmFiZDgzNTkxNzNhNDgwM2FjOWY1MDkzZjY1NTYzOTkgPSAkKCc8ZGl2IGlkPSJodG1sX2ZhYmQ4MzU5MTczYTQ4MDNhYzlmNTA5M2Y2NTU2Mzk5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD05NjM1LjAsIGluaiA9MTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmQ5NTkwZjRjYjc5NGZjMmE2ZGViMzcxMTQ0MWE4N2Quc2V0Q29udGVudChodG1sX2ZhYmQ4MzU5MTczYTQ4MDNhYzlmNTA5M2Y2NTU2Mzk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTVkNzhhNGNlMTRiNDYzZGFlY2U1NjQwODM1Y2ZlOTIuYmluZFBvcHVwKHBvcHVwXzJkOTU5MGY0Y2I3OTRmYzJhNmRlYjM3MTE0NDFhODdkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYWM3OWRhMTg3ODkxNGZlMGExZTc3MGU5OGI3YTVmNjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg0MDIyNDk5OTk4Nzg4LCAtNzMuOTE3NjgzMDAxNjQzNjddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWFlZTg3MWU5ZTdmNDcyYjk5M2IzZmFiOWYxNWZiNTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYThmMzIxYTZhNGI0ZjA5ODZmOTE5YjIxNDU1MTczMCA9ICQoJzxkaXYgaWQ9Imh0bWxfYWE4ZjMyMWE2YTRiNGYwOTg2ZjkxOWIyMTQ1NTE3MzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTk2NTUuMCwgaW5qID0zOS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYWVlODcxZTllN2Y0NzJiOTkzYjNmYWI5ZjE1ZmI1NC5zZXRDb250ZW50KGh0bWxfYWE4ZjMyMWE2YTRiNGYwOTg2ZjkxOWIyMTQ1NTE3MzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYzc5ZGExODc4OTE0ZmUwYTFlNzcwZTk4YjdhNWY2OS5iaW5kUG9wdXAocG9wdXBfMWFlZTg3MWU5ZTdmNDcyYjk5M2IzZmFiOWYxNWZiNTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8wOGJkOWYwYWQ0ZmE0ODM5YTdiYmIxOTNmODcyYmVkNiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODM3ODY1OTk5Nzg5MDcsIC03My45MTEzOTAwMDAyNDE0OF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xN2QxNWU0NzFiNjU0MjAwYjhhMjkzYmFhOWMwN2Q0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VmYTg1OTRkYmFmNDQ5M2M5YzdhOWNkMTI1NDVjYTgwID0gJCgnPGRpdiBpZD0iaHRtbF9lZmE4NTk0ZGJhZjQ0OTNjOWM3YTljZDEyNTQ1Y2E4MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTY1OS4wLCBpbmogPTMzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE3ZDE1ZTQ3MWI2NTQyMDBiOGEyOTNiYWE5YzA3ZDRhLnNldENvbnRlbnQoaHRtbF9lZmE4NTk0ZGJhZjQ0OTNjOWM3YTljZDEyNTQ1Y2E4MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA4YmQ5ZjBhZDRmYTQ4MzlhN2JiYjE5M2Y4NzJiZWQ2LmJpbmRQb3B1cChwb3B1cF8xN2QxNWU0NzFiNjU0MjAwYjhhMjkzYmFhOWMwN2Q0YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzM5Y2RhMmVjYTY0ZTRjY2NhNzBhOWZkNjkyYWM0YTg0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44Mzk1NTE5OTk3NjkzOCwgLTczLjkxNTk0MDAwMTY2OV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMmFhODQyOGQ1YjU0ZDE0OTFiMWRiNTQyMjI5M2EzYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M1MjhjMDQ2YjFkZjRmMTE5NDY3N2UxNjQ3ZDRiYTdkID0gJCgnPGRpdiBpZD0iaHRtbF9jNTI4YzA0NmIxZGY0ZjExOTQ2NzdlMTY0N2Q0YmE3ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTY2Mi4wLCBpbmogPTE5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyYWE4NDI4ZDViNTRkMTQ5MWIxZGI1NDIyMjkzYTNjLnNldENvbnRlbnQoaHRtbF9jNTI4YzA0NmIxZGY0ZjExOTQ2NzdlMTY0N2Q0YmE3ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM5Y2RhMmVjYTY0ZTRjY2NhNzBhOWZkNjkyYWM0YTg0LmJpbmRQb3B1cChwb3B1cF9iMmFhODQyOGQ1YjU0ZDE0OTFiMWRiNTQyMjI5M2EzYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzNlNTM4YzI2MGJmMzRkNWNiZjE4YThlMGRkNTgyNTVhID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44MzgzNTk5OTk5NTY5MSwgLTczLjkxMjcwODAwMTg3NjE1XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1MWVmOGZmZGQ2NzRhNGI5OGJlYjIzYzAxNzNlMzhmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDdmNGVkNTBlODA4NDY0ZWI4NTEzOTMxZmFmZTJmMTggPSAkKCc8ZGl2IGlkPSJodG1sX2Q3ZjRlZDUwZTgwODQ2NGViODUxMzkzMWZhZmUyZjE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD05NjY1LjAsIGluaiA9NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNTFlZjhmZmRkNjc0YTRiOThiZWIyM2MwMTczZTM4Zi5zZXRDb250ZW50KGh0bWxfZDdmNGVkNTBlODA4NDY0ZWI4NTEzOTMxZmFmZTJmMTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zZTUzOGMyNjBiZjM0ZDVjYmYxOGE4ZTBkZDU4MjU1YS5iaW5kUG9wdXAocG9wdXBfYjUxZWY4ZmZkZDY3NGE0Yjk4YmViMjNjMDE3M2UzOGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl83OTI4Y2U0MzE1NTc0NmM3YWVjYzI0ZGJlMWRmN2NkZCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODQwNjQ3OTk5ODk4MjY2LCAtNzMuOTE5MDExMDAyNTUwMjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTMzYWEyOGFkZTQyNGE0MWJiZjBiY2M1YThhNjRkZjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OGFmY2IxMWM0NTA0NmZjOWJjYzZjMGQ4OGZjZTg3OCA9ICQoJzxkaXYgaWQ9Imh0bWxfNDhhZmNiMTFjNDUwNDZmYzliY2M2YzBkODhmY2U4NzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTk2NzcuMCwgaW5qID0yMC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MzNhYTI4YWRlNDI0YTQxYmJmMGJjYzVhOGE2NGRmOC5zZXRDb250ZW50KGh0bWxfNDhhZmNiMTFjNDUwNDZmYzliY2M2YzBkODhmY2U4NzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83OTI4Y2U0MzE1NTc0NmM3YWVjYzI0ZGJlMWRmN2NkZC5iaW5kUG9wdXAocG9wdXBfNTMzYWEyOGFkZTQyNGE0MWJiZjBiY2M1YThhNjRkZjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8yMjYyMjE0OWMyOGU0Y2RhOWQ2NDViZmE4ZDkzNzRjNSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODQwMzYxOTk5NzY4NTMsIC03My45MTgwNjIwMDE1MTM5Nl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85M2IxYzYwZGY4NDY0OWM5OTIxZjk5MTg4OGNlYjdmNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ4NGFiNjY0NWI4MzQ4NTY5M2Q1ZTBiYjZlNzA1NzEzID0gJCgnPGRpdiBpZD0iaHRtbF80ODRhYjY2NDViODM0ODU2OTNkNWUwYmI2ZTcwNTcxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTY3OS4wLCBpbmogPTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTNiMWM2MGRmODQ2NDljOTkyMWY5OTE4ODhjZWI3ZjUuc2V0Q29udGVudChodG1sXzQ4NGFiNjY0NWI4MzQ4NTY5M2Q1ZTBiYjZlNzA1NzEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjI2MjIxNDljMjhlNGNkYTlkNjQ1YmZhOGQ5Mzc0YzUuYmluZFBvcHVwKHBvcHVwXzkzYjFjNjBkZjg0NjQ5Yzk5MjFmOTkxODg4Y2ViN2Y1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZTdkNzA0ZTA2OGNiNDM3NzlhNTRlZWNjMjdhODQxMTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjgzNDA1Nzk5OTg1OTgsIC03My44ODk3MjcwMDE4NTE5NF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ODkwMzdhMzBmNjE0Y2ZkYWEyZmU4NTI2MDc0OGY3NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRkODhkZDlmZGNmYjQxMDhhMzgxNDM1OGQyNjg4NzYwID0gJCgnPGRpdiBpZD0iaHRtbF80ZDg4ZGQ5ZmRjZmI0MTA4YTM4MTQzNThkMjY4ODc2MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTczNS4wLCBpbmogPTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzg5MDM3YTMwZjYxNGNmZGFhMmZlODUyNjA3NDhmNzYuc2V0Q29udGVudChodG1sXzRkODhkZDlmZGNmYjQxMDhhMzgxNDM1OGQyNjg4NzYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTdkNzA0ZTA2OGNiNDM3NzlhNTRlZWNjMjdhODQxMTcuYmluZFBvcHVwKHBvcHVwXzc4OTAzN2EzMGY2MTRjZmRhYTJmZTg1MjYwNzQ4Zjc2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNWIxZTk3ZjA5NmYwNDIwMDlmMjRjYTk2YTRhZTIwMDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg0MjMzNDk5OTc2ODk5LCAtNzMuOTE2MTg0MDAxNDg2OTRdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2MzZjVkNjVjMjBkNGYzNDhjNDg2YmMzZjllYjI2MmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTNiNDc4OWYxZDc0N2E5OGMxNzMyNmU4ZmQwNDZlZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTUzYjQ3ODlmMWQ3NDdhOThjMTczMjZlOGZkMDQ2ZWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTk3NDQuMCwgaW5qID0zNy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YzNmNWQ2NWMyMGQ0ZjM0OGM0ODZiYzNmOWViMjYyZS5zZXRDb250ZW50KGh0bWxfMTUzYjQ3ODlmMWQ3NDdhOThjMTczMjZlOGZkMDQ2ZWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81YjFlOTdmMDk2ZjA0MjAwOWYyNGNhOTZhNGFlMjAwNC5iaW5kUG9wdXAocG9wdXBfN2MzZjVkNjVjMjBkNGYzNDhjNDg2YmMzZjllYjI2MmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8xYmI1MTBlYTdiYTg0YTA4YTc1OGZjZTk3ZWNkNDM1MiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODM1NzA2OTk5OTI1MTgsIC03My44ODg3NDIwMDIyNzkyNl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYWZkNjQxMDJhOGY0OWM5YWFiOWY2ODYzYjg0YTA5YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2NDg3YzAzOGJlMTQyN2ZiMjhiMTM0MzA0MzFkYjFiID0gJCgnPGRpdiBpZD0iaHRtbF9kNjQ4N2MwMzhiZTE0MjdmYjI4YjEzNDMwNDMxZGIxYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTc5Ni4wLCBpbmogPTEwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhZmQ2NDEwMmE4ZjQ5YzlhYWI5ZjY4NjNiODRhMDliLnNldENvbnRlbnQoaHRtbF9kNjQ4N2MwMzhiZTE0MjdmYjI4YjEzNDMwNDMxZGIxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFiYjUxMGVhN2JhODRhMDhhNzU4ZmNlOTdlY2Q0MzUyLmJpbmRQb3B1cChwb3B1cF8wYWZkNjQxMDJhOGY0OWM5YWFiOWY2ODYzYjg0YTA5YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzkyNGEyY2FkYzkzMjRhMzg4NzIzOGE3MDRmZTQ4NzAwID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NDkxODg5OTk5MTE2MSwgLTczLjkxNzI4NjAwMTc5NTFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjg4MzM4YzI0ZDY5NGFkZDg3ZTM4OGJkNzVlMDc3ZjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYWU0YTI1NDM4Yjg0M2UwYTYyNzBlODM2MjRmMjg3NyA9ICQoJzxkaXYgaWQ9Imh0bWxfM2FlNGEyNTQzOGI4NDNlMGE2MjcwZTgzNjI0ZjI4NzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTk5NjYuMCwgaW5qID0zLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI4ODMzOGMyNGQ2OTRhZGQ4N2UzODhiZDc1ZTA3N2Y3LnNldENvbnRlbnQoaHRtbF8zYWU0YTI1NDM4Yjg0M2UwYTYyNzBlODM2MjRmMjg3Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkyNGEyY2FkYzkzMjRhMzg4NzIzOGE3MDRmZTQ4NzAwLmJpbmRQb3B1cChwb3B1cF8yODgzMzhjMjRkNjk0YWRkODdlMzg4YmQ3NWUwNzdmNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2M1N2U5NGUxYmRiNDRiYmM4YmNhMzhhZGY1NWMxMzk5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NTAwMTg5OTk5Nzg2MTYsIC03My45MTA2OTUwMDE4MjY3NF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNWNlZDI3OWI2M2Q0Njk5YmNhMGMwYzcwYmIzMDk0NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E1YmZhYThhYzE1MDQ3YzY5OWFjYjk1ZmIzZWE4ZDI4ID0gJCgnPGRpdiBpZD0iaHRtbF9hNWJmYWE4YWMxNTA0N2M2OTlhY2I5NWZiM2VhOGQyOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9OTk5Ny4wLCBpbmogPTUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDVjZWQyNzliNjNkNDY5OWJjYTBjMGM3MGJiMzA5NDQuc2V0Q29udGVudChodG1sX2E1YmZhYThhYzE1MDQ3YzY5OWFjYjk1ZmIzZWE4ZDI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzU3ZTk0ZTFiZGI0NGJiYzhiY2EzOGFkZjU1YzEzOTkuYmluZFBvcHVwKHBvcHVwX2Q1Y2VkMjc5YjYzZDQ2OTliY2EwYzBjNzBiYjMwOTQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNzBlOGY3NmYwMWI0NGE1MTg1NGIxYzNkYjk1NjlmMzUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg1MDc4MDk5OTk4NzExNiwgLTczLjkxMjIxMjAwMDA2Mzk5XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkNTEwNmFlMmFlZDQ1MjQ5NDhkYzJkY2FlYTQ0MWE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDdmMjY3ZTg0MDE2NGMyZDhkNTFkNzhlZjBhZWE0YWUgPSAkKCc8ZGl2IGlkPSJodG1sX2Q3ZjI2N2U4NDAxNjRjMmQ4ZDUxZDc4ZWYwYWVhNGFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD05OTk4LjAsIGluaiA9MTUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGQ1MTA2YWUyYWVkNDUyNDk0OGRjMmRjYWVhNDQxYTguc2V0Q29udGVudChodG1sX2Q3ZjI2N2U4NDAxNjRjMmQ4ZDUxZDc4ZWYwYWVhNGFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzBlOGY3NmYwMWI0NGE1MTg1NGIxYzNkYjk1NjlmMzUuYmluZFBvcHVwKHBvcHVwXzRkNTEwNmFlMmFlZDQ1MjQ5NDhkYzJkY2FlYTQ0MWE4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZGVhMDMwMzI5OTFiNDE4Mjk1MTgwYzQ5NDk0YWQ0OWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg0NjU3Nzk5OTg0NTI3LCAtNzMuODkxODc2MDAxMDU2OTRdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmZkYmIzOWJkMWY0NDZkMWI5YjE3ZDA2YWRmMDk5OTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OTc4ZjdhMWNiZjQ0Mzg1YmRmZmU5MDRhMGQ1ZTIxZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNDk3OGY3YTFjYmY0NDM4NWJkZmZlOTA0YTBkNWUyMWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTEwMDI2LjAsIGluaiA9NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZmRiYjM5YmQxZjQ0NmQxYjliMTdkMDZhZGYwOTk5OS5zZXRDb250ZW50KGh0bWxfNDk3OGY3YTFjYmY0NDM4NWJkZmZlOTA0YTBkNWUyMWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZWEwMzAzMjk5MWI0MTgyOTUxODBjNDk0OTRhZDQ5Yi5iaW5kUG9wdXAocG9wdXBfMmZkYmIzOWJkMWY0NDZkMWI5YjE3ZDA2YWRmMDk5OTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9lMTQ0NzViNDdjNjA0MWExYWJhN2ZkOWM4NjA3YTM1YSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODU0ODIxOTk5OTE0NDEsIC03My45MTExOTYwMDE2Njk0Ml0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iM2Y0N2IxZWM2OWE0M2ZkYWMxNWJjYmJjZWU5YWY4OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhhNDQzMzY4YjA2NzQxYjBhOTVhNTY2YWEwMmVkMTgwID0gJCgnPGRpdiBpZD0iaHRtbF84YTQ0MzM2OGIwNjc0MWIwYTk1YTU2NmFhMDJlZDE4MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MTAwNzkuMCwgaW5qID00NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iM2Y0N2IxZWM2OWE0M2ZkYWMxNWJjYmJjZWU5YWY4OS5zZXRDb250ZW50KGh0bWxfOGE0NDMzNjhiMDY3NDFiMGE5NWE1NjZhYTAyZWQxODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMTQ0NzViNDdjNjA0MWExYWJhN2ZkOWM4NjA3YTM1YS5iaW5kUG9wdXAocG9wdXBfYjNmNDdiMWVjNjlhNDNmZGFjMTViY2JiY2VlOWFmODkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9iYzdiNmFmZWI3NTI0NzYyYmRlNWQ0NmE3MDY0ODBjYyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODQ1OTg0OTk5ODAzNzI2LCAtNzMuODg0NDY1MDAyNTY1ODVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjdkNWI2MzlkMWQ2NGY4N2FjNWUxM2MwNzNiYWNlNzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZjYxYzAyNTI3ZTg0ZWU0YTNhZTBlY2Q1Zjk5ZjVkYyA9ICQoJzxkaXYgaWQ9Imh0bWxfM2Y2MWMwMjUyN2U4NGVlNGEzYWUwZWNkNWY5OWY1ZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTEwMTA4LjAsIGluaiA9NTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjdkNWI2MzlkMWQ2NGY4N2FjNWUxM2MwNzNiYWNlNzkuc2V0Q29udGVudChodG1sXzNmNjFjMDI1MjdlODRlZTRhM2FlMGVjZDVmOTlmNWRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmM3YjZhZmViNzUyNDc2MmJkZTVkNDZhNzA2NDgwY2MuYmluZFBvcHVwKHBvcHVwXzY3ZDViNjM5ZDFkNjRmODdhYzVlMTNjMDczYmFjZTc5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfOTlmNTdmZWY1ODYzNDYzMWJlNDY0NmZiYzA0OGJhMWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg0MDg2ODk5OTgxNDU3NSwgLTczLjg3MjgwODAwMjkxMjg1XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc3MTM1OGNlZjAwNzRiMzZiOGVhNTQzMzJjYmFmMTRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDlkNGQ2NDViMmUzNDdiNjhlODM4MTg1N2Y1MTg0MGQgPSAkKCc8ZGl2IGlkPSJodG1sXzQ5ZDRkNjQ1YjJlMzQ3YjY4ZTgzODE4NTdmNTE4NDBkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0xMDExNS4wLCBpbmogPTI5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc3MTM1OGNlZjAwNzRiMzZiOGVhNTQzMzJjYmFmMTRjLnNldENvbnRlbnQoaHRtbF80OWQ0ZDY0NWIyZTM0N2I2OGU4MzgxODU3ZjUxODQwZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk5ZjU3ZmVmNTg2MzQ2MzFiZTQ2NDZmYmMwNDhiYTFjLmJpbmRQb3B1cChwb3B1cF83NzEzNThjZWYwMDc0YjM2YjhlYTU0MzMyY2JhZjE0YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2Q4NjljZGViNTQ4MDRmZWM5MmEyODNkOGZmZTA0OTlkID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NTU3ODY5OTk3MzIzNSwgLTczLjkwNTU3MDAwMjc1MDk4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJiNzA1OWZhOGZlYTRiMDE4NDY4OTRhZTI0ZGRiMGJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmM0YmZmOTI5MjNjNDNkZGE5MzJjMmJkMWNlZGIwMTMgPSAkKCc8ZGl2IGlkPSJodG1sXzJjNGJmZjkyOTIzYzQzZGRhOTMyYzJiZDFjZWRiMDEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0xMDE0Mi4wLCBpbmogPTM0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJiNzA1OWZhOGZlYTRiMDE4NDY4OTRhZTI0ZGRiMGJhLnNldENvbnRlbnQoaHRtbF8yYzRiZmY5MjkyM2M0M2RkYTkzMmMyYmQxY2VkYjAxMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q4NjljZGViNTQ4MDRmZWM5MmEyODNkOGZmZTA0OTlkLmJpbmRQb3B1cChwb3B1cF8yYjcwNTlmYThmZWE0YjAxODQ2ODk0YWUyNGRkYjBiYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzEzMTNiYjQzYWI5MjRhMWQ4ZTBhZTFhY2MxOTIyZmRkID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NTczNDc5OTk5MDUyNywgLTczLjkwOTgxMDAwMTU3OTM2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyNTIxODkyNDU2YjQ2Yjc5ZjU1ZjFjOTQxY2UzYWQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzViYmRkZjYxNjkzNDM0ZjkzYjVhOTAyMzlmNjdmYWQgPSAkKCc8ZGl2IGlkPSJodG1sX2M1YmJkZGY2MTY5MzQzNGY5M2I1YTkwMjM5ZjY3ZmFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0xMDE4Mi4wLCBpbmogPTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTI1MjE4OTI0NTZiNDZiNzlmNTVmMWM5NDFjZTNhZDcuc2V0Q29udGVudChodG1sX2M1YmJkZGY2MTY5MzQzNGY5M2I1YTkwMjM5ZjY3ZmFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTMxM2JiNDNhYjkyNGExZDhlMGFlMWFjYzE5MjJmZGQuYmluZFBvcHVwKHBvcHVwXzUyNTIxODkyNDU2YjQ2Yjc5ZjU1ZjFjOTQxY2UzYWQ3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMDZiMDFhMzEzMmQxNDNlOTg3ZGMyMTNmMjlkYzQwNTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg1ODcwODk5OTg4MzUwNCwgLTczLjkwMzY5MTAwMDU3ODM5XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY2NzQ4NmI2ZjI5NTQ5NjU4MmNjNDk4MzNmYTk3OWU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGRmMThmY2ZjNjRmNDIxMGIzZDUyOTMyOTIyNjFhNDggPSAkKCc8ZGl2IGlkPSJodG1sXzBkZjE4ZmNmYzY0ZjQyMTBiM2Q1MjkzMjkyMjYxYTQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0xMDIzNy4wLCBpbmogPTE4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2NzQ4NmI2ZjI5NTQ5NjU4MmNjNDk4MzNmYTk3OWU0LnNldENvbnRlbnQoaHRtbF8wZGYxOGZjZmM2NGY0MjEwYjNkNTI5MzI5MjI2MWE0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA2YjAxYTMxMzJkMTQzZTk4N2RjMjEzZjI5ZGM0MDUyLmJpbmRQb3B1cChwb3B1cF82Njc0ODZiNmYyOTU0OTY1ODJjYzQ5ODMzZmE5NzllNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzk3NWQxZmQzMDNlYzRlYmRhYmVmNTg1YTJkNzM3OTVmID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NTgzNjc5OTk4NTc2LCAtNzMuOTAzOTA4MDAyODQyMDZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTFhZDUzMWExZGU4NDhmNmFlMWI3YTFjYmFhNTE4ZTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNWZkYWFjMjk2MDA0Y2ViYTQ1NTBkMWI1MzhhM2Y3YSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTVmZGFhYzI5NjAwNGNlYmE0NTUwZDFiNTM4YTNmN2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTEwMjU3LjAsIGluaiA9MTguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTFhZDUzMWExZGU4NDhmNmFlMWI3YTFjYmFhNTE4ZTIuc2V0Q29udGVudChodG1sX2E1ZmRhYWMyOTYwMDRjZWJhNDU1MGQxYjUzOGEzZjdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTc1ZDFmZDMwM2VjNGViZGFiZWY1ODVhMmQ3Mzc5NWYuYmluZFBvcHVwKHBvcHVwXzUxYWQ1MzFhMWRlODQ4ZjZhZTFiN2ExY2JhYTUxOGUyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYTFiNTJmYzExMTU3NDI2NmI4NjAwMWVmY2QwYmZiNGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg1OTYwNzk5OTc1MTU2LCAtNzMuOTA3NzczMDAwNTY5NDldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzU3MDk4ZmQxOTRkNDNjNGFlZjc1NDhjZjE2N2U4ODEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMjEwYWMxN2VhNDc0NThmOTgwNTY4NjUzNDVhMjZjZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjIxMGFjMTdlYTQ3NDU4Zjk4MDU2ODY1MzQ1YTI2Y2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTEwMjY0LjAsIGluaiA9MzMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzU3MDk4ZmQxOTRkNDNjNGFlZjc1NDhjZjE2N2U4ODEuc2V0Q29udGVudChodG1sXzIyMTBhYzE3ZWE0NzQ1OGY5ODA1Njg2NTM0NWEyNmNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTFiNTJmYzExMTU3NDI2NmI4NjAwMWVmY2QwYmZiNGQuYmluZFBvcHVwKHBvcHVwX2M1NzA5OGZkMTk0ZDQzYzRhZWY3NTQ4Y2YxNjdlODgxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNjYzMzIzNzhlNzUzNDA1ZmE5NWJlODA5YjczNzRhOGYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg2MDU3Nzk5OTc0MDI1LCAtNzMuOTAyNTQ1MDAyNjcxODddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGZlYzI0YTI1Mzg3NDMyNjhkMjFlNjUwNDE4YjczM2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NTYwZWY1OTc2NzI0ZDJlYjdiYmY2NzMxOTE0ZDkzOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzU2MGVmNTk3NjcyNGQyZWI3YmJmNjczMTkxNGQ5MzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTEwMjc5LjAsIGluaiA9MzMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGZlYzI0YTI1Mzg3NDMyNjhkMjFlNjUwNDE4YjczM2Euc2V0Q29udGVudChodG1sXzc1NjBlZjU5NzY3MjRkMmViN2JiZjY3MzE5MTRkOTM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjYzMzIzNzhlNzUzNDA1ZmE5NWJlODA5YjczNzRhOGYuYmluZFBvcHVwKHBvcHVwXzRmZWMyNGEyNTM4NzQzMjY4ZDIxZTY1MDQxOGI3MzNhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZmMxNjFmZTQ3YmQ5NDQwY2I4MmE4ZTZiNTc0YTEwNzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg2NDI0Nzk5OTg0ODQzLCAtNzMuOTAzOTkzMDAzMzc3NjVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmY3YjhlOWMwZTFlNDRhZjkyNTY2MGU0MzczMTAwMjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NmRlZDI1ZGNkMTg0NjZlOWY0ZjQ5Yjg1NWI5MDU3MSA9ICQoJzxkaXYgaWQ9Imh0bWxfNTZkZWQyNWRjZDE4NDY2ZTlmNGY0OWI4NTViOTA1NzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTEwMzYxLjAsIGluaiA9MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZjdiOGU5YzBlMWU0NGFmOTI1NjYwZTQzNzMxMDAyOS5zZXRDb250ZW50KGh0bWxfNTZkZWQyNWRjZDE4NDY2ZTlmNGY0OWI4NTViOTA1NzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mYzE2MWZlNDdiZDk0NDBjYjgyYThlNmI1NzRhMTA3Ni5iaW5kUG9wdXAocG9wdXBfZmY3YjhlOWMwZTFlNDRhZjkyNTY2MGU0MzczMTAwMjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9mODgzMzJlODliNGI0ZTNjYjAxMTk1NzBiYjVlNmZhNSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODY0MjQ3OTk5ODQ4NDMsIC03My45MDM5OTMwMDMzNzc2NV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MzY0MzNhNmI3MmU0NmI4OTA5YmVjYmMwOGNkN2U2ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y3NTdlMjRjNzJlOTRiN2E4MDg1YmVkMjIzNmJkYjEwID0gJCgnPGRpdiBpZD0iaHRtbF9mNzU3ZTI0YzcyZTk0YjdhODA4NWJlZDIyMzZiZGIxMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MTAzNjIuMCwgaW5qID0yLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzNjQzM2E2YjcyZTQ2Yjg5MDliZWNiYzA4Y2Q3ZTZkLnNldENvbnRlbnQoaHRtbF9mNzU3ZTI0YzcyZTk0YjdhODA4NWJlZDIyMzZiZGIxMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y4ODMzMmU4OWI0YjRlM2NiMDExOTU3MGJiNWU2ZmE1LmJpbmRQb3B1cChwb3B1cF81MzY0MzNhNmI3MmU0NmI4OTA5YmVjYmMwOGNkN2U2ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzNhNTczNzIwYmQ4YjQ4YmM5YWFkZjI2MTZhNjRlOTFhID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44NjUzMTA5OTk4NzkyOCwgLTczLjkwMzMyMjAwMTU1NDJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTZkZWNjYTNlZjVjNGE2YTkwNzhhY2QxYWExOWJlZTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYjk3OWMwZGUxNjU0MTMzOWY5MjNkM2VlMmUwZTc4NiA9ICQoJzxkaXYgaWQ9Imh0bWxfMmI5NzljMGRlMTY1NDEzMzlmOTIzZDNlZTJlMGU3ODYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTEwMzkxLjAsIGluaiA9MTUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTZkZWNjYTNlZjVjNGE2YTkwNzhhY2QxYWExOWJlZTMuc2V0Q29udGVudChodG1sXzJiOTc5YzBkZTE2NTQxMzM5ZjkyM2QzZWUyZTBlNzg2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2E1NzM3MjBiZDhiNDhiYzlhYWRmMjYxNmE2NGU5MWEuYmluZFBvcHVwKHBvcHVwXzk2ZGVjY2EzZWY1YzRhNmE5MDc4YWNkMWFhMTliZWUzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZDY1NmE3YzI1MDAwNDFiMWJjMGEwOGYzM2MwNjJjODUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg2NjcyNzk5OTk5NzMxLCAtNzMuODk3OTc5MDAwMDk4MTZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODhkYTVkYzNlOTlkNDQ5ZGFiNGIxYjQwNmQ3MWQ4NDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYjg3Nzc3YmEwYmE0NGZmYjMzMDM1NTZhMTQ0NWVkNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZmI4Nzc3N2JhMGJhNDRmZmIzMzAzNTU2YTE0NDVlZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTEwNDA5LjAsIGluaiA9OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OGRhNWRjM2U5OWQ0NDlkYWI0YjFiNDA2ZDcxZDg0Ny5zZXRDb250ZW50KGh0bWxfZmI4Nzc3N2JhMGJhNDRmZmIzMzAzNTU2YTE0NDVlZDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kNjU2YTdjMjUwMDA0MWIxYmMwYTA4ZjMzYzA2MmM4NS5iaW5kUG9wdXAocG9wdXBfODhkYTVkYzNlOTlkNDQ5ZGFiNGIxYjQwNmQ3MWQ4NDcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9mYzI1ZjRkY2RkY2M0Y2M3YWVkNGY4ZjUxYmQwMjdiMCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODY4NTY0OTk5Nzk4ODM1LCAtNzMuODk2NTYxMDAxMTY0ODFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDcwMTNmZTM0ODQ0NDE4N2JjNGNmZjkzYmYzYmJlZWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZGVlYTU3YjlmNWE0NGFiOTcyZjExMGY5ODI0OTM4ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMGRlZWE1N2I5ZjVhNDRhYjk3MmYxMTBmOTgyNDkzOGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTEwNDM0LjAsIGluaiA9MTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDcwMTNmZTM0ODQ0NDE4N2JjNGNmZjkzYmYzYmJlZWMuc2V0Q29udGVudChodG1sXzBkZWVhNTdiOWY1YTQ0YWI5NzJmMTEwZjk4MjQ5MzhmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmMyNWY0ZGNkZGNjNGNjN2FlZDRmOGY1MWJkMDI3YjAuYmluZFBvcHVwKHBvcHVwXzQ3MDEzZmUzNDg0NDQxODdiYzRjZmY5M2JmM2JiZWVjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNjA0NWE0NzYzYTBmNGI0OGIyMzg0OGMwNjU0YzFjODUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg3MDA0MDk5OTkwMzk2LCAtNzMuODk5Njg2MDAxNDc2NjJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGM2ZjdhODkxOTFlNDcyMWFhZjRhNTcyODg4NjFmYzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MGNmNTBiNGI2NTA0MjI2OTBlMjBlODQ1YjJmZmM3ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNTBjZjUwYjRiNjUwNDIyNjkwZTIwZTg0NWIyZmZjN2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTEwNDM4LjAsIGluaiA9OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYzZmN2E4OTE5MWU0NzIxYWFmNGE1NzI4ODg2MWZjMy5zZXRDb250ZW50KGh0bWxfNTBjZjUwYjRiNjUwNDIyNjkwZTIwZTg0NWIyZmZjN2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82MDQ1YTQ3NjNhMGY0YjQ4YjIzODQ4YzA2NTRjMWM4NS5iaW5kUG9wdXAocG9wdXBfMGM2ZjdhODkxOTFlNDcyMWFhZjRhNTcyODg4NjFmYzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8yNGQxNDcxMzhiYWQ0YjRjODRmNmU0NzIwMTE1MDA1NyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODY5MjI5OTk5ODYxOTM2LCAtNzMuODk2MDM3MDAxNjIyODddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWY4NmNlMDU0MWM1NDIwMzhiM2JkMWI3MmNiOGIyMTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MmMzZmE3ZmFhMWM0NjkwYTk0OGIzODU5MTg2ZjE4YiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDJjM2ZhN2ZhYTFjNDY5MGE5NDhiMzg1OTE4NmYxOGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTEwNDQyLjAsIGluaiA9MTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWY4NmNlMDU0MWM1NDIwMzhiM2JkMWI3MmNiOGIyMTIuc2V0Q29udGVudChodG1sXzQyYzNmYTdmYWExYzQ2OTBhOTQ4YjM4NTkxODZmMThiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjRkMTQ3MTM4YmFkNGI0Yzg0ZjZlNDcyMDExNTAwNTcuYmluZFBvcHVwKHBvcHVwX2VmODZjZTA1NDFjNTQyMDM4YjNiZDFiNzJjYjhiMjEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZDFiZGYwY2JjNDBjNGQzNDg0MWM0NDZiNDc5OTExYjggPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg3NDUwMzk5OTc1NzUxLCAtNzMuODUyMDY1MDAwMTYyOTJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGJhNDVjOWFlNjU0NDliZGI1NDBkODE3NzJkYTY2NTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYmE4YzYwM2QyYzY0OTdlYjk0ZjkzZjRmZTliMDhjMiA9ICQoJzxkaXYgaWQ9Imh0bWxfYWJhOGM2MDNkMmM2NDk3ZWI5NGY5M2Y0ZmU5YjA4YzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTEwNTk0LjAsIGluaiA9NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YmE0NWM5YWU2NTQ0OWJkYjU0MGQ4MTc3MmRhNjY1Ni5zZXRDb250ZW50KGh0bWxfYWJhOGM2MDNkMmM2NDk3ZWI5NGY5M2Y0ZmU5YjA4YzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMWJkZjBjYmM0MGM0ZDM0ODQxYzQ0NmI0Nzk5MTFiOC5iaW5kUG9wdXAocG9wdXBfOGJhNDVjOWFlNjU0NDliZGI1NDBkODE3NzJkYTY2NTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9lZjY1NTM2OTc4Yzc0YzkzODA0NTgwNWUyOTQ4NDg5YiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDAuODg3MDk2OTk5ODI0NzM1LCAtNzMuODYwODYyMDAzNTg5ODNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTQyZDg1NzNiZWNiNDIyY2E1ODIwMjI4NjIyMzY2YzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZGNhYzZjMjU4OTg0NGE0Yjg4NTczNGYzYmJmODVlMCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWRjYWM2YzI1ODk4NDRhNGI4ODU3MzRmM2JiZjg1ZTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTEwNzM0LjAsIGluaiA9MTIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTQyZDg1NzNiZWNiNDIyY2E1ODIwMjI4NjIyMzY2YzIuc2V0Q29udGVudChodG1sXzlkY2FjNmMyNTg5ODQ0YTRiODg1NzM0ZjNiYmY4NWUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWY2NTUzNjk3OGM3NGM5MzgwNDU4MDVlMjk0ODQ4OWIuYmluZFBvcHVwKHBvcHVwXzk0MmQ4NTczYmVjYjQyMmNhNTgyMDIyODYyMjM2NmMyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMzQxNzczODRhYmU0NDhmZjkzMzdlZTYwZmJjY2M5NzEgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg4NzgwMzk5OTgxNTAxLCAtNzMuODYwNDUyMDAyMTA0NDhdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTAzNDNhZDczODM1NDBkZTliN2I2ODQyZDQwZTc1NDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZjA0OTNmZDFlZWU0YzcyODQ2ZDI2NDdmM2E1NTg4NSA9ICQoJzxkaXYgaWQ9Imh0bWxfNmYwNDkzZmQxZWVlNGM3Mjg0NmQyNjQ3ZjNhNTU4ODUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTEwNzUwLjAsIGluaiA9MzQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTAzNDNhZDczODM1NDBkZTliN2I2ODQyZDQwZTc1NDQuc2V0Q29udGVudChodG1sXzZmMDQ5M2ZkMWVlZTRjNzI4NDZkMjY0N2YzYTU1ODg1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzQxNzczODRhYmU0NDhmZjkzMzdlZTYwZmJjY2M5NzEuYmluZFBvcHVwKHBvcHVwX2EwMzQzYWQ3MzgzNTQwZGU5YjdiNjg0MmQ0MGU3NTQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZjVkODAzYmZkYTdhNGYzMmFmYmI1MDk2ZjkyZGZmYzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg3MzM5Njk5OTk0NDAwNiwgLTczLjkwNjcwMDAwMDMwMDIzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwMzkwNzAwNjJmNjQxOTQ5MTAzNzdkNjJlMTcxOWE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjc3OTdmZDgxMDM5NGY3MjljM2Y5NGEwYzc0YjI5MTMgPSAkKCc8ZGl2IGlkPSJodG1sX2Y3Nzk3ZmQ4MTAzOTRmNzI5YzNmOTRhMGM3NGIyOTEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0xMDc1MS4wLCBpbmogPTIyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwMzkwNzAwNjJmNjQxOTQ5MTAzNzdkNjJlMTcxOWE0LnNldENvbnRlbnQoaHRtbF9mNzc5N2ZkODEwMzk0ZjcyOWMzZjk0YTBjNzRiMjkxMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y1ZDgwM2JmZGE3YTRmMzJhZmJiNTA5NmY5MmRmZmM0LmJpbmRQb3B1cChwb3B1cF8zMDM5MDcwMDYyZjY0MTk0OTEwMzc3ZDYyZTE3MTlhNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2E0Y2E1MDYyMzVmZjQ5NzM4NTI0NDI5ZDhjOGY0NDU1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44ODg1MTA5OTk5ODc3OCwgLTczLjg2MDA4MTAwMTQ0MTM2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyMTQ2ZDQ3OTIyZjRjMWE5OGM5ZmVjYzllOGJhOGVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjkxYmJlOGU4MWJlNDk5YTk0MGU5NDY0YWZiYmI5NmEgPSAkKCc8ZGl2IGlkPSJodG1sXzI5MWJiZThlODFiZTQ5OWE5NDBlOTQ2NGFmYmJiOTZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0xMDc2Mi4wLCBpbmogPTEzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyMTQ2ZDQ3OTIyZjRjMWE5OGM5ZmVjYzllOGJhOGVlLnNldENvbnRlbnQoaHRtbF8yOTFiYmU4ZTgxYmU0OTlhOTQwZTk0NjRhZmJiYjk2YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E0Y2E1MDYyMzVmZjQ5NzM4NTI0NDI5ZDhjOGY0NDU1LmJpbmRQb3B1cChwb3B1cF81MjE0NmQ0NzkyMmY0YzFhOThjOWZlY2M5ZThiYThlZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzQyZDUzNmNkNGJkNzQ1NzlhZDU5N2QwMTUwYmI3OTcyID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44OTEzMzY5OTk3NTkxNSwgLTczLjg1ODUxODAwMTA5NjI2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5YTg4MDA2NmRiMjRmNmE4MmM3ODFlN2E2YjFlYjA3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTdmYjM1M2I5OGJmNGYxOWIxYzUwNjU5OTM2ZGMxOWIgPSAkKCc8ZGl2IGlkPSJodG1sXzk3ZmIzNTNiOThiZjRmMTliMWM1MDY1OTkzNmRjMTliIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0xMDgyMi4wLCBpbmogPTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDlhODgwMDY2ZGIyNGY2YTgyYzc4MWU3YTZiMWViMDcuc2V0Q29udGVudChodG1sXzk3ZmIzNTNiOThiZjRmMTliMWM1MDY1OTkzNmRjMTliKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDJkNTM2Y2Q0YmQ3NDU3OWFkNTk3ZDAxNTBiYjc5NzIuYmluZFBvcHVwKHBvcHVwX2Q5YTg4MDA2NmRiMjRmNmE4MmM3ODFlN2E2YjFlYjA3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNjJmM2VkOGM3NzBmNGNiMzk3ZTI5Y2Q0MTIzMTQzZDMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg4MTM0NTk5OTk2MjIzLCAtNzMuOTA5MzM2MDAyNzM3MV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZDEwNTdlZWIzZDU0YzAyYWM2ZDczMGQzOWE4OGI3OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU1NzcxNTkyNzljYjQyMDc5NmE0ZDA1MjE1ZGI2MzkyID0gJCgnPGRpdiBpZD0iaHRtbF81NTc3MTU5Mjc5Y2I0MjA3OTZhNGQwNTIxNWRiNjM5MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MTA4NTYuMCwgaW5qID02LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhkMTA1N2VlYjNkNTRjMDJhYzZkNzMwZDM5YTg4Yjc4LnNldENvbnRlbnQoaHRtbF81NTc3MTU5Mjc5Y2I0MjA3OTZhNGQwNTIxNWRiNjM5Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYyZjNlZDhjNzcwZjRjYjM5N2UyOWNkNDEyMzE0M2QzLmJpbmRQb3B1cChwb3B1cF84ZDEwNTdlZWIzZDU0YzAyYWM2ZDczMGQzOWE4OGI3OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzdkMzU2ZTM1OWZhNzQyMDI5Y2Y3NTU1YzRiN2Q2YmJhID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44ODYzNzM5OTk5NTI4NDUsIC03My45MTM5NzgwMDAzNTE1Nl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MTIwOGRhMzBmNjM0YzIzODIzZDNkZDQyOGM1ODVkZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgxOTc0OTVkYjhjMjRhYWE4OGE0YzMxNGUyMWFkYWRjID0gJCgnPGRpdiBpZD0iaHRtbF84MTk3NDk1ZGI4YzI0YWFhODhhNGMzMTRlMjFhZGFkYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MTEwMTEuMCwgaW5qID0yLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcxMjA4ZGEzMGY2MzRjMjM4MjNkM2RkNDI4YzU4NWRlLnNldENvbnRlbnQoaHRtbF84MTk3NDk1ZGI4YzI0YWFhODhhNGMzMTRlMjFhZGFkYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdkMzU2ZTM1OWZhNzQyMDI5Y2Y3NTU1YzRiN2Q2YmJhLmJpbmRQb3B1cChwb3B1cF83MTIwOGRhMzBmNjM0YzIzODIzZDNkZDQyOGM1ODVkZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzRiYzUxNWE0OTFiYzQ2MzZiM2Q3Y2MzMjc4OThlMzY2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44OTU1OTY5OTk5ODQ3NiwgLTczLjg1NjE2MDAwMTc0MzJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzUyNzlmMzRlOTM5ODQ4OGNiZTFhZDFmMTdhNDI1ZjhjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmU0Njg1OWZhYzYyNGUwOTgyZDBmMTZiYzJiYzdlNWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYzVjYTdiZDc5OTY0ZTVjOGE1YWI5MWQxYmY4ZDYyNiA9ICQoJzxkaXYgaWQ9Imh0bWxfYWM1Y2E3YmQ3OTk2NGU1YzhhNWFiOTFkMWJmOGQ2MjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklEPTExMDIyLjAsIGluaiA9MTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmU0Njg1OWZhYzYyNGUwOTgyZDBmMTZiYzJiYzdlNWIuc2V0Q29udGVudChodG1sX2FjNWNhN2JkNzk5NjRlNWM4YTVhYjkxZDFiZjhkNjI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGJjNTE1YTQ5MWJjNDYzNmIzZDdjYzMyNzg5OGUzNjYuYmluZFBvcHVwKHBvcHVwX2ZlNDY4NTlmYWM2MjRlMDk4MmQwZjE2YmMyYmM3ZTViKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMmUyNDJjODMwNmIwNGY4ZWFiZGE1MzliZjBhMWU2ZGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQwLjg4NzA5OTk5OTkyODg5LCAtNzMuOTEzMzA3MDAxODk3MV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMjY3Y2I3YWRlODM0NTVmYWRmNjUyZGM5ZmJjMTE0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg3N2ExYzYyZGVmZjRkZjJhOTFhMmYxZTc3MjY2Zjc2ID0gJCgnPGRpdiBpZD0iaHRtbF84NzdhMWM2MmRlZmY0ZGYyYTkxYTJmMWU3NzI2NmY3NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MTEwNTIuMCwgaW5qID0yLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YyNjdjYjdhZGU4MzQ1NWZhZGY2NTJkYzlmYmMxMTRlLnNldENvbnRlbnQoaHRtbF84NzdhMWM2MmRlZmY0ZGYyYTkxYTJmMWU3NzI2NmY3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJlMjQyYzgzMDZiMDRmOGVhYmRhNTM5YmYwYTFlNmRkLmJpbmRQb3B1cChwb3B1cF9mMjY3Y2I3YWRlODM0NTVmYWRmNjUyZGM5ZmJjMTE0ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2NlNzAyYTdiMzlmODRkYThiOTQwOTlmM2M2MjVlOTQyID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC45MDM0Mjc5OTk3NjQ1LCAtNzMuODUwMzc1MDAwMzA5M10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wODU1YTA2MTVlNWU0MTJkODZhYjY0NWYyNTVlYjg3MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkzNTk2N2MyNTc2YTQ1ZWFiYmU4NGZlY2U1YWZhNjk4ID0gJCgnPGRpdiBpZD0iaHRtbF85MzU5NjdjMjU3NmE0NWVhYmJlODRmZWNlNWFmYTY5OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MTExODkuMCwgaW5qID0wLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA4NTVhMDYxNWU1ZTQxMmQ4NmFiNjQ1ZjI1NWViODcwLnNldENvbnRlbnQoaHRtbF85MzU5NjdjMjU3NmE0NWVhYmJlODRmZWNlNWFmYTY5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NlNzAyYTdiMzlmODRkYThiOTQwOTlmM2M2MjVlOTQyLmJpbmRQb3B1cChwb3B1cF8wODU1YTA2MTVlNWU0MTJkODZhYjY0NWYyNTVlYjg3MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2IzOWJhOTI3NGJjOTQyMjliYmZkM2VhZDk4NjMwNjkwID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC45MDY4NjE5OTk5MDcyOSwgLTczLjkwNDEwMDAwMTQzMjM4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXJrZXJfY2x1c3Rlcl81Mjc5ZjM0ZTkzOTg0ODhjYmUxYWQxZjE3YTQyNWY4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1NGVjZGJlMmJlNTQ0NWJhNmY5MjA2ZmNjODIxMTJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2I2MTkzYTExODQ4NGEzNWIwMWMzODE2MmU4Mzk2NzMgPSAkKCc8ZGl2IGlkPSJodG1sXzdiNjE5M2ExMTg0ODRhMzViMDFjMzgxNjJlODM5NjczIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JRD0xMTM2OC4wLCBpbmogPTIxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY1NGVjZGJlMmJlNTQ0NWJhNmY5MjA2ZmNjODIxMTJiLnNldENvbnRlbnQoaHRtbF83YjYxOTNhMTE4NDg0YTM1YjAxYzM4MTYyZTgzOTY3Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IzOWJhOTI3NGJjOTQyMjliYmZkM2VhZDk4NjMwNjkwLmJpbmRQb3B1cChwb3B1cF82NTRlY2RiZTJiZTU0NDViYTZmOTIwNmZjYzgyMTEyYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzIyN2RhYjVkYzhiYzQ1ZGU5OWJiMTUzNzUxMWRmNmZjID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MC44Njc4NTc5OTk4NTE3MTUsIC03My44NDEyMjQwMDE3NjcwNV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFya2VyX2NsdXN0ZXJfNTI3OWYzNGU5Mzk4NDg4Y2JlMWFkMWYxN2E0MjVmOGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZDc2ZThjNTE0NWI0ZTlmODI5NGQzMGZiY2Q5ZmM2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxOGRkMmYzY2YyNDQwMzdiMjMwZjMwNTJmY2FlNTllID0gJCgnPGRpdiBpZD0iaHRtbF9kMThkZDJmM2NmMjQ0MDM3YjIzMGYzMDUyZmNhZTU5ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SUQ9MTE0NTcuMCwgaW5qID05LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBkNzZlOGM1MTQ1YjRlOWY4Mjk0ZDMwZmJjZDlmYzYzLnNldENvbnRlbnQoaHRtbF9kMThkZDJmM2NmMjQ0MDM3YjIzMGYzMDUyZmNhZTU5ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzIyN2RhYjVkYzhiYzQ1ZGU5OWJiMTUzNzUxMWRmNmZjLmJpbmRQb3B1cChwb3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment