Skip to content

Instantly share code, notes, and snippets.

@abhinavtripathi95
Created June 11, 2020 17:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save abhinavtripathi95/825d63e3e2c6992c5952731b59aaa16b to your computer and use it in GitHub Desktop.
Save abhinavtripathi95/825d63e3e2c6992c5952731b59aaa16b to your computer and use it in GitHub Desktop.
using folium to display markers and circle of radius 100m on a map
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import folium\nfrom folium import plugins",
"execution_count": 1,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# load coordinates using data labels\nimport h5py\nimport numpy as np\nfilename = \"data_labels.h5\"\n\nwith h5py.File(filename, 'r') as f:\n print (list(f.keys()))\n all_sat_LLAHTR = np.asarray(list(f['all_sat_LLAHTR']))\n all_uav_LLAHTR = np.asarray(list(f['all_uav_LLAHTR']))\n all_uav_xyzHTR = np.asarray(list(f['all_uav_xyzHTR']))\n sat_img_path = list(f['sat300_image_paths'])\n uav_img_path = list(f['uav_image_paths'])\n match_array = np.asarray(list(f['match_array_40']))",
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"text": "['all_sat_LLAHTR', 'all_uav_LLAHTR', 'all_uav_xyzHTR', 'match_array_40', 'sat300_image_paths', 'uav_image_paths']\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "atl_sat = []\nfor i in range(100):\n atl_sat.append((all_sat_LLAHTR[i][0], all_sat_LLAHTR[i][1]))",
"execution_count": 3,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "atl_uav = []\nfor i in range(100):\n atl_uav.append((all_uav_LLAHTR[i][0], all_uav_LLAHTR[i][1]))",
"execution_count": 4,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "mapit = None\nfor i in range(len(atl_sat)):\n mapit = folium.Map( location=[ *atl_sat[i] ] )\n mapit = folium.Map( location=[ *atl_uav[i] ] )\n",
"execution_count": 5,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "def sat_icon(i):\n return plugins.BeautifyIcon(\n border_color='#00ABDC',\n text_color='#000000',\n number=i,\n icon_shape='marker',\n inner_icon_style='margin-top:0;')\ndef uav_icon(i):\n return plugins.BeautifyIcon(\n border_color='#8B0000',\n text_color='#000000',\n number=i,\n icon_shape='marker',\n inner_icon_style='margin-top:0;')\n",
"execution_count": 6,
"outputs": []
},
{
"metadata": {
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "for i in range(len(atl_sat)):\n folium.Marker( \n location=[*atl_sat[i]],\n icon=sat_icon(i)\n ).add_to( mapit )\n# for i in range(len(atl_uav)):\n# folium.Marker(\n# location= [*atl_uav[i]],\n# icon=uav_icon(i)\n# ).add_to(mapit)\nfolium.Marker(\n location= [*atl_uav[0]],\n icon=uav_icon(0)\n ).add_to(mapit)\nfolium.Circle([*atl_uav[0]],\n radius=100\n ).add_to(mapit)\nmapit",
"execution_count": 7,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 7,
"data": {
"text/plain": "<folium.folium.Map at 0x7f8173c6acc0>",
"text/html": "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjYuMC9kaXN0L2xlYWZsZXQuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0xLjEyLjQubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjYuMC9kaXN0L2xlYWZsZXQuY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzMuMi4wL2Nzcy9ib290c3RyYXAubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9mb250LWF3ZXNvbWUvNC42LjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL0xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLzIuMC4yL2xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhd2Nkbi5naXRoYWNrLmNvbS9weXRob24tdmlzdWFsaXphdGlvbi9mb2xpdW0vbWFzdGVyL2ZvbGl1bS90ZW1wbGF0ZXMvbGVhZmxldC5hd2Vzb21lLnJvdGF0ZS5jc3MiLz4KICAgIDxzdHlsZT5odG1sLCBib2R5IHt3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7bWFyZ2luOiAwO3BhZGRpbmc6IDA7fTwvc3R5bGU+CiAgICA8c3R5bGU+I21hcCB7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtsZWZ0OjA7fTwvc3R5bGU+CiAgICAKICAgICAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwKICAgICAgICAgICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAgICAgI21hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCB7CiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgICAgICB0b3A6IDAuMCU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vcmF3Y2RuLmdpdGhhY2suY29tL21hcnNsYW4zOTAvQmVhdXRpZnlNYXJrZXIvbWFzdGVyL2xlYWZsZXQtYmVhdXRpZnktbWFya2VyLWljb24uY3NzIi8+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vbWFyc2xhbjM5MC9CZWF1dGlmeU1hcmtlci9tYXN0ZXIvbGVhZmxldC1iZWF1dGlmeS1tYXJrZXItaWNvbi5qcyI+PC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbGl1bS1tYXAiIGlkPSJtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQiID48L2Rpdj4KICAgICAgICAKPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkID0gTC5tYXAoCiAgICAgICAgICAgICAgICAibWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkIiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjZW50ZXI6IFszMy43OTg0MDg3MjU5ODA3NywgLTg0LjQyNTg2MjAxMjE2MTU5XSwKICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgICAgICAgICAgICAgIHpvb206IDEwLAogICAgICAgICAgICAgICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIHByZWZlckNhbnZhczogZmFsc2UsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICAKCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfMmViYzMwYTE3MDE5NGM4ZmJkZWRjMmE4M2ZjNmQ4YzIgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICJodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZyIsCiAgICAgICAgICAgICAgICB7ImF0dHJpYnV0aW9uIjogIkRhdGEgYnkgXHUwMDI2Y29weTsgXHUwMDNjYSBocmVmPVwiaHR0cDovL29wZW5zdHJlZXRtYXAub3JnXCJcdTAwM2VPcGVuU3RyZWV0TWFwXHUwMDNjL2FcdTAwM2UsIHVuZGVyIFx1MDAzY2EgaHJlZj1cImh0dHA6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCJcdTAwM2VPRGJMXHUwMDNjL2FcdTAwM2UuIiwgImRldGVjdFJldGluYSI6IGZhbHNlLCAibWF4TmF0aXZlWm9vbSI6IDE4LCAibWF4Wm9vbSI6IDE4LCAibWluWm9vbSI6IDAsICJub1dyYXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLCAic3ViZG9tYWlucyI6ICJhYmMiLCAidG1zIjogZmFsc2V9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzRmM2I5NmY1MDU4MDRmY2ZhYzUzNmE1MjUxNjBhZjZmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk2MzU0NTAxMDA4ODksIC04NC40MzM2MjY2Mzc2NTc4MV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fYzQ5NTRmZDhmNjZhNDJkM2I2MjA1NTYwNGU2YzU2ZTQgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAwLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl80ZjNiOTZmNTA1ODA0ZmNmYWM1MzZhNTI1MTYwYWY2Zi5zZXRJY29uKGJlYXV0aWZ5X2ljb25fYzQ5NTRmZDhmNjZhNDJkM2I2MjA1NTYwNGU2YzU2ZTQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTI3NmI5ZTAzOGQ0NGU5NjhkZTgyOGEwMTQ1OWU0MGUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTY2MDgwNDg4NzkzMSwgLTg0LjQzNTI0ODgxMDQ0MTQ0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl83NjYxMGU0ZjI5OWE0MzI1YmFmOGNjZjNlYjExNDgzMCA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDEsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyX2EyNzZiOWUwMzhkNDRlOTY4ZGU4MjhhMDE0NTllNDBlLnNldEljb24oYmVhdXRpZnlfaWNvbl83NjYxMGU0ZjI5OWE0MzI1YmFmOGNjZjNlYjExNDgzMCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl81ZWQ1ZGVlYjVjNmM0N2ZmYjYyMjcwNGRlNzk4ZDFhMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5ODYwNjgwMDgzNzE2LCAtODQuNDM1MzA0NTYxMDUwMjldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uX2YyNWNhNzMxOTFmZTQ0MmNhYzY3ZmRlNWY1ODkzNTQ4ID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogMiwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfNWVkNWRlZWI1YzZjNDdmZmI2MjI3MDRkZTc5OGQxYTIuc2V0SWNvbihiZWF1dGlmeV9pY29uX2YyNWNhNzMxOTFmZTQ0MmNhYzY3ZmRlNWY1ODkzNTQ4KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2U3MDIzNzE2YWNiYTQ3ZTRiM2JhYTQ1YzQ4Y2I0ZDY0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk4MTY5NjcyNjMxNzE1LCAtODQuNDMxNDQ2NDk5MjIzN10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fNWUwYzA0ODc1ZjM2NDg4OGE2ZGNhNWQ3MjZjMWZlZjcgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAzLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9lNzAyMzcxNmFjYmE0N2U0YjNiYWE0NWM0OGNiNGQ2NC5zZXRJY29uKGJlYXV0aWZ5X2ljb25fNWUwYzA0ODc1ZjM2NDg4OGE2ZGNhNWQ3MjZjMWZlZjcpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjYyM2Q3MTVjOGQ0NDE3ZGFmZjU5ZTk0YzNiZDJmYjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTQ4ODk4MDg5ODI1NSwgLTg0LjQzMTgxNDI0OTE0MTcxXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl8wNzU4OTUxM2VkZGQ0NmZiOWViZTYxNWJmNDJkZmRiYSA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDQsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyX2I2MjNkNzE1YzhkNDQxN2RhZmY1OWU5NGMzYmQyZmI1LnNldEljb24oYmVhdXRpZnlfaWNvbl8wNzU4OTUxM2VkZGQ0NmZiOWViZTYxNWJmNDJkZmRiYSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl80YTY1MzgzMTkxMDg0MmE1OTdmODc2NWNjNGZkMjE0YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NDY4MDY0NzUyNzgwNSwgLTg0LjQzNjM0NDM3MDM1MDA4XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl83N2Y0OTRjNTdjMjk0ZjMwYTkxZGE4MTVhZmFjMTQ0MCA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDUsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyXzRhNjUzODMxOTEwODQyYTU5N2Y4NzY1Y2M0ZmQyMTRjLnNldEljb24oYmVhdXRpZnlfaWNvbl83N2Y0OTRjNTdjMjk0ZjMwYTkxZGE4MTVhZmFjMTQ0MCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9mYjdmMjZhZGRhYWE0ODJhYmEzYjgwNmZjOTE3NDFkNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NjIxNDY1MzYxMTA0NSwgLTg0LjQzMTgwNDgwODM3OTE2XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl80YWVlNDE0NGM2ZGE0ZDg1YjcyOGExNDYwYzMwMzgzMiA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDYsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyX2ZiN2YyNmFkZGFhYTQ4MmFiYTNiODA2ZmM5MTc0MWQ3LnNldEljb24oYmVhdXRpZnlfaWNvbl80YWVlNDE0NGM2ZGE0ZDg1YjcyOGExNDYwYzMwMzgzMik7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl85MDU2NmRhNjgyNWY0YTEwYjA3NWVhNGYyZjg5N2Y1YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NzQ5NDkwMzg2NjU4NiwgLTg0LjQzMzUyOTU1MjcwNjE4XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl9jODlmY2IxY2UwNDk0ZDE4OWE1NzQxYmM4NzQ2ODNlMSA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDcsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyXzkwNTY2ZGE2ODI1ZjRhMTBiMDc1ZWE0ZjJmODk3ZjViLnNldEljb24oYmVhdXRpZnlfaWNvbl9jODlmY2IxY2UwNDk0ZDE4OWE1NzQxYmM4NzQ2ODNlMSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9hY2NhM2ZmNGRlMGI0M2I4OTVjZDM0YzVkMjFkNTFkYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NzAwNzA0NDU4NzIwNCwgLTg0LjQzMjA1OTA2ODA0OTQ3XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl9iMTg4ZjJmYjU4Y2I0ZWU5ODk5MmNjOTc2MWY3ZGExNSA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDgsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyX2FjY2EzZmY0ZGUwYjQzYjg5NWNkMzRjNWQyMWQ1MWRjLnNldEljb24oYmVhdXRpZnlfaWNvbl9iMTg4ZjJmYjU4Y2I0ZWU5ODk5MmNjOTc2MWY3ZGExNSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYWZiMjA5YjJkNGU0MDVjYmYwNDUyNjI5NzEwYzQxMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5ODAyNjczMjY0Mzk4LCAtODQuNDMzMzI5MTUwMTI4N10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fZDMyNGViYWJiYzVhNDNiOWI4OGU2MTJjOTU5ZDJlNmQgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA5LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9kYWZiMjA5YjJkNGU0MDVjYmYwNDUyNjI5NzEwYzQxMS5zZXRJY29uKGJlYXV0aWZ5X2ljb25fZDMyNGViYWJiYzVhNDNiOWI4OGU2MTJjOTU5ZDJlNmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmY2MDExZWVmYTMxNGUxMjlmYzllZmI0ZDVjM2M0YTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTY1Njk2OTE2MDI5NSwgLTg0LjQzMzMxNDU0NjU5MTIyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl9kNTRmODAyYjUyOTk0NDMzYTliYmU5YjY5OWFjZjg4OCA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDEwLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9iZjYwMTFlZWZhMzE0ZTEyOWZjOWVmYjRkNWMzYzRhNy5zZXRJY29uKGJlYXV0aWZ5X2ljb25fZDU0ZjgwMmI1Mjk5NDQzM2E5YmJlOWI2OTlhY2Y4ODgpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzQ4NTliMzNjZTk1NGYxMDkyYjIzOWJiYjk5NDY0N2QgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTYxOTg1NTQ4OTAxMSwgLTg0LjQzNTMxNDYxMzkyMDI4XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl84NTgxN2JiZDRmMWU0Y2Q2ODAzZTNhOWZjZWM1ODkwNyA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDExLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl83NDg1OWIzM2NlOTU0ZjEwOTJiMjM5YmJiOTk0NjQ3ZC5zZXRJY29uKGJlYXV0aWZ5X2ljb25fODU4MTdiYmQ0ZjFlNGNkNjgwM2UzYTlmY2VjNTg5MDcpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjBhNmMzMTEwMTQxNDc2NWI3N2YwNzdmYjYwZDE0YzggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTcxMjAwMjg4OTE5MSwgLTg0LjQzMjAyMTQ4NDE1NTY3XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl8zODQxMzVmOGMxOTg0MWYwODI0Nzk2NjYyYTM4MDRhMyA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDEyLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9iMGE2YzMxMTAxNDE0NzY1Yjc3ZjA3N2ZiNjBkMTRjOC5zZXRJY29uKGJlYXV0aWZ5X2ljb25fMzg0MTM1ZjhjMTk4NDFmMDgyNDc5NjY2MmEzODA0YTMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjk5ZTFkZGMwZTdmNDJhOWFmNmI2NTc2NjlkZTczNGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTUwMzA0MDYzMDg0MSwgLTg0LjQzNTI3OTcwODIwNTZdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uX2M1YzVlOTRhZGQwNTRlYjFiMjVmZDcxZmI5NWNhOWRhID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogMTMsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyXzY5OWUxZGRjMGU3ZjQyYTlhZjZiNjU3NjY5ZGU3MzRkLnNldEljb24oYmVhdXRpZnlfaWNvbl9jNWM1ZTk0YWRkMDU0ZWIxYjI1ZmQ3MWZiOTVjYTlkYSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9jYmE3MDc3YzEyMTY0OWY0YWMwZGRiMmUwNDQyMTk1MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NzgwOTE3OTg2MjA2NCwgLTg0LjQzNDExNzkwODYxNTc5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl9kNzc4ZWRmOTg5YzY0NzFmYWNiNDExNWQ5MWYxNjJkZCA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDE0LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9jYmE3MDc3YzEyMTY0OWY0YWMwZGRiMmUwNDQyMTk1MS5zZXRJY29uKGJlYXV0aWZ5X2ljb25fZDc3OGVkZjk4OWM2NDcxZmFjYjQxMTVkOTFmMTYyZGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTNhYTY2ZjBhZTAyNDM2MzhlZDk0YmY5MmQzNDhjN2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTY2MDY2ODI2NzU2MywgLTg0LjQzMzQxNzQ5ODY5MDMyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl9lNGIyOTQ5NDNjZTE0MzA0YTMzZTk4N2VlN2E4YTA0ZiA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDE1LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl8xM2FhNjZmMGFlMDI0MzYzOGVkOTRiZjkyZDM0OGM3ZS5zZXRJY29uKGJlYXV0aWZ5X2ljb25fZTRiMjk0OTQzY2UxNDMwNGEzM2U5ODdlZTdhOGEwNGYpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmQ1ODhjYzkwMDhiNDIyYmJkM2IwMTU3M2U4ZjhiMDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTgyMzIzNzI5MDUyNSwgLTg0LjQzMjE4MjcxNDExMjc2XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl8yYzQwM2I0OWI1Nzc0MDJmYWUwMWY4OTljYjZjMzhjOSA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDE2LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl8yZDU4OGNjOTAwOGI0MjJiYmQzYjAxNTczZThmOGIwMC5zZXRJY29uKGJlYXV0aWZ5X2ljb25fMmM0MDNiNDliNTc3NDAyZmFlMDFmODk5Y2I2YzM4YzkpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjk1ZjkwZTU0MjAyNGZlMjhiYjk1MjNjYzlmNDg5MGYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTYwOTAwMDk1NzEzOCwgLTg0LjQzNTAxMjMwNDQ4MjldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzE0NzMwMzhhZTA5MDRkZWM5ZTg0NTNkZWNmYzAwNjE2ID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogMTcsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyX2Y5NWY5MGU1NDIwMjRmZTI4YmI5NTIzY2M5ZjQ4OTBmLnNldEljb24oYmVhdXRpZnlfaWNvbl8xNDczMDM4YWUwOTA0ZGVjOWU4NDUzZGVjZmMwMDYxNik7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9lODZlYThlMjM3MjE0YjEzYmIzMzRhNDM3NWQzZDAwNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NDU3NTYxNTY4NDQ2NSwgLTg0LjQzMTI4NjkzODMwMTM0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl9lMDMxYjhiMGNjNmI0NTExOGEwMmEzYTVhNWIwYWVjOSA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDE4LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9lODZlYThlMjM3MjE0YjEzYmIzMzRhNDM3NWQzZDAwNy5zZXRJY29uKGJlYXV0aWZ5X2ljb25fZTAzMWI4YjBjYzZiNDUxMThhMDJhM2E1YTViMGFlYzkpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmU3OTJiNDc2NTA0NDlkNjg0NTc4YjUxNGUwYjdlMTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTgzNjQ5NDI4NjE1MjUsIC04NC40MzE0NjU3MDczODkzOV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fMmIyYTczMDkyOWEzNDVjOGJiZjRmYjM5ZjZhMDBmODYgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAxOSwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfMmU3OTJiNDc2NTA0NDlkNjg0NTc4YjUxNGUwYjdlMTYuc2V0SWNvbihiZWF1dGlmeV9pY29uXzJiMmE3MzA5MjlhMzQ1YzhiYmY0ZmIzOWY2YTAwZjg2KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2Q5MDFjYzg4MmJhZDQzMzNiYWM4NWI1NTZkODU2YTc0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk4MTk4NjY5MDMzMDksIC04NC40MzQ3NDY3NDY4NDYyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl80ODViZGY4MzQ5OWQ0Y2U2Yjk3ZTM0MDg2NTlmYjY2YSA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDIwLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9kOTAxY2M4ODJiYWQ0MzMzYmFjODViNTU2ZDg1NmE3NC5zZXRJY29uKGJlYXV0aWZ5X2ljb25fNDg1YmRmODM0OTlkNGNlNmI5N2UzNDA4NjU5ZmI2NmEpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmFlMzE0OTcxMTdhNGY1ZGE2NDQwNmJhNWQ2NmU0MjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTczNDg2MzMxMjU0MiwgLTg0LjQzMzg4NDYzNTA4NTE5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl9iODYyOGJmZWM3NmI0MTQ5YmI0NWMyOWUzMDU3NzJhMiA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDIxLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9iYWUzMTQ5NzExN2E0ZjVkYTY0NDA2YmE1ZDY2ZTQyMC5zZXRJY29uKGJlYXV0aWZ5X2ljb25fYjg2MjhiZmVjNzZiNDE0OWJiNDVjMjllMzA1NzcyYTIpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTMwYjVlY2ZjY2M0NGNjZGI4ODlhY2ZkODAxMjJjMDggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTU0Mjk3NDM3MzM5MSwgLTg0LjQzMTc4Nzk4OTAwNzQzXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl85M2YzYTgyNTIwNzM0ZGMyYjZiMTY1MmUzOWJlZTMxZiA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDIyLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9lMzBiNWVjZmNjYzQ0Y2NkYjg4OWFjZmQ4MDEyMmMwOC5zZXRJY29uKGJlYXV0aWZ5X2ljb25fOTNmM2E4MjUyMDczNGRjMmI2YjE2NTJlMzliZWUzMWYpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDY4ZDg5OGI1ZmZkNDg4ZmJhNDE5NjZlYzQzNjU3MjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTY5MTgwMDU2NjQ2NjUsIC04NC40MzM5ODYwNTUxMDAwOF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fOTBhY2JjMTIyNjBiNGViYThmYWZhMzdiZGI1ZmU4OTcgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAyMywgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfMDY4ZDg5OGI1ZmZkNDg4ZmJhNDE5NjZlYzQzNjU3MjQuc2V0SWNvbihiZWF1dGlmeV9pY29uXzkwYWNiYzEyMjYwYjRlYmE4ZmFmYTM3YmRiNWZlODk3KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzAzZjdkYjFlMTYwMzQ4MWQ4OTQ4N2YzOWNhZGMzMjVjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk2NTY2NjEyMjA0NzYsIC04NC40MzYxNTgwODQ3NTU2OV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fOWM0NDI5OWEzNGY1NDdkOGI3MDgyYzI2OGY0MGNiYmEgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAyNCwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfMDNmN2RiMWUxNjAzNDgxZDg5NDg3ZjM5Y2FkYzMyNWMuc2V0SWNvbihiZWF1dGlmeV9pY29uXzljNDQyOTlhMzRmNTQ3ZDhiNzA4MmMyNjhmNDBjYmJhKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzMwZDk2OTMzMjVhODRmMzVhMWRiMzgxMzI5MzExMjliID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk3MDA4NzUwNjQxNzksIC04NC40MzU4MDAxODYzMjAyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl8zMGZlNzlmMjE3ZTU0NWMyOTVlYmIwZGJkY2U2YTgwZCA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDI1LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl8zMGQ5NjkzMzI1YTg0ZjM1YTFkYjM4MTMyOTMxMTI5Yi5zZXRJY29uKGJlYXV0aWZ5X2ljb25fMzBmZTc5ZjIxN2U1NDVjMjk1ZWJiMGRiZGNlNmE4MGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjhhMzYwNWY1NDllNDE3NTkyMGVmODA5ZDhjYWEwOWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTU5MTI3MzI1MTYsIC04NC40MzM5NjA3Njc2OTE1Ml0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fMWYwZWZjMzE1ZTQxNDBkNWEwNzYzYmI3NTk4NWRkMDYgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAyNiwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfZjhhMzYwNWY1NDllNDE3NTkyMGVmODA5ZDhjYWEwOWQuc2V0SWNvbihiZWF1dGlmeV9pY29uXzFmMGVmYzMxNWU0MTQwZDVhMDc2M2JiNzU5ODVkZDA2KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2FjMWExZGNlMzgxNDQwODBhNDAxNjZiYmMwZWViNTgxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk3ODAyNDgxODI5NzksIC04NC40MzU2MjcyNTQ3MzQwNF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fNmY4MmY2MjQzZjY2NDEwNWFmZGMyZDI4YTY5M2I1YmIgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAyNywgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfYWMxYTFkY2UzODE0NDA4MGE0MDE2NmJiYzBlZWI1ODEuc2V0SWNvbihiZWF1dGlmeV9pY29uXzZmODJmNjI0M2Y2NjQxMDVhZmRjMmQyOGE2OTNiNWJiKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2M4OWZiMDUwY2FhYTQzZjE5MzJmOTVmM2M5YzQyOWFlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk2NzY0NjgwNTg2MjE1LCAtODQuNDM0OTkxMDMyNDgxMjldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzFhMDI4YWI4MmNhZTQ4NTdiZmIzNjFlYjgzNDA4ZTliID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogMjgsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyX2M4OWZiMDUwY2FhYTQzZjE5MzJmOTVmM2M5YzQyOWFlLnNldEljb24oYmVhdXRpZnlfaWNvbl8xYTAyOGFiODJjYWU0ODU3YmZiMzYxZWI4MzQwOGU5Yik7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZjhkZTQzYjM0N2Q0ODY3YTU2N2RkNjMwMzkyZDcwNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NzQ0OTQ3MzMxMTAyLCAtODQuNDM3ODI4NDkzNDIzNV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fMGY5YTIzNzVkNDFjNDAyNjkxNWIyOThjZGZjNTk1OGMgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAyOSwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfY2Y4ZGU0M2IzNDdkNDg2N2E1NjdkZDYzMDM5MmQ3MDUuc2V0SWNvbihiZWF1dGlmeV9pY29uXzBmOWEyMzc1ZDQxYzQwMjY5MTViMjk4Y2RmYzU5NThjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2RlYzJmODkyOWQxODRhOWNiNzYzMDBjYTM4YjM5ZjlhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk0ODg0MDE3NTg5Mzc1LCAtODQuNDM1MTg1NTMwNTk1MzldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzAyMjg4Y2EyYjc4MjQ0MjM4MjJjNTlmNTMzMzMzNDdlID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogMzAsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyX2RlYzJmODkyOWQxODRhOWNiNzYzMDBjYTM4YjM5ZjlhLnNldEljb24oYmVhdXRpZnlfaWNvbl8wMjI4OGNhMmI3ODI0NDIzODIyYzU5ZjUzMzMzMzQ3ZSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9lZGRjNzBhYTY1NGQ0YTI5YjE1MTg3NGZkNzQzN2ZkMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NjY2MDIxMzc4NjQ3NCwgLTg0LjQzMDQ0MjU2ODQ0OTU4XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl8wNzdhYjNkMzlkYTY0OGVmOTIxOWQyOWUzNWYyNTE4YiA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDMxLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9lZGRjNzBhYTY1NGQ0YTI5YjE1MTg3NGZkNzQzN2ZkMy5zZXRJY29uKGJlYXV0aWZ5X2ljb25fMDc3YWIzZDM5ZGE2NDhlZjkyMTlkMjllMzVmMjUxOGIpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTI2MWViZDY1OGUxNGY3Mjg5MTg1YmFmMDE0OWU2NzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTQ0MTkxMzUzMDQxNDYsIC04NC40MzU4MTU4MDkyMjg1M10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fOWFiODBhYTBjZWZmNDE0NTlmOWIxNDZhYzUzZGUxYzggPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAzMiwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfZTI2MWViZDY1OGUxNGY3Mjg5MTg1YmFmMDE0OWU2NzQuc2V0SWNvbihiZWF1dGlmeV9pY29uXzlhYjgwYWEwY2VmZjQxNDU5ZjliMTQ2YWM1M2RlMWM4KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2I5MjRjMjBhMmI1MjQzN2VhMzY0YWQ1NzE3OGU4NjFkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk3NTE4NDAxNTQxMjksIC04NC40MzQ1NzY4MTU2NzQ5Nl0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fZjQ0NTdhNzA3Y2YzNDJhMTk0MjIzYmRiYTljNDk0MTAgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAzMywgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfYjkyNGMyMGEyYjUyNDM3ZWEzNjRhZDU3MTc4ZTg2MWQuc2V0SWNvbihiZWF1dGlmeV9pY29uX2Y0NDU3YTcwN2NmMzQyYTE5NDIyM2JkYmE5YzQ5NDEwKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzMyNTAwZDNmZjg2YTQ3YjNiZTM3YzkyYjQ4Mjc1YjZmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk0MzQyNTEwNjcwNjUsIC04NC40MzE5NDg4MTcwODMxOF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fMGRhMWVhNzE3NDYyNDJjZThlZTFlZmZkYzI3NDFmMTMgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAzNCwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfMzI1MDBkM2ZmODZhNDdiM2JlMzdjOTJiNDgyNzViNmYuc2V0SWNvbihiZWF1dGlmeV9pY29uXzBkYTFlYTcxNzQ2MjQyY2U4ZWUxZWZmZGMyNzQxZjEzKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2JiYTkzYThlNmY3NjRhODY4OGM2MzU1NTk4NTVhNDkxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk0NzI1MzE2ODgzOTIsIC04NC40MzU0MzAzNTM4NDY0NF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fY2JiNDY4NDVkNzA4NGE5Mjk4N2RhMTU5ZGYyM2ZmMzAgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAzNSwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfYmJhOTNhOGU2Zjc2NGE4Njg4YzYzNTU1OTg1NWE0OTEuc2V0SWNvbihiZWF1dGlmeV9pY29uX2NiYjQ2ODQ1ZDcwODRhOTI5ODdkYTE1OWRmMjNmZjMwKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzE5NjczNGU3MzcwZDQ1YTA5ZTI3ODFkZjhlMDhlNWU1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk4NzY1OTMxMzUxMzMsIC04NC40MzAyNDUzMzExNTc4Nl0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fOTM1ZTY3OGQyNmYzNDc4MGEwNzAwZTQ2ODc2ODhmNWQgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAzNiwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfMTk2NzM0ZTczNzBkNDVhMDllMjc4MWRmOGUwOGU1ZTUuc2V0SWNvbihiZWF1dGlmeV9pY29uXzkzNWU2NzhkMjZmMzQ3ODBhMDcwMGU0Njg3Njg4ZjVkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2ZkMWY5NjYwYjkwODRlMTU4YmMzNTNjODY0ZjRiMWM3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk2NDQyMDU5NjYyOTIsIC04NC40MzU0NzA1MDQ3MjQ3Nl0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fZjBkYmU1NzlkMmFhNGYwYWEyZDIwMDlkOGFmMmI4YWEgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAzNywgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfZmQxZjk2NjBiOTA4NGUxNThiYzM1M2M4NjRmNGIxYzcuc2V0SWNvbihiZWF1dGlmeV9pY29uX2YwZGJlNTc5ZDJhYTRmMGFhMmQyMDA5ZDhhZjJiOGFhKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2I0OWE5MTJjMjNiMzRhMDRhMTRiOTI1NDA4Y2MzNjljID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk2OTgzMTg4OTQ2NjYsIC04NC40Mzc4NjAxMjEyOTg2Nl0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fYzg2NjE4OWEwZTQyNDUzZDhjNjdlYzI2YTllMTAwYjkgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAzOCwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfYjQ5YTkxMmMyM2IzNGEwNGExNGI5MjU0MDhjYzM2OWMuc2V0SWNvbihiZWF1dGlmeV9pY29uX2M4NjYxODlhMGU0MjQ1M2Q4YzY3ZWMyNmE5ZTEwMGI5KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzM1YzQ4NTZlNmZlYjRmMTk5ZjhmYWNiYWQ2NzM2YmFjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk2ODM2MzgwNjgzMzEsIC04NC40MzI5MTgzMzk4NzY2OF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fMGUyOWE2Y2U0MGMwNDIyOGJlMTE2NDg5YWY2YjVlMzUgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAzOSwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfMzVjNDg1NmU2ZmViNGYxOTlmOGZhY2JhZDY3MzZiYWMuc2V0SWNvbihiZWF1dGlmeV9pY29uXzBlMjlhNmNlNDBjMDQyMjhiZTExNjQ4OWFmNmI1ZTM1KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2Y5NTViZDJhYjNlMTQ5NDU5NDJlMzg1NTI5MDRhZWNhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzkyNzA5MDEwMjkyMDksIC04NC40MzA2NTE3NzA1MTIwNF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fM2RlM2U2ZmMxYWZjNGFiZGJlNjlhM2RlNTMxMTEzOGEgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA0MCwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfZjk1NWJkMmFiM2UxNDk0NTk0MmUzODU1MjkwNGFlY2Euc2V0SWNvbihiZWF1dGlmeV9pY29uXzNkZTNlNmZjMWFmYzRhYmRiZTY5YTNkZTUzMTExMzhhKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2ZlM2QzMDU1ZmRmZjRlZDA4ZjZkZWVmM2JjZGYyZDUyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk1NjY0NDM0ODk2Nzg2LCAtODQuNDMxNjQyOTMyNjU3ODRdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzI0ZWYyOGQ1NzVlOTQ4MGViYjY3MDI0MjFkM2VmYWI4ID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogNDEsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyX2ZlM2QzMDU1ZmRmZjRlZDA4ZjZkZWVmM2JjZGYyZDUyLnNldEljb24oYmVhdXRpZnlfaWNvbl8yNGVmMjhkNTc1ZTk0ODBlYmI2NzAyNDIxZDNlZmFiOCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl84ZDI5N2M0NWE4MDc0NzYzYWExNDNkODhmNTBkMDI1YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NDk3OTE0NDQwMzIzNiwgLTg0LjQzNjA0MjY5MzQ0Mjc3XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl9iZGUyMDkyMzdkN2I0YTc3YTZlMDVkZTk5NzI3ZjkyNSA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDQyLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl84ZDI5N2M0NWE4MDc0NzYzYWExNDNkODhmNTBkMDI1Yi5zZXRJY29uKGJlYXV0aWZ5X2ljb25fYmRlMjA5MjM3ZDdiNGE3N2E2ZTA1ZGU5OTcyN2Y5MjUpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDM0MzNiZjVjMzA0NDFlZWE4Njg2Y2NiOTk1MzFjOWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTQ4ODcxMzU1MzU0MiwgLTg0LjQzMzg1NzUwNDA2NTI3XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl81MmEzNmE2ZmExODQ0ZmEzOTYxYjMxOGQxYzRhNmEzNiA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDQzLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9kMzQzM2JmNWMzMDQ0MWVlYTg2ODZjY2I5OTUzMWM5YS5zZXRJY29uKGJlYXV0aWZ5X2ljb25fNTJhMzZhNmZhMTg0NGZhMzk2MWIzMThkMWM0YTZhMzYpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDI1Yzk1M2U0NDY5NDIzYjhkZDY0ZmNiMDgzNTBiNmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTU4NTY5NTgzMTI1MSwgLTg0LjQzNTg3NDY0NTM4MzE1XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl83NGZkMjhhZDA3YWI0YzU5YjcwMzk5NzE1YzM3MTNjNCA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDQ0LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl8wMjVjOTUzZTQ0Njk0MjNiOGRkNjRmY2IwODM1MGI2YS5zZXRJY29uKGJlYXV0aWZ5X2ljb25fNzRmZDI4YWQwN2FiNGM1OWI3MDM5OTcxNWMzNzEzYzQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2YyM2YzMTgxZGM3NGE4Mjk1ZjQ4NjdjOGViZDY2NWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTgwNzE2NzU4NzY0ODYsIC04NC40Mzc3NjQyMzY5Mzg1XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl81ZGJmYzhkZDgwZmE0Njk4OTFjZjA3YzU0OGM5NTM4NiA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDQ1LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl8zZjIzZjMxODFkYzc0YTgyOTVmNDg2N2M4ZWJkNjY1Yy5zZXRJY29uKGJlYXV0aWZ5X2ljb25fNWRiZmM4ZGQ4MGZhNDY5ODkxY2YwN2M1NDhjOTUzODYpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGMyMjE3NDg5NzIzNDBkNDljNzMwMmZjZDE2NGYwNDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTcwMjYyMDYxNDQxMSwgLTg0LjQzMjk3OTE5NTk1Mzc4XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl85NjM5MjkxZjU1MTI0YmRhYWI3YjgxNGMyMDdjZTBkZiA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDQ2LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9kYzIyMTc0ODk3MjM0MGQ0OWM3MzAyZmNkMTY0ZjA0Ni5zZXRJY29uKGJlYXV0aWZ5X2ljb25fOTYzOTI5MWY1NTEyNGJkYWFiN2I4MTRjMjA3Y2UwZGYpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmMzNWI4MTlmYjdlNDBkMjhkODgxMjQwMjMzNjZhNTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTg3NjM4MzIyODA0NywgLTg0LjQzMjQ0NzM1MzkwMTE1XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl82ZGE3NzZkMjc3MGE0ODNkYjFiOWMxYTA1YmM0ZjY5MSA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDQ3LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl8yYzM1YjgxOWZiN2U0MGQyOGQ4ODEyNDAyMzM2NmE1My5zZXRJY29uKGJlYXV0aWZ5X2ljb25fNmRhNzc2ZDI3NzBhNDgzZGIxYjljMWEwNWJjNGY2OTEpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmI2YWI5ZjQ0NzQ3NDk0NzlhNzhjMjE2NWNkNDM4MmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTQyMzMwMjk0MjgzMDUsIC04NC40MzQ5NjMyNzgwNDI5N10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fNDZlYmVhMDM1ZmU1NGVlZjkzMzZkZThlYWE2ZGUyZjYgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA0OCwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfMmI2YWI5ZjQ0NzQ3NDk0NzlhNzhjMjE2NWNkNDM4MmQuc2V0SWNvbihiZWF1dGlmeV9pY29uXzQ2ZWJlYTAzNWZlNTRlZWY5MzM2ZGU4ZWFhNmRlMmY2KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzhkMjM5NDFiNTc0NjRmMzI4Yjg3MjQzYWE3ZGJjYWVkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk0MzY2ODgxMzU3MzA1LCAtODQuNDMxMTU3ODQ2Mzg5MjVdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzQzMWY0MzJlNmFlYzRmNTNiZTY3NTQwMDQ5MTc3NzAzID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogNDksICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyXzhkMjM5NDFiNTc0NjRmMzI4Yjg3MjQzYWE3ZGJjYWVkLnNldEljb24oYmVhdXRpZnlfaWNvbl80MzFmNDMyZTZhZWM0ZjUzYmU2NzU0MDA0OTE3NzcwMyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8zNDgyYWMzNDY3NWM0NmY3OWZkMTJlZDBiODNhM2FjZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5ODA1NDUwMzM0ODQ2LCAtODQuNDI4MDIzOTkwOTY2MjddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uX2RlNDA0MTE1OGZjODRhYmRhOGUyYTYwOTIzNzFkYmUzID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogNTAsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyXzM0ODJhYzM0Njc1YzQ2Zjc5ZmQxMmVkMGI4M2EzYWNmLnNldEljb24oYmVhdXRpZnlfaWNvbl9kZTQwNDExNThmYzg0YWJkYThlMmE2MDkyMzcxZGJlMyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl85NzdjMTMxNmYyYzQ0ZWMzYTI0YWM0ZWQxZjVhYTFjOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NTUxODE5NTQ1MzgxLCAtODQuNDI4NjQ3MDU1MDI5MzldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzEzYmI1NTczYjdiODQyOTRiMzMwZjZjZWFkNGQ2Mzk0ID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogNTEsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyXzk3N2MxMzE2ZjJjNDRlYzNhMjRhYzRlZDFmNWFhMWM5LnNldEljb24oYmVhdXRpZnlfaWNvbl8xM2JiNTU3M2I3Yjg0Mjk0YjMzMGY2Y2VhZDRkNjM5NCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8zOGVkMTRiNDRlMzg0ZGU0YmY5ZjQyMjhkODUxNmE3NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5MzI4MjYwMzU3NjQsIC04NC40MjgxNzgxNzIxMzczXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl8yMzdlYTdhNjQ1MmU0MWU3OTBlNWNkNmM3NjU3MWM4YSA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDUyLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl8zOGVkMTRiNDRlMzg0ZGU0YmY5ZjQyMjhkODUxNmE3Ni5zZXRJY29uKGJlYXV0aWZ5X2ljb25fMjM3ZWE3YTY0NTJlNDFlNzkwZTVjZDZjNzY1NzFjOGEpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTQ3ZTBjNzhlNGI5NDU0Zjk1MWMxOTM5MzY0NDMyMmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTUxNTEwNDk2MTE0NzYsIC04NC40MjgyNTI4MjY1NjI5NF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fM2MxZDA1NTM0Mjk2NDMyNGJmYWQzMzJhYmYxMWZkNWYgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA1MywgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfNTQ3ZTBjNzhlNGI5NDU0Zjk1MWMxOTM5MzY0NDMyMmMuc2V0SWNvbihiZWF1dGlmeV9pY29uXzNjMWQwNTUzNDI5NjQzMjRiZmFkMzMyYWJmMTFmZDVmKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzZmYmFjNWUxMWMzNzRkNzg4MTA2MTlhZjkwZTMyMGIwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk1Njg3MTY5MjEzNDIsIC04NC40Mjc4NTQ1Njg0OTU0M10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fZGVlOTRmNDliNzZiNDZjMWIyNTFhMTgyMGM2YmQ2MzcgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA1NCwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfNmZiYWM1ZTExYzM3NGQ3ODgxMDYxOWFmOTBlMzIwYjAuc2V0SWNvbihiZWF1dGlmeV9pY29uX2RlZTk0ZjQ5Yjc2YjQ2YzFiMjUxYTE4MjBjNmJkNjM3KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzc3ZDdkYzc3MmE2MjRkNzZhZGQ0MDdmMjJiMmYwYTBlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk1MDQ4ODI3MTc1MjUsIC04NC40MzA2NTk1MjE4NDc5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl84YzRhNWZkZmM0MGY0N2ZiOGFlYTE0M2QzNGY5OWQzZSA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDU1LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl83N2Q3ZGM3NzJhNjI0ZDc2YWRkNDA3ZjIyYjJmMGEwZS5zZXRJY29uKGJlYXV0aWZ5X2ljb25fOGM0YTVmZGZjNDBmNDdmYjhhZWExNDNkMzRmOTlkM2UpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2FkOTAwNTU2YzU2NGQ1NTkzZmZiNGIzYmQzN2QwNTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTYzODk1ODMyNTk1MywgLTg0LjQzMDkyNjI1NDM0MTMzXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl9iNjgxNjQ0ODEwZWI0OGYyYmJmMjZjMjEyNDM5NDAyNyA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDU2LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl83YWQ5MDA1NTZjNTY0ZDU1OTNmZmI0YjNiZDM3ZDA1NS5zZXRJY29uKGJlYXV0aWZ5X2ljb25fYjY4MTY0NDgxMGViNDhmMmJiZjI2YzIxMjQzOTQwMjcpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGU4NjgzYmY3ODlkNDY2ZThjN2ZjZTEwZTE1N2M0YTggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTY4OTk3OTkxMTMxMzUsIC04NC40MzAxOTI2OTE3MTA5Nl0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fN2JiNTg0MjgwMmM5NDE1M2JjMDc5NTAxM2U3MTVmOTkgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA1NywgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfNGU4NjgzYmY3ODlkNDY2ZThjN2ZjZTEwZTE1N2M0YTguc2V0SWNvbihiZWF1dGlmeV9pY29uXzdiYjU4NDI4MDJjOTQxNTNiYzA3OTUwMTNlNzE1Zjk5KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzg5ZmM3YWViZjQ5ZDQ2YTQ5NjBhZDUxNjE0NzZhMTE5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk2NTY0OTA4ODIzMzYsIC04NC40MjYyMTMyNjU5NzY3OF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fMDhjMTMwN2I2ZDc1NGU1MzlhYWFiOGQwZGM1ZGEwNGEgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA1OCwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfODlmYzdhZWJmNDlkNDZhNDk2MGFkNTE2MTQ3NmExMTkuc2V0SWNvbihiZWF1dGlmeV9pY29uXzA4YzEzMDdiNmQ3NTRlNTM5YWFhYjhkMGRjNWRhMDRhKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzlkOGM4ZDVhN2Q3NzQ0NmZiZWZkZWNkZjQwMGQxNmI5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk4MTY1NzE1MDU5NDA1LCAtODQuNDI1NDQ4ODM2MDIxMjJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uX2FmMTU0MTdkOTUwMzQyMjc5N2Q2MWI3YTRjOWNlYjRjID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogNTksICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyXzlkOGM4ZDVhN2Q3NzQ0NmZiZWZkZWNkZjQwMGQxNmI5LnNldEljb24oYmVhdXRpZnlfaWNvbl9hZjE1NDE3ZDk1MDM0MjI3OTdkNjFiN2E0YzljZWI0Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl85MjY2ZGI0YzBlOGY0ZjFmOTI4MGE0MjljNzQ1ZjYxZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NzUxMjM5NDA0NDg1LCAtODQuNDMwNzI0MjMxODM4MTNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzQ3ZjIzNmVlMzgyMTQ1N2JhMjQyOGZmYjU4NTE1Nzg3ID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogNjAsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyXzkyNjZkYjRjMGU4ZjRmMWY5MjgwYTQyOWM3NDVmNjFkLnNldEljb24oYmVhdXRpZnlfaWNvbl80N2YyMzZlZTM4MjE0NTdiYTI0MjhmZmI1ODUxNTc4Nyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9lYTUyOWU0MjQyZDI0YzIwYWJjYjgzOTc1MTlmMDQ0OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NTkwOTM4MDMxMjAwNCwgLTg0LjQyODQ3MTMzODQ3NjI5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl85MWUzY2QzMjk1MGI0NjM1OGUyYmI1YmM3YzY5ZDIyMSA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDYxLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9lYTUyOWU0MjQyZDI0YzIwYWJjYjgzOTc1MTlmMDQ0OC5zZXRJY29uKGJlYXV0aWZ5X2ljb25fOTFlM2NkMzI5NTBiNDYzNThlMmJiNWJjN2M2OWQyMjEpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjcyNTdmNDM1MWJjNDUxNmJjODhjYzFmYzE0MjBiOTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTcyODUzNDE2MjcyLCAtODQuNDI5OTM0OTEwMjk3M10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fOWI4OWZkMTE5ZGRhNGJlNGI5YzczYmM4YmI2MzE3ZjMgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA2MiwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfZjcyNTdmNDM1MWJjNDUxNmJjODhjYzFmYzE0MjBiOTkuc2V0SWNvbihiZWF1dGlmeV9pY29uXzliODlmZDExOWRkYTRiZTRiOWM3M2JjOGJiNjMxN2YzKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2RkN2Q5OTc4NmUwNDQwNGFhNGMzMzgwOTMwY2RjNDI5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk0MDU4NzcxNjc4MDEsIC04NC40MjYyNzY3NjUzNDU0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl9mNTgxMzI5NTA1ZmQ0ZTliYmE5MWI2ZmU2ZTBmOGQwNCA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDYzLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9kZDdkOTk3ODZlMDQ0MDRhYTRjMzM4MDkzMGNkYzQyOS5zZXRJY29uKGJlYXV0aWZ5X2ljb25fZjU4MTMyOTUwNWZkNGU5YmJhOTFiNmZlNmUwZjhkMDQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWE3MGE0Mjg0YTRmNGU1MTgxYzIzMDFlNDhlZTgwOGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTYyODE3NTA5ODA2NCwgLTg0LjQyODMxODIzMDAzNTg0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl9jOTI2MWJlMDA3NTQ0OWZjYTg0MTM3ODZiY2NjZTM4OSA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDY0LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9lYTcwYTQyODRhNGY0ZTUxODFjMjMwMWU0OGVlODA4Yi5zZXRJY29uKGJlYXV0aWZ5X2ljb25fYzkyNjFiZTAwNzU0NDlmY2E4NDEzNzg2YmNjY2UzODkpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmFiNTlkNGE3NDJhNDJhYTk3YmI5ZWM5MDQ2ZjZjNzggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTU5NzAxOTE1OTg1OSwgLTg0LjQyNTc2MzY2NzA4NTE1XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl8xZWY3ZDIwNjU2MDE0YTE1YThjMzM0OWRiZjEyYzk2OCA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDY1LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9iYWI1OWQ0YTc0MmE0MmFhOTdiYjllYzkwNDZmNmM3OC5zZXRJY29uKGJlYXV0aWZ5X2ljb25fMWVmN2QyMDY1NjAxNGExNWE4YzMzNDlkYmYxMmM5NjgpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDUwM2NlY2I0OWYxNDkwYzlmZGVmOTkxODgxNjVhZjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTYxMDgxMjE0MzQ3NSwgLTg0LjQzMTcyMDgyMzYyOTg2XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl9lZjZkOGUwOGMzMjY0N2VkYTFlMjBkZjJkNGE4NTY4MSA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDY2LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9kNTAzY2VjYjQ5ZjE0OTBjOWZkZWY5OTE4ODE2NWFmNS5zZXRJY29uKGJlYXV0aWZ5X2ljb25fZWY2ZDhlMDhjMzI2NDdlZGExZTIwZGYyZDRhODU2ODEpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWI0YThjYjE0ZWVhNDgyY2E0OGVlNzhiYmViYTUyNGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTY5MzEyNDk2MzkzODUsIC04NC40MjU4NjMyOTEyNjU3MV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fNWRiNDEwZWRmMTUwNDA1NmE2OGVhOWI0YzA0M2MwNjUgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA2NywgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfNWI0YThjYjE0ZWVhNDgyY2E0OGVlNzhiYmViYTUyNGQuc2V0SWNvbihiZWF1dGlmeV9pY29uXzVkYjQxMGVkZjE1MDQwNTZhNjhlYTliNGMwNDNjMDY1KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2M3OWYzOGJlZmFiOTQwZWNiOGRiM2I0OWVlMTJkOGU5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk3MzcxNjA5NDk0MDM2LCAtODQuNDI3NjQzMDc0MjExMjVdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzQ1OWIxMzM4NjYxZTRiNjU5YzUyN2IwMTM1MmQzNzE3ID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogNjgsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyX2M3OWYzOGJlZmFiOTQwZWNiOGRiM2I0OWVlMTJkOGU5LnNldEljb24oYmVhdXRpZnlfaWNvbl80NTliMTMzODY2MWU0YjY1OWM1MjdiMDEzNTJkMzcxNyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNzY3NWJhMWUwOWU0OTg5YjFhN2JjMWNhOWQ4NTI1MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NTAwNTYyNzA5MjU3LCAtODQuNDI5OTcyMzgyNDE3NjNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uX2U3YTY1OGM5Zjk5MDRlNjI4YTdkMzg5M2M3ZTdjYjRjID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogNjksICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyX2Q3Njc1YmExZTA5ZTQ5ODliMWE3YmMxY2E5ZDg1MjUyLnNldEljb24oYmVhdXRpZnlfaWNvbl9lN2E2NThjOWY5OTA0ZTYyOGE3ZDM4OTNjN2U3Y2I0Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl84NmE5MmEwNGFmMjQ0NjdkOTAxODU2OGNkZmU0OGM4MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NDc5MjQxOTk4MDQ0LCAtODQuNDMwNDk2MDcwOTM5NzJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzRlYjQxMGVkNjRhZTQwZWQ5MmYyYzgxZTY4NDFjYTRmID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogNzAsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyXzg2YTkyYTA0YWYyNDQ2N2Q5MDE4NTY4Y2RmZTQ4YzgxLnNldEljb24oYmVhdXRpZnlfaWNvbl80ZWI0MTBlZDY0YWU0MGVkOTJmMmM4MWU2ODQxY2E0Zik7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl83YzYxODFlOTcxYzA0N2U5YTI0NjNmZWVlZDIyMDVjZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NzAyMDU0NDMzNDk4NCwgLTg0LjQyODc2MTExNTI2NzExXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl9iMzYxODg2NjE2OTA0NDdiYTdiZTVkZDAzZDAxYWQ3MSA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDcxLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl83YzYxODFlOTcxYzA0N2U5YTI0NjNmZWVlZDIyMDVjZS5zZXRJY29uKGJlYXV0aWZ5X2ljb25fYjM2MTg4NjYxNjkwNDQ3YmE3YmU1ZGQwM2QwMWFkNzEpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGRiZjFjMmM5YWJiNGJkZWJjMGVhNDdkZTkzYzBmNTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTYzOTIwNTQ2NDgzLCAtODQuNDMxNTgyODgyMjUwNTddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzI1MTI2ZTc5MDNjZjQzNWM5NjllNjBmOWYxYjJiYzE2ID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogNzIsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyXzhkYmYxYzJjOWFiYjRiZGViYzBlYTQ3ZGU5M2MwZjUxLnNldEljb24oYmVhdXRpZnlfaWNvbl8yNTEyNmU3OTAzY2Y0MzVjOTY5ZTYwZjlmMWIyYmMxNik7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9lZmJhMjU2ZDQ3YzQ0OWJjODQ3N2YzMzExOWJhZDZhYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NjYxMzcwMjYxMzUzLCAtODQuNDMxMTEzNzQ0MzgxNTVdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzY1ZjZjNzUzMTMyMzQzMjZiMTQ2MGIwZjBlMjcwZWI3ID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogNzMsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyX2VmYmEyNTZkNDdjNDQ5YmM4NDc3ZjMzMTE5YmFkNmFhLnNldEljb24oYmVhdXRpZnlfaWNvbl82NWY2Yzc1MzEzMjM0MzI2YjE0NjBiMGYwZTI3MGViNyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl83ZTk3NGJiYWJjMzA0YWZkYTg5NTViZDY4ZDMyMzQ2MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NjAzNjM3MzAwMzk3LCAtODQuNDMwMjM0NDgwNjA0MTddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzgxYTY2MmQ4YTc5MDRlZmE5MDc0ZjlmMzIyNDY5N2ViID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogNzQsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyXzdlOTc0YmJhYmMzMDRhZmRhODk1NWJkNjhkMzIzNDYyLnNldEljb24oYmVhdXRpZnlfaWNvbl84MWE2NjJkOGE3OTA0ZWZhOTA3NGY5ZjMyMjQ2OTdlYik7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl83YjYyYjNmMjBhMTY0MWYzYjgzNjdiMTg0NzE0ZTYwMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NTMzODU3NTY0NTEzLCAtODQuNDI2NjU1ODE4OTcwMjNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uX2NjMTdmZGRjNGJjMzQwNTRhNTQ1N2U5ZjhhZDY4MTA0ID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogNzUsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyXzdiNjJiM2YyMGExNjQxZjNiODM2N2IxODQ3MTRlNjAwLnNldEljb24oYmVhdXRpZnlfaWNvbl9jYzE3ZmRkYzRiYzM0MDU0YTU0NTdlOWY4YWQ2ODEwNCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9iN2RhMDg4MjE3YjI0NDFlYWRmMjRiNmYzNWUxN2JhZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5MzgxODkzOTgxNzgxLCAtODQuNDI3NzQ0MDUwNDIxNjJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzMzZjA0ZDFjZDcxMDQzMTFiNWZiZGUyYWYwZjgyM2M5ID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogNzYsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyX2I3ZGEwODgyMTdiMjQ0MWVhZGYyNGI2ZjM1ZTE3YmFmLnNldEljb24oYmVhdXRpZnlfaWNvbl8zM2YwNGQxY2Q3MTA0MzExYjVmYmRlMmFmMGY4MjNjOSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8xZDg2MWU0ZjQ0YjU0MGFiOGQ5ZjQyZmI2YjU5NDY2MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NDkwMjcwMjIwNDgxNiwgLTg0LjQyOTIwMDA5OTE0MjI5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl8xMzZiNDkzMTg2Mzc0ZTY1YTI1NTkxYzU3ZjczMDFjNyA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDc3LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl8xZDg2MWU0ZjQ0YjU0MGFiOGQ5ZjQyZmI2YjU5NDY2MC5zZXRJY29uKGJlYXV0aWZ5X2ljb25fMTM2YjQ5MzE4NjM3NGU2NWEyNTU5MWM1N2Y3MzAxYzcpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWZmOWI1NWUyZDFiNGQ5ZGJiZjkwNjU1NzU3OTkxM2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTQyOTIxODYwODk5MDUsIC04NC40MjU2Njg5ODMzMjUwMV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fMWRiOWJkNTJkZjA0NDUwNDk4Mzc3ZGQ5YWNjMTUyNGYgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA3OCwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfNWZmOWI1NWUyZDFiNGQ5ZGJiZjkwNjU1NzU3OTkxM2Uuc2V0SWNvbihiZWF1dGlmeV9pY29uXzFkYjliZDUyZGYwNDQ1MDQ5ODM3N2RkOWFjYzE1MjRmKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2QwYzUzMjViMDBmYTQ3YTliMDQwODEyN2E0OTdiNjBlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk2NDY3MTI3NDk3NjcsIC04NC40Mjg0NzgyNzc4ODI4M10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fMTM1ODNlNTFkY2Q1NDQ2MTgyMmQwMjVhY2ZmYzRhNjcgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA3OSwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfZDBjNTMyNWIwMGZhNDdhOWIwNDA4MTI3YTQ5N2I2MGUuc2V0SWNvbihiZWF1dGlmeV9pY29uXzEzNTgzZTUxZGNkNTQ0NjE4MjJkMDI1YWNmZmM0YTY3KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2ExNjdjMzAxNDRiOTRmM2U4ODI4MTliYThmN2FkNGNhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk3MDgwMzMyMDYxODk2LCAtODQuNDMwMDk2OTc4MjU0NDddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzdmY2ZkYjc5N2ZlNTRhMDhiMTkxNzljNWNmMjJjZWQyID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogODAsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyX2ExNjdjMzAxNDRiOTRmM2U4ODI4MTliYThmN2FkNGNhLnNldEljb24oYmVhdXRpZnlfaWNvbl83ZmNmZGI3OTdmZTU0YTA4YjE5MTc5YzVjZjIyY2VkMik7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8yMGUwZjBmYmFjZmE0NzVkYTY3Y2ZlMGU0MTBkMTc4YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NjM4NDE0MTc2OTE3NCwgLTg0LjQyNzgzODI5Nzc4MDQ4XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl9lNDAwMjdlOTVlODE0ODliYTQxZWQwMDFjNWY5MTM4YiA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDgxLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl8yMGUwZjBmYmFjZmE0NzVkYTY3Y2ZlMGU0MTBkMTc4Yi5zZXRJY29uKGJlYXV0aWZ5X2ljb25fZTQwMDI3ZTk1ZTgxNDg5YmE0MWVkMDAxYzVmOTEzOGIpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmIxNDQ2MDY1OWIwNDUzMWE3OTExMWRiY2ZjYmZhY2EgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTcxOTQzNzQ0MTQwMDUsIC04NC40MjY2NTAzNjcyMjE4OF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fOTMwMWQ0NjQ5ZmQ2NGQ3NDk3MzhmODRmMjU3OTYwMWUgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA4MiwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfZmIxNDQ2MDY1OWIwNDUzMWE3OTExMWRiY2ZjYmZhY2Euc2V0SWNvbihiZWF1dGlmeV9pY29uXzkzMDFkNDY0OWZkNjRkNzQ5NzM4Zjg0ZjI1Nzk2MDFlKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2U5NGU2ZjAxNDJkZTQ3YzliM2UzODQ3NjhmMjljNDA2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk0MTg0NDQxOTA2Njk0LCAtODQuNDI3MTUyODUxNDU3M10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fNmRlYzY4Yzg3ODUwNGE3NmJlMDM4ODAxNmEzZDVjOGYgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA4MywgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfZTk0ZTZmMDE0MmRlNDdjOWIzZTM4NDc2OGYyOWM0MDYuc2V0SWNvbihiZWF1dGlmeV9pY29uXzZkZWM2OGM4Nzg1MDRhNzZiZTAzODgwMTZhM2Q1YzhmKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzljOTNlNTRiNGY3ZDQ1ZWJiYmViNTYwYjRlNTc0NmQ4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk1MzA0NTM0Njk3NDQsIC04NC40MzEwMDgzMzcyMDIwNF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fMDM5MWFkOGU4ZWRhNGVmNGEyYTU3NWMxODhhYWM0YTggPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA4NCwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfOWM5M2U1NGI0ZjdkNDVlYmJiZWI1NjBiNGU1NzQ2ZDguc2V0SWNvbihiZWF1dGlmeV9pY29uXzAzOTFhZDhlOGVkYTRlZjRhMmE1NzVjMTg4YWFjNGE4KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzk2YWEwNjlkODZhNTQxMTY4YmY0Njg3OTE3M2IzZTlkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk3NjE1NTEwMDY2ODEsIC04NC40Mjg4MjM0MzIxMDgyOV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fOGNhZWQ0NzRhNDRiNGRmZjlkNGZjMjc2OTViMzMzZjAgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA4NSwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfOTZhYTA2OWQ4NmE1NDExNjhiZjQ2ODc5MTczYjNlOWQuc2V0SWNvbihiZWF1dGlmeV9pY29uXzhjYWVkNDc0YTQ0YjRkZmY5ZDRmYzI3Njk1YjMzM2YwKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzhkMTM4Nzk5N2FiMDRmZjJiNjU2YjVhYjhkZjYxZmUxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk0NDQ4Mjg5MjkxMTYsIC04NC40MjY2MTYwOTI5MjA5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl8xYjk4ZjEyNGZjYzQ0NjVhOWRmZjcxNGIxODFlMWU0YyA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDg2LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl84ZDEzODc5OTdhYjA0ZmYyYjY1NmI1YWI4ZGY2MWZlMS5zZXRJY29uKGJlYXV0aWZ5X2ljb25fMWI5OGYxMjRmY2M0NDY1YTlkZmY3MTRiMTgxZTFlNGMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjNkZjVkY2U0N2QwNDk2YjgyNjI3N2U1NWZhYmQ1MjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTk1OTgwNjE5ODY4MSwgLTg0LjQyODI2MzI4NjY5MzNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uX2RjMmE5YTIwZTI2NjQxYmNiMjI4NGU5NWQ5ODVhMmY4ID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogODcsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyX2IzZGY1ZGNlNDdkMDQ5NmI4MjYyNzdlNTVmYWJkNTI4LnNldEljb24oYmVhdXRpZnlfaWNvbl9kYzJhOWEyMGUyNjY0MWJjYjIyODRlOTVkOTg1YTJmOCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8yYmI4ZTdmNTVlMmE0M2UwYTZkMWIyYTBiMjBlMDJlMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5MzY5MDgyMjcyMjQ2LCAtODQuNDI1Mzg2MDE5NzAyNzNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzFkNjY3NWM2ODFlZjQzODJhMDI5NTQxYzg0YjEzZTQxID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogODgsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyXzJiYjhlN2Y1NWUyYTQzZTBhNmQxYjJhMGIyMGUwMmUxLnNldEljb24oYmVhdXRpZnlfaWNvbl8xZDY2NzVjNjgxZWY0MzgyYTAyOTU0MWM4NGIxM2U0MSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl80M2UxZWNkZWYzMGI0ODUzOGJjMmMwNGVhZWQzZDMwMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NzU3ODk2NzE4MDk5LCAtODQuNDMwODA3NTk5NTc0MzFdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uXzE1MzQzN2JjYTRlNzQzMjM5MDAxMDBlOTdlYmJiNzMzID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogODksICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyXzQzZTFlY2RlZjMwYjQ4NTM4YmMyYzA0ZWFlZDNkMzAzLnNldEljb24oYmVhdXRpZnlfaWNvbl8xNTM0MzdiY2E0ZTc0MzIzOTAwMTAwZTk3ZWJiYjczMyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl80YzQyODE5ZTU2YjI0OTRhOGFlY2M0YzBhZWYzYTIwYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NDU0Mzg3ODk5Nzc4LCAtODQuNDMwMDc3MDA5MzQ2ODNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uX2Q3ZWNiZjdkYTExNTQzNDJiYjJmOGFjYWQyZDhkYzEwID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogOTAsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyXzRjNDI4MTllNTZiMjQ5NGE4YWVjYzRjMGFlZjNhMjBjLnNldEljb24oYmVhdXRpZnlfaWNvbl9kN2VjYmY3ZGExMTU0MzQyYmIyZjhhY2FkMmQ4ZGMxMCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9lMzUwMWViNjQ3YWE0NmYwYmRjNzk0MGUwOGY2MDIxOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NDYyOTA4MTQ3MzI3LCAtODQuNDI4NTEyNTY3NzA1NTRdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBiZWF1dGlmeV9pY29uX2MxYzA5NjAzMWVhZTQ1ZDRiNjI1Yzg4YmVjNjFhYTRhID0gbmV3IEwuQmVhdXRpZnlJY29uLmljb24oCiAgICAgICAgICAgICAgICB7ImJhY2tncm91bmRDb2xvciI6ICIjRkZGIiwgImJvcmRlckNvbG9yIjogIiMwMEFCREMiLCAiYm9yZGVyV2lkdGgiOiAzLCAiaWNvblNoYXBlIjogIm1hcmtlciIsICJpbm5lckljb25TdHlsZSI6ICJtYXJnaW4tdG9wOjA7IiwgImlzQWxwaGFOdW1lcmljSWNvbiI6IHRydWUsICJzcGluIjogZmFsc2UsICJ0ZXh0IjogOTEsICJ0ZXh0Q29sb3IiOiAiIzAwMDAwMCJ9CiAgICAgICAgICAgICkKICAgICAgICAgICAgbWFya2VyX2UzNTAxZWI2NDdhYTQ2ZjBiZGM3OTQwZTA4ZjYwMjE4LnNldEljb24oYmVhdXRpZnlfaWNvbl9jMWMwOTYwMzFlYWU0NWQ0YjYyNWM4OGJlYzYxYWE0YSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYzVkODM1MzAwMWQ0ZGM2ODcyZjBmMmU1MTZhZDI2ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5ODI5OTYyNzAwODg2NiwgLTg0LjQyODM1ODI2NjkwNDM3XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl84NjUzMzc2MjZmNDg0MjhhYjg4ODlkMDRhOGIyZjgxZiA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDkyLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9kYzVkODM1MzAwMWQ0ZGM2ODcyZjBmMmU1MTZhZDI2Zi5zZXRJY29uKGJlYXV0aWZ5X2ljb25fODY1MzM3NjI2ZjQ4NDI4YWI4ODg5ZDA0YThiMmY4MWYpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2ExMTYwZjY5Nzc4NDcwYmFhMDZiZGVjNDFlMDQwYmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTcxNzQ2MTkyNDUzMiwgLTg0LjQzMTA5MjcwNDc5OTQ0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl83MmQzYTJmYjNjMGQ0NjJlODk2YzBhYjg0ZTdhMDJkMCA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDkzLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl8zYTExNjBmNjk3Nzg0NzBiYWEwNmJkZWM0MWUwNDBiYi5zZXRJY29uKGJlYXV0aWZ5X2ljb25fNzJkM2EyZmIzYzBkNDYyZTg5NmMwYWI4NGU3YTAyZDApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzZiOWM4MWU1YmE2NGEzZDhjMDU4YWJmMjFkZWNmZmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTcwNTA4NDcxOTk0OCwgLTg0LjQyNjUyODEyMDE5MjkxXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl8zYjcyMDE5ODkyMGM0YzFjOTMwOGUzNTg3ZTUyNWFkZiA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDk0LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9jNmI5YzgxZTViYTY0YTNkOGMwNThhYmYyMWRlY2ZmYy5zZXRJY29uKGJlYXV0aWZ5X2ljb25fM2I3MjAxOTg5MjBjNGMxYzkzMDhlMzU4N2U1MjVhZGYpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzRlZWFjMjUyYzU3NDNhNzk4MzZlMjM2NGFhZWY3NTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTY5NDMyMjcwMTI4NywgLTg0LjQyNjE3MzU3MDEzNzU5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzBiZGYwYWE0MGRiNzRmMGQ5M2U4MmVmYjEwMDk0YWJkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgYmVhdXRpZnlfaWNvbl81MGQzNzIwZDhlZTY0YzllYTM5Y2FmMGU3ZjBjYTQ3OCA9IG5ldyBMLkJlYXV0aWZ5SWNvbi5pY29uKAogICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kQ29sb3IiOiAiI0ZGRiIsICJib3JkZXJDb2xvciI6ICIjMDBBQkRDIiwgImJvcmRlcldpZHRoIjogMywgImljb25TaGFwZSI6ICJtYXJrZXIiLCAiaW5uZXJJY29uU3R5bGUiOiAibWFyZ2luLXRvcDowOyIsICJpc0FscGhhTnVtZXJpY0ljb24iOiB0cnVlLCAic3BpbiI6IGZhbHNlLCAidGV4dCI6IDk1LCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl8zNGVlYWMyNTJjNTc0M2E3OTgzNmUyMzY0YWFlZjc1Mi5zZXRJY29uKGJlYXV0aWZ5X2ljb25fNTBkMzcyMGQ4ZWU2NGM5ZWEzOWNhZjBlN2YwY2E0NzgpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2NkOWFiY2M1ZWM0NGVhMmFmNDNiNTA5NGVmMDkyNzUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTQ1MTEzMzY2OTcxODQsIC04NC40MzIzMjI1NDI2ODQ4N10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fNTcyMDM3YTRiMDcyNDllYTk5YzIwNDE1YTdmMDliY2MgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA5NiwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfN2NkOWFiY2M1ZWM0NGVhMmFmNDNiNTA5NGVmMDkyNzUuc2V0SWNvbihiZWF1dGlmeV9pY29uXzU3MjAzN2E0YjA3MjQ5ZWE5OWMyMDQxNWE3ZjA5YmNjKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzY3ZWE3YzJhMThmOTRlNzE5Y2RmOTViNGNjNmNkZDk1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk4Mzg5NDEwMDgzMDMsIC04NC40MjU5ODMzNjQ4Mjc5OV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fMWM1MThjYzA1NTRiNDQ5YjkxM2Q4NTljMWJjMTQyYTQgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA5NywgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfNjdlYTdjMmExOGY5NGU3MTljZGY5NWI0Y2M2Y2RkOTUuc2V0SWNvbihiZWF1dGlmeV9pY29uXzFjNTE4Y2MwNTU0YjQ0OWI5MTNkODU5YzFiYzE0MmE0KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2U5OWZlZDY0YTdlZjQyNzBiZjQwNGYwNjJlNTkxM2UyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk4OTM0ODQzNDk1OTUsIC04NC40MzA5MDUyNjc3MTAwN10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fZDBkZTFjODZlZjY5NDBmNDgzOWNkYTkzOTBmOTc0YTUgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA5OCwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfZTk5ZmVkNjRhN2VmNDI3MGJmNDA0ZjA2MmU1OTEzZTIuc2V0SWNvbihiZWF1dGlmeV9pY29uX2QwZGUxYzg2ZWY2OTQwZjQ4MzljZGE5MzkwZjk3NGE1KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2M1Mzg3NjU2NTE5MTRmNmE4OTJlMTI1NTA1YmYyMzVjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk4MDIwODQyNTk5MTUsIC04NC40MjYxNTg4MjM5MTE5NV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fOTk3MDM5ZmMyYjIxNDMwMWI0ZDhkNDI3ZDc2MGE5ZjQgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzAwQUJEQyIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiA5OSwgInRleHRDb2xvciI6ICIjMDAwMDAwIn0KICAgICAgICAgICAgKQogICAgICAgICAgICBtYXJrZXJfYzUzODc2NTY1MTkxNGY2YTg5MmUxMjU1MDViZjIzNWMuc2V0SWNvbihiZWF1dGlmeV9pY29uXzk5NzAzOWZjMmIyMTQzMDFiNGQ4ZDQyN2Q3NjBhOWY0KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2U0MTA5ODRjMjZmNDQ5MGZhYmU4YjY2YTRiZTQzNWFjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzk2ODY0NTM4OTgzMTcsIC04NC40MzM3ODY1MDIyNjMzNl0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wYmRmMGFhNDBkYjc0ZjBkOTNlODJlZmIxMDA5NGFiZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGJlYXV0aWZ5X2ljb25fYTNmZGU4MjY1N2NlNDkxNDlkMmE3ZjRhYjg0MTgwNzMgPSBuZXcgTC5CZWF1dGlmeUljb24uaWNvbigKICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZENvbG9yIjogIiNGRkYiLCAiYm9yZGVyQ29sb3IiOiAiIzhCMDAwMCIsICJib3JkZXJXaWR0aCI6IDMsICJpY29uU2hhcGUiOiAibWFya2VyIiwgImlubmVySWNvblN0eWxlIjogIm1hcmdpbi10b3A6MDsiLCAiaXNBbHBoYU51bWVyaWNJY29uIjogdHJ1ZSwgInNwaW4iOiBmYWxzZSwgInRleHQiOiAwLCAidGV4dENvbG9yIjogIiMwMDAwMDAifQogICAgICAgICAgICApCiAgICAgICAgICAgIG1hcmtlcl9lNDEwOTg0YzI2ZjQ0OTBmYWJlOGI2NmE0YmU0MzVhYy5zZXRJY29uKGJlYXV0aWZ5X2ljb25fYTNmZGU4MjY1N2NlNDkxNDlkMmE3ZjRhYjg0MTgwNzMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfN2FmYjQzZTJlYjRjNDViYTgzZTUzZmIwNTI1MTdjZTMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFszMy43OTY4NjQ1Mzg5ODMxNywgLTg0LjQzMzc4NjUwMjI2MzM2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMzM4OGZmIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiAxMDAsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMGJkZjBhYTQwZGI3NGYwZDkzZTgyZWZiMTAwOTRhYmQpOwogICAgICAgIAo8L3NjcmlwdD4= onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "all_uav_LLAHTR.shape",
"execution_count": 8,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 8,
"data": {
"text/plain": "(30512, 6)"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## UAV height stats across all cities "
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# altitude is col idx 2, LLA means lat long alt, HTR means heading, tilt, rotation\nmin(all_uav_LLAHTR[:,2]), max(all_uav_LLAHTR[:,2])",
"execution_count": 9,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 9,
"data": {
"text/plain": "(114.61164336709346, 485.6506188200575)"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "np.mean(all_uav_LLAHTR[:,2]), np.std(all_uav_LLAHTR[:,2])",
"execution_count": 10,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 10,
"data": {
"text/plain": "(322.7004069881579, 76.14500281586045)"
},
"metadata": {}
}
]
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
},
"language_info": {
"name": "python",
"version": "3.6.9",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"gist": {
"id": "b3682ab7bf149f2e045519d8be755a24",
"data": {
"description": "using folium to display markers and circle of radius 100m on a map",
"public": true
}
},
"_draft": {
"nbviewer_url": "https://gist.github.com/b3682ab7bf149f2e045519d8be755a24"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment