Skip to content

Instantly share code, notes, and snippets.

@baldwint
Last active February 8, 2019 08:02
Show Gist options
  • Save baldwint/78f6d1687268d5381a6538490f26bf24 to your computer and use it in GitHub Desktop.
Save baldwint/78f6d1687268d5381a6538490f26bf24 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Convergence problem with truncated poisson in brms"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Initializing packrat project in directory:\n",
"- \"~/brmsdev\"\n",
"Initialization complete!\n"
]
}
],
"source": [
"packrat::init(\"~/brmsdev\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Loading required package: Rcpp\n",
"Loading required package: ggplot2\n",
"Loading 'brms' package (version 2.7.2). Useful instructions\n",
"can be found by typing help('brms'). A more detailed introduction\n",
"to the package is available through vignette('brms_overview').\n",
"Run theme_set(theme_default()) to use the default bayesplot theme.\n"
]
}
],
"source": [
"library('brms')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"4"
],
"text/latex": [
"4"
],
"text/markdown": [
"4"
],
"text/plain": [
"[1] 4"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"options(mc.cores = parallel::detectCores())\n",
"options()$mc.cores"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"options(repr.plot.width=5, repr.plot.height=3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## generate poisson data with zeros removed"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAFoCAYAAACL9IXsAAAEDWlDQ1BJQ0MgUHJvZmlsZQAA\nOI2NVV1oHFUUPrtzZyMkzlNsNIV0qD8NJQ2TVjShtLp/3d02bpZJNtoi6GT27s6Yyc44M7v9\noU9FUHwx6psUxL+3gCAo9Q/bPrQvlQol2tQgKD60+INQ6Ium65k7M5lpurHeZe58853vnnvu\nuWfvBei5qliWkRQBFpquLRcy4nOHj4g9K5CEh6AXBqFXUR0rXalMAjZPC3e1W99Dwntf2dXd\n/p+tt0YdFSBxH2Kz5qgLiI8B8KdVy3YBevqRHz/qWh72Yui3MUDEL3q44WPXw3M+fo1pZuQs\n4tOIBVVTaoiXEI/MxfhGDPsxsNZfoE1q66ro5aJim3XdoLFw72H+n23BaIXzbcOnz5mfPoTv\nYVz7KzUl5+FRxEuqkp9G/Ajia219thzg25abkRE/BpDc3pqvphHvRFys2weqvp+krbWKIX7n\nhDbzLOItiM8358pTwdirqpPFnMF2xLc1WvLyOwTAibpbmvHHcvttU57y5+XqNZrLe3lE/Pq8\neUj2fXKfOe3pfOjzhJYtB/yll5SDFcSDiH+hRkH25+L+sdxKEAMZahrlSX8ukqMOWy/jXW2m\n6M9LDBc31B9LFuv6gVKg/0Szi3KAr1kGq1GMjU/aLbnq6/lRxc4XfJ98hTargX++DbMJBSiY\nMIe9Ck1YAxFkKEAG3xbYaKmDDgYyFK0UGYpfoWYXG+fAPPI6tJnNwb7ClP7IyF+D+bjOtCpk\nhz6CFrIa/I6sFtNl8auFXGMTP34sNwI/JhkgEtmDz14ySfaRcTIBInmKPE32kxyyE2Tv+thK\nbEVePDfW/byMM1Kmm0XdObS7oGD/MypMXFPXrCwOtoYjyyn7BV29/MZfsVzpLDdRtuIZnbpX\nzvlf+ev8MvYr/Gqk4H/kV/G3csdazLuyTMPsbFhzd1UabQbjFvDRmcWJxR3zcfHkVw9GfpbJ\nmeev9F08WW8uDkaslwX6avlWGU6NRKz0g/SHtCy9J30o/ca9zX3Kfc19zn3BXQKRO8ud477h\nLnAfc1/G9mrzGlrfexZ5GLdn6ZZrrEohI2wVHhZywjbhUWEy8icMCGNCUdiBlq3r+xafL549\nHQ5jH+an+1y+LlYBifuxAvRN/lVVVOlwlCkdVm9NOL5BE4wkQ2SMlDZU97hX86EilU/lUmkQ\nUztTE6mx1EEPh7OmdqBtAvv8HdWpbrJS6tJj3n0CWdM6busNzRV3S9KTYhqvNiqWmuroiKgY\nhshMjmhTh9ptWhsF7970j/SbMrsPE1suR5z7DMC+P/Hs+y7ijrQAlhyAgccjbhjPygfeBTjz\nhNqy28EdkUh8C+DU9+z2v/oyeH791OncxHOs5y2AtTc7nb/f73TWPkD/qwBnjX8BoJ98VVBg\n/m8AADMtSURBVHgB7d0JcBb1/cfxb+47HImAnIItR4sCHZFDC6KiFVRsCxSVQ1CRkToq08og\niLRVnHrgyHhULVKhtaIw1lGDAh1bBWmxlUNBjKgcRa5wmAiBkOPPd/0/V/aBzSabJ3u8dyZk\n97e/Z5/9vX4b8snu79lNqjk1CRMCCCCAAAIIIICAYwLJjm2JDSGAAAIIIIAAAggYAgQsDgQE\nEEAAAQQQQMBhAQKWw6BsDgEEEEAAAQQQIGBxDCCAAAIIIIAAAg4LELAcBmVzCCCAAAIIIIAA\nAYtjAAEEEEAAAQQQcFiAgOUwKJtDAAEEEEAAAQQIWBwDCCCAAAIIIICAwwKpDm/Pc5vbv3+/\n5/a5Ljucm5srqampcuTIkbpUD0yd/Px8KS0tDUx769LQZs2aid5vGJdYrby8PCkrK4stDPBS\nUlKS6LFy8uRJOXr0aIAlYpuekpIimZmZmESxqIn+/Jw4cULKy8uj1vhjVttXUFBg2ZjAB6yq\nqipLJC9W0HCVlpYmfm1fffsEE7OcmlRXV3OsRNFomNCfIX5+Iihqkp6ezrESITHmkpOTRX/h\ncqxEYNREjxUN40F24RJh5JhgDgEEEEAAAQQQcESAgOUIIxtBAAEEEEAAAQQiAgSsiAVzCCCA\nAAIIIICAIwIELEcY2QgCCCCAAAIIIBARIGBFLJhDAAEEEEAAAQQcESBgOcLIRhBAAAEEEEAA\ngYgAAStiwRwCCCCAAAIIIOCIAAHLEUY2ggACCCCAAAIIRAQIWBEL5hBAAAEEEEAAAUcECFiO\nMLIRBBBAAAEEEEAgIkDAilgwhwACCCCAAAIIOCJAwHKEkY0ggAACCCCAAAIRgcA/7DlCwVyi\nBCZOnJiot3Ld+yxcuNB1+8QOIYAAAgg4L8AZLOdN2SICCCCAAAIIBFyAgBXwA4DmI4AAAggg\ngIDzAgQs503ZIgIIIIAAAggEXICAFfADgOYjgAACCCCAgPMCrhrk/t5770leXp706dMnpqVV\nVVWyYcMG2bJli3Tv3l369u1ra31MZRYQQAABBBBAAIFGFnDNGSwNULNnzzZCVHSbNVxNmTJF\n7r//ftm9e7f89re/lXnz5oWrWK0PV2QGAQQQQAABBBBIkECTn8GqrKyUxYsXG19JSUmmZr/y\nyivy7bffypIlSyQnJ0d27Ngh48aNk+HDh0u3bt3Ear1pgxQggAACCCCAAAKNLNDkZ7CKiork\nrbfekrlz50qHDh1MzV29erUMHTrUCFe6slOnTtKzZ09ZuXKlUddqvWmDFCCAAAIIIIAAAo0s\n0ORnsC666CIZNmyYpKamytNPP21q7p49e6Rt27Yx5bq8f/9+o8xqffQL9TJjKJhpecuWLeX1\n11+PruKb+eTk77Jzq1atfNMmPzTEjf2hZ45TUlLEjfvWlH2uP0OYmHsgIyMDlygW/fnRL46V\nKJT/n83KypLMzEzzCo+X6JW3ukxNHrAKCgpOu5/aiJKSEsnPz4+po8vFxcVitT7mRacW0tLS\nRDs8NGnH19TUhBZ9+d3v7fNap7m5P9y8b03Vz5iY5dUEl/gu5lJK/His1LVNTR6wznT46V/V\n+ldk7bSoyzoey2p97W3PmjVL9Ct60jNgfpw0uGqgPHDggB+b59k2ubE/WrduLdXV1RwrUUeV\nnpHQnyH9A4/pOwE1adOmjVRUVMjhw4dh+X8B/X82NzcXk6gjQk0KCwulvLxcSktLo9b4Y1az\nR13OzDX5GKwzcesPtF7GKysri6mmHaY/6FbrY17EAgIIIIAAAgggkCABVwcsNejSpYts3rw5\nhkPvh9WuXTujzGp9zAtZQAABBBBAAAEEEiDg+oA1cuRIWbVqlXF/LL3uuWzZMuMUtQ6M18lq\nfQIMeQsEEEAAAQQQQCBGwNVjsHRP+/fvL2PGjJGpU6caY4r0zJWOo9Jr3nVZb1TiHwQQQAAB\nBBBAIIECrgpYixYtitv0SZMmydixY43BcjpwrvZktb52fZYRQAABBBBAAIHGFHD9JcJQ49PT\n041PJYSWa3+3Wl+7PssIIIAAAggggEBjCXgmYDUWANtFAAEEEEAAAQScFiBgOS3K9hBAAAEE\nEEAg8AIErMAfAgAggAACCCCAgNMCBCynRdkeAggggAACCARegIAV+EMAAAQQQAABBBBwWoCA\n5bQo20MAAQQQQACBwAsQsAJ/CACAAAIIIIAAAk4LELCcFmV7CCCAAAIIIBB4AQJW4A8BABBA\nAAEEEEDAaQECltOibA8BBBBAAAEEAi9AwAr8IQAAAggggAACCDgtQMByWpTtIYAAAggggEDg\nBQhYgT8EAEAAAQQQQAABpwUIWE6Lsj0EEEAAAQQQCLwAASvwhwAACCCAAAIIIOC0AAHLaVG2\nhwACCCCAAAKBFyBgBf4QAAABBBBAAAEEnBYgYDktyvYQQAABBBBAIPACBKzAHwIAIIAAAggg\ngIDTAgQsp0XZHgIIIIAAAggEXoCAFfhDAAAEEEAAAQQQcFqAgOW0KNtDAAEEEEAAgcALELAC\nfwgAgAACCCCAAAJOC6Q6vUGvbS8pKclru2xrf/3ePlsYLqjs5v5w874luuvUIvSV6Pd26/tF\nHx/R827d30TvFyYR8WiL6PlIDW/P1bVNgQ9YBQUF3u7p0+x9SkqKscav7TtNs11f7Mb+0P8s\n9Hhx4741ZYdiEl8/PT2dYyWKRn9+kpOTMalloouZmZmix4vfpsrKyjo1KfABq6SkpE5QXquk\nvyzT0tLEr+3zWn+E9teN/dG6dWuprq7mWAl10qnv+ktTf4bc2F9Ru5nQWTVp06aNVFRUyOHD\nhxP63m5+M/1/Njc3F5OoTlKTwsJCOX78uJSWlkat8ces/vGVlZVl2RjGYFkSUQEBBBBAAAEE\nELAnQMCy50VtBBBAAAEEEEDAUoCAZUlEBQQQQAABBBBAwJ4AAcueF7URQAABBBBAAAFLAQKW\nJREVEEAAAQQQQAABewIELHte1EYAAQQQQAABBCwFCFiWRFRAAAEEEEAAAQTsCRCw7HlRGwEE\nEEAAAQQQsBQgYFkSUQEBBBBAAAEEELAnQMCy50VtBBBAAAEEEEDAUoCAZUlEBQQQQAABBBBA\nwJ4AAcueF7URQAABBBBAAAFLAQKWJREVEEAAAQQQQAABewIELHte1EYAAQQQQAABBCwFCFiW\nRFRAAAEEEEAAAQTsCRCw7HlRGwEEEEAAAQQQsBQgYFkSUQEBBBBAAAEEELAnQMCy50VtBBBA\nAAEEEEDAUoCAZUlEBQQQQAABBBBAwJ4AAcueF7URQAABBBBAAAFLAQKWJREVEEAAAQQQQAAB\newIELHte1EYAAQQQQAABBCwFCFiWRFRAAAEEEEAAAQTsCRCw7HlRGwEEEEAAAQQQsBQgYFkS\nUQEBBBBAAAEEELAnQMCy50VtBBBAAAEEEEDAUiDVskYTV1i5cqVUV1eb9iI3N1cuuugio3zN\nmjVy9OjRmDo9evSQDh06xJSxgAACCCCAAAIIJELA9QFr4cKFUlFREWNRUlIi3bp1MwJWVVWV\nzJ49W/Ly8iQ1NdKcyZMnE7Bi1FhAAAEEEEAAgUQJRBJJot7R5vu89NJLMa/46KOPZNq0aTJ1\n6lSjfNeuXUYAW7BggRQUFMTUZQEBBBBAAAEEEGgKAdcHrGiUY8eOyUMPPSQ33HCDnH/++caq\nzz//XAoLC+sUrr755hs5fvx4eJPJycmiX36ckpKSjGb5tX1e7TM394eb9y3R/c3Pj1k8ZKLf\nOVYiPiGL0PfImuDOhY4VFfCjS3T7ztTLngpYf/jDHyQjI0MmTZoUbtO2bduMy4Pz5s0THYvV\nokULGT9+vAwaNChcJzQzZ84cKSoqCi1Ky5YtZe3ateFlP860bt3aj83ybJvc2h/6n6Bb960p\nOxsTs77+H4yL2SUzM9NcGPCSnJwc0S+/TbWHLZ2ufZ4JWGVlZfLWW2/JHXfcETPWqri4WA4d\nOiRdu3aVgQMHyvLly2XmzJny8MMPy4ABA2La3bt3b9ExW6FJx22Vl5eHFn31Xf8T1JQdfcbO\nVw30aGPOdLz99Kc/9WirGrbbr732WsM20Aiv1p+d9PR0OXHiRCNs3bubzMrKMv4PresvGO+2\ntO57rn+c6PhfTCJm+vOjgbOyslJOnjwZWeGTOf3gnf7/YDV5JmCtWLHCOIivuOKKmDbpWSlt\nrJ650ql///6iZ7WWLFliClgTJkwQ/Yqe9uzZE73om3kdj5aWliZHjhzxTZv80BD6w9yLbjTR\nXxD6M+TGfTMLJqZETTRg6S9MXCLm+v+sfqodk1gTDVj6B0ppaWlkhU/mUlJS6nRmzjMDkN54\n4w256qqrJDs7O6aLmjVrFg5XoRV65sqvwSnURr4jgAACCCCAgHsFPBGwDh48KF988YUMHjzY\nJDl9+nRZunRpTPnGjRulbdu2MWUsIIAAAggggAACiRLwRMDavn274dG5c2eTS58+fWTx4sWi\nnybU05HLli2TrVu3yujRo011KUAAAQQQQAABBBIh4IkxWBqwdIxV8+bNTSYjRoyQTZs2GZ8s\n1EFnOrhbB7nXHuBueiEFCCCAAAIIIIBAIwl4ImD9/Oc/F/2KN+mgy7lz5xqPytFPGurHh3Uw\nJhMCCCCAAAIIINBUAp4IWHXB8ev9NurSduoggAACCCCAgLsEfBOw3MUa2ZuJEydGFgI0p8+Q\nZEIAAQQQQCCoAp4Y5B7UzqHdCCCAAAIIIOBNAQKWN/uNvUYAAQQQQAABFwsQsFzcOewaAggg\ngAACCHhTgIDlzX5jrxFAAAEEEEDAxQIELBd3DruGAAIIIIAAAt4UIGB5s9/YawQQQAABBBBw\nsQABy8Wdw64hgAACCCCAgDcFCFje7Df2GgEEEEAAAQRcLEDAcnHnsGsIIIAAAggg4E0BApY3\n+429RgABBBBAAAEXCxCwXNw57BoCCCCAAAIIeFOAgOXNfmOvEUAAAQQQQMDFAgQsF3cOu4YA\nAggggAAC3hQgYHmz39hrBBBAAAEEEHCxAAHLxZ3DriGAAAIIIICANwUIWN7sN/YaAQQQQAAB\nBFwsQMByceewawgggAACCCDgTQECljf7jb1GAAEEEEAAARcLELBc3DnsGgIIIIAAAgh4U4CA\n5c1+Y68RQAABBBBAwMUCBCwXdw67hgACCCCAAALeFCBgebPf2GsEEEAAAQQQcLFAqov3LSG7\nlp6enpD3Cdqb4Bq/x3Exu7jRJCkpSfTLjftmFkxMiXrolJycjEsUeUpKCiZRHjqbmvpdtPDr\nsRL6WajVbNNi4ANWVlaWCYWChgvgGt8QF7OLW030l4Nb982smLgSDRS4RLz1OOFYiXjonHro\npEHLj8dKdXW10T6rfwIfsL755hsrI9bXQwDX+Gi4mF3caKJ/oaalpYkb980smJgSNcnOzpaT\nJ0/iEkWux0lubi4mtUwyMzOloqJCSktLo9b4Y1b/yNA+t5oYg2UlxHoEEEAAAQQQQMCmAAHL\nJhjVEUAAAQQQQAABKwEClpUQ6xFAAAEEEEAAAZsCBCybYFRHAAEEEEAAAQSsBGwHrEWLFsk9\n99xz2u3+7W9/k06dOkl5eflp67ACAQQQQAABBBDws0CdPkV44MAB49MACrF+/XpZt26d7N69\n2+SinxgoKiqSnTt3yvHjx3358UxToylAAAEEEEAAAQRqCdQpYC1cuFCmT58e89L27dvHLEcv\n9O7dW1q0aBFdxDwCCCCAAAIIIBAYgToFrLvvvlsqKyuN+5+8++67smPHDrnppptMSHpTMQ1W\no0aNMq2jAAEEEEAAAQQQCIpAnQKW3kjt3nvvNUy6d+8uW7Zskfvvvz8oRrQTAQQQQAABBBCw\nJVCngBW9xV/84hfRi8wjgAACCCCAAAII1BKwHbD09cuWLZPHHnvMuFSonxasqamptVmRw4cP\nm8ooQAABBBBAAAEEgiBgO2B98MEHomex9AGOvXr1klatWhlPnQ8CFm1EAAEEEEAAAQTqImA7\nYL366quiD3H86KOP5Pvf/35d3oM6CCCAAAIIIIBAoARs32h0z549csEFFxCuAnWY0FgEEEAA\nAQQQsCNgO2BpuNKzV8eOHbPzPtRFAAEEEEAAAQQCI2A7YOn9r9q2bStz5swJ3909MFo0FAEE\nEEAAAQQQqIOA7TFYeqPRs846Sx555BGZP3++6B3dc3JyTG+1ceNGUxkFCCCAAAIIIIBAEARs\nByy9/cKJEyekb9++QfChjQgggAACCCCAgG0B2wFr8uTJol9MCCCAAAIIIIAAAvEFbI/Bir8Z\nShFAAAEEEEAAAQRCArbPYM2bN0+eeOKJ0OtP+10fCM2EAAIIIIAAAggEUcB2wCosLJSuXbvG\nWFVVVcnOnTuNR+e0aNFCbrzxxpj1LCCAAAIIIIAAAkESsB2wxo8fL/oVb/ryyy/lyiuvlLPP\nPjveasoQQAABBBBAAIFACDg6BqtLly4yc+ZMeeCBB0TPajEhgAACCCCAAAJBFHA0YClghw4d\npKysTD7//PMgetJmBBBAAAEEEEBAbF8iPJOZPj7n6aeflpSUFOnYseOZqtpat2bNGjl69GjM\na3r06GGEOS3Us2UbNmyQLVu2SPfu3blHV4wUCwgggAACCCCQaAHbAev555+XBQsWmPbz5MmT\nxiD3gwcPij5OJzs721SnPgUanmbPni15eXmSmhrZXb0Xl54t0/VTpkwRfQj1xRdfLK+88ooM\nGTJEpk2bVp+34zUIIIAAAggggECDBSKJpY6bqqioMJ1N0pfqWauePXsag9zvvPPOOm7Nutqu\nXbuMZx5qqCsoKDC9QAPVt99+K0uWLDEe2aO3hxg3bpwMHz5cunXrZqpPAQIIIIAAAggg0NgC\ntgPW1KlTRb8SNelYLr01RLxwpfuwevVqGTp0aPh5iJ06dTKC3sqVKwlYieok3gcBBBBAAAEE\nYgRsB6zQqysrK+Uf//iHfPbZZ6KXB3v37m18NW/ePFTFke/btm0zLg/qDU51LJbeZ0tvEzFo\n0CBj+3ppsG3btjHvpcv79++PKdOFTz75RPbu3RsuT09PN8JYuIAZxwQyMjIc25afNoSLuTfd\naJKUlCT65cZ9MwsmpkQ9dEpOTsYlilyHrmASBXJqVq9o6aTf/fgzFPpZMBp5hn/qFbD++9//\nyk2nxllpYKk9zZ07V2bMmFG7uN7LxcXFcujQIePmpgMHDpTly5cbt4J4+OGHjcHsJSUlkp+f\nH7N9XdbX1Z70MmNRUVG4uGXLlrJ27drwMjPOCagtk1kAF2+Z0F/m/tI/THExu2BiNsnMzBT9\n8tukQ6XqMtkOWEeOHJERI0aInsHSs0r9+vWT3Nxc2b59u7zwwgty7733GqB33313Xd7fss6c\nOXOkurraOHOllfv37y96VkvHXOm8/uWg+xI96XJOTk50kTF/9dVXG58yDK3QgfilpaWhRb47\nKIBrfExczC5uNNG/UPX/h9qfXjbvfbBK9I9XvWJRXl4erIafobV6lkZDJyYRJDXR38EnTpww\nviJr/DFXU1Nj9LlVa2wHLP0UoYasjz76KOaROeeff75ce+21ctttt8kzzzwjTgWsZs2amdow\nYMAAef/9941T+PpXg953K3rS/7DbtGkTXWTMX3bZZaJf0ZNeYmRyXoBfTPFNcTG7uNFEA5b+\n5e3GfTMLJqZETTRg6Se3cYmYp6WlGZfCMIk10YClJzv86BK6BBppcfw52zca3bhxo1xyySUx\n4Sp603r7BB2Y/vXXX0cX13t++vTpsnTp0pjX6z6Exl3p3eM3b94cs17vh9WuXbuYMhYQQAAB\nBBBAAIFECdgOWJrcznT9MbRO/8pxYurTp48sXrzYCG16unHZsmWydetWGT16tLH5kSNHyqpV\nq4ybjOppO12v+zBs2DAn3p5tIIAAAggggAACtgVsXyK84IIL5Fe/+pWsW7dOLrzwwpg31ICj\ng8/1tgp6E1AnJh3vtWnTJpk0aZJxzVM/kaDPO9TLhDrpOKwxY8YYt47QU7V65mrWrFnGuDAn\n3p9tIIAAAggggAACdgVsB6xbbrnFGNyulwlvvfVWI2TpdXkd5P6nP/3JGJulg92dmrKyskQ/\nmajXcXWsVevWrY2xV9Hb1/A1duxYY8C6hjsmBBBAAAEEEECgKQVsBywNPHo/qptvvlnmz58f\ns+96j6qnnnpKJk6cGFPuxIIOmIv3ycDQtvVTHISrkAbfEUAAAQQQQKApBWwHLN1ZHWCu96P6\n3//+J59++qno8wfPPfdc0Qcw6y0bmBBAAAEEEEAAgSAL2B7krlh6Xyq9XYN+Wk8fU6NjoHbu\n3Cl6nykNXkwIIIAAAggggECQBWwHLL3J3I9+9CPR2zHoDT9Dk3668MMPPzQesvzSSy+FivmO\nAAIIIIAAAggETsB2wPrHqecPfvzxx/Lmm2/K7bffHga77rrrZNeuXcYZrWnTphlnucIrmUEA\nAQQQQAABBAIkYDtgvf766zJ48GDjTFVtJ72r+l133SX79u2Tr776qvZqlhFAAAEEEEAAgUAI\n2A5YqqL3mzrdFHrgpX6qjwkBBBBAAAEEEAiigO2ANWTIEHn33XeNWzXUBtPB74888oi0atXK\nsRuN1n4PlhFAAAEEEEAAAbcL2L5Nw5VXXin9+vUznkeoj6vp3bu35OXlye7du41nBupjbP7y\nl7+4vd3sHwIIIIAAAggg0GgCtgOW3udq5cqVxqcIdTxW9CcG9fE4unz99dc32g6zYQQQQAAB\nBBBAwO0CtgOWNigzM1MWLVok+uxBHcyuZ686d+5sPAcwKSnJ7W1m/xBAAAEEEEAAgUYVqFfA\nCu2RhqkuXboYX6EyviOAAAIIIIAAAkEXsD3IPehgtB8BBBBAAAEEELASIGBZCbEeAQQQQAAB\nBBCwKUDAsglGdQQQQAABBBBAwEqAgGUlxHoEEEAAAQQQQMCmAAHLJhjVEUAAAQQQQAABKwEC\nlpUQ6xFAAAEEEEAAAZsCBCybYFRHAAEEEEAAAQSsBAhYVkKsRwABBBBAAAEEbAoQsGyCUR0B\nBBBAAAEEELASIGBZCbEeAQQQQAABBBCwKUDAsglGdQQQQAABBBBAwEqAgGUlxHoEEEAAAQQQ\nQMCmAAHLJhjVEUAAAQQQQAABK4FUqwp+X5+Tk+P3JjZJ+3CNz46L2cWtJsnJyeLWfTMrJq4k\nJSUFlyhuPU4wiQI5NaseOqWmpvryWKmpqTHaZ/VP4ANWXaGsIFkfK4BrrEdoCZeQROS7m03c\nvG8RwcTMJSUlhd8IlzBFeAaTMIVEW0TPR2p4e66ubQp8wDp27Ji3e9qle49r/I7BxeziRhMN\nE9nZ2eLGfTMLJqZETfLz86WqqgqXKPK0tDTjTA3HSgRFTXJzc6WystKXx0roDF2kxfHnGIMV\n34VSBBBAAAEEEECg3gIErHrT8UIEEEAAAQQQQCC+AAErvgulCCCAAAIIIIBAvQUIWPWm44UI\nIIAAAggggEB8AQJWfBdKEUAAAQQQQACBegsQsOpNxwsRQAABBBBAAIH4AgSs+C6UIoAAAggg\ngAAC9RYgYNWbjhcigAACCCCAAALxBQhY8V0oRQABBBBAAAEE6i1AwKo3HS9EAAEEEEAAAQTi\nCxCw4rtQigACCCCAAAII1FuAgFVvOl6IAAIIIIAAAgjEFyBgxXehFAEEEEAAAQQQqLcAAave\ndLwQAQQQQAABBBCIL0DAiu9CKQIIIIAAAgggUG+B1Hq/khcigAACjSwwceLERn4H925+4cKF\n7t059gwBBCwFOINlSUQFBBBAAAEEEEDAngABy54XtRFAAAEEEEAAAUsBApYlERUQQAABBBBA\nAAF7AgQse17URgABBBBAAAEELAUIWJZEVEAAAQQQQAABBOwJELDseVEbAQQQQAABBBCwFCBg\nWRJRAQEEEEAAAQQQsCdAwLLnRW0EEEAAAQQQQMBSgIBlSUQFBBBAAAEEEEDAnoAn7uReXV0t\nH3/8sWzYsEFat24tQ4YMkYyMjHBL16xZI0ePHg0v60yPHj2kQ4cOMWUsIIAAAggggAACiRBw\nfcAqKSmRW265xQhUvXr1kqVLl8qLL74ozz77rOTn50tVVZXMnj1b8vLyJDU10pzJkycTsBJx\nBPEeCCCAAAIIIGASiCQS0yp3FGigatu2rTz99NPGDpWXl8vPfvYzWbJkidx6662ya9cuqaio\nkAULFkhBQYE7dpq9QAABBBBAAIFAC7h+DFZ2draMHz8+3ElZWVnSvXt3+frrr42yzz//XAoL\nCwlXYSFmEEAAAQQQQKCpBVx/Bis6XCnWoUOHZP369TJ16lTDbtu2bcblwXnz5omOxWrRooUR\nyAYNGmSyXb58uRQXF4fLNbyNGTMmvMyMcwK5ubnObcxHW8LF3JmYmE20xK0uOhTDrfsWX7Jx\nS1NSUozhKZhEnJOTvzt3k5aW5stjpaamJtLYM8y5PmBF77teCpwzZ4506tRJrrvuOmOVBiYN\nXV27dpWBAweKhqiZM2fKww8/LAMGDIh+uaxYsUKKiorCZS1btjQuM4YLmHFMQMfEMZkFcMHE\nLBC/xK3HigYst+5bfMnElGJidk5PTxf98tukWaQuk2cCVmlpqcyYMUP0++OPPy6ajHXSwKWf\nMtQzVzr1799f9KyWjtGqHbCmTJkiI0eONOrpP7qNgwcPhpeZcU4A1/iWuJhdMDGbaInbXJKS\nkkT/KNVfLmVlZfF3OoClGjh16Aomkc5Xk2bNmomOmT527FhkhU/mQj8LVs3xRMDSTxLedddd\nkpOTI08++aTRcaGGaSfWnjRYvf/++7WLpVu3bsZX9Io9e/ZELzLvkEBdE75Db+eZzeBi7ipM\nzCZa4jYX/aWik/5B67Z9M3asif7Ry0V62yBMIh0QuoTm12NFLwvXZXL9IPd9+/bJ7bffbtxy\nYf78+THhShs4ffp049YN0Y3duHGj8cnD6DLmEUAAAQQQQACBRAm4/gzWY489ZtzratSoUbJ1\n69awi94Dq3PnztKnTx9ZvHix6D2yOnbsKG+++aZRT8dgMSGAAAIIIIAAAk0h4OqApbdiWLt2\nreFy5513xvj069dPHn30URkxYoRs2rRJJk2aZAym01O1Osi99virmBezgAACCCCAAAIINKKA\nqwOW3mA03liqaA8dXDh37lzjUTk6yFAfpRMaKxBdj3kEEEAAAQQQQCBRAq4OWHYQdAC8fjEh\ngAACCCCAAAJNLeD6Qe5NDcT7I4AAAggggAACdgUIWHbFqI8AAggggAACCFgIELAsgFiNAAII\nIIAAAgjYFSBg2RWjPgIIIIAAAgggYCFAwLIAYjUCCCCAAAIIIGBXgIBlV4z6CCCAAAIIIICA\nhQABywKI1QgggAACCCCAgF0BApZdMeojgAACCCCAAAIWAgQsCyBWI4AAAggggAACdgUIWHbF\nqI8AAggggAACCFgIELAsgFiNAAIIIIAAAgjYFSBg2RWjPgIIIIAAAgggYCFAwLIAYjUCCCCA\nAAIIIGBXgIBlV4z6CCCAAAIIIICAhQABywKI1QgggAACCCCAgF0BApZdMeojgAACCCCAAAIW\nAgQsCyBWI4AAAggggAACdgUIWHbFqI8AAggggAACCFgIELAsgFiNAAIIIIAAAgjYFSBg2RWj\nPgIIIIAAAgggYCFAwLIAYjUCCCCAAAIIIGBXgIBlV4z6CCCAAAIIIICAhQABywKI1QgggAAC\nCCCAgF0BApZdMeojgAACCCCAAAIWAqkW632/unnz5r5vY1M0ENf46riYXTAxm2iJW13S0tJc\nu2/xJRu3NCkpSTCJNVYTnTIyMnx5rFRVVcU2+DRLgQ9YR48ePQ0NxQ0RwDW+Hi5mF0zMJlri\nNhf9pZmVlSX6y8Vt+xZfMDGlqampojaYRLzVJDMzU06ePOlLF+3v3NzcSINPMxf4gKUHAJPz\nArjGN8XF7IKJ2URL3OYSOitRXV3tun2LL5i40pqaGkzicPv1WElJSYnTWnMRY7DMJpQggAAC\nCCCAAAINEiBgNYiPFyOAAAIIIIAAAmaBwF8iNJNQggACCLhbYOLEie7ewUbau4ULFzbSltks\nAs4LcAbLeVO2iAACCCCAAAIBFyBgBfwAoPkIIIAAAggg4LwAAct5U7aIAAIIIIAAAgEXIGAF\n/ACg+QgggAACCCDgvAABy3lTtogAAggggAACARcgYAX8AKD5CCCAAAIIIOC8AAHLeVO2iAAC\nCCCAAAIBFyBgBfwAoPkIIIAAAggg4LwAAct5U7aIAAIIIIAAAgEXIGAF/ACg+QgggAACCCDg\nvAABy3lTtogAAggggAACARcgYAX8AKD5CCCAAAIIIOC8AA97dt6ULSKAAAIIJFiAB2AnGJy3\nsxTgDJYlERUQQAABBBBAAAF7AgQse17URgABBBBAAAEELAUIWJZEVEAAAQQQQAABBOwJELDs\neVEbAQQQQAABBBCwFCBgWRJRAQEEEEAAAQQQsCdAwLLnRW0EEEAAAQQQQMBSgIBlSUQFBBBA\nAAEEEEDAngABy54XtRFAAAEEEEAAAUsBApYlERUQQAABBBBAAAF7Ar64k3tVVZVs2LBBtmzZ\nIt27d5e+ffvaU6A2AggggAACCCDgoIDnA5aGqylTpsiePXvk4osvlldeeUWGDBki06ZNc5CJ\nTSGAAAIIIIAAAnUX8HzA0kD17bffypIlSyQnJ0d27Ngh48aNk+HDh0u3bt3qLkFNBBBAAAEE\nEEDAIQHPB6zVq1fL0KFDjXClJp06dZKePXvKypUrCVgOHSRsBgEEEEDAewJBfQC29tTChQub\nvMM8H7D00mDbtm1jIHV5//79MWW68Pzzz8u6devC5fn5+fLggw+Gl5lxTqBFixbObcxHW8LF\n3JmYmE20BBezCyaYmAXilzTmsaJDk+oyeTpgVVZWSklJiWhQip50ubi4OLrImNdB8O+99164\nvGXLlpKZmRleboyZt99+uzE26+ltYhK/+3Axu2BiNtESXMwumGBiFmickoqKijpt2NMBKyUl\nRZKTk0WDVvSkyzoeq/akZ6vuv//+cLG+du/eveFlP81oeExLS5N9+/b5qVkNbstZZ50lBw4c\naPB2/LSBVq1aSXV1tfHHip/a1ZC2JCUlif4MHTx4sCGb8dVr1aR169Zy/PhxOXLkiK/a1pDG\n6P+z+vsGk4iimhQUFMjRo0elrKwsssInc5o99HeJ1eTpgBX6T7B2B5aWlkqbNm1Mbc/Ozhb9\nip70APDzVFNT4+fm1attmMRnw8XsgonZREtwibiELELfI2uCOxdtET3vF5G6tsnzNxrt0qWL\nbN68Oabf9FJgu3btYspYQAABBBBAAAEEEiXg+YA1cuRIWbVqlXGTUU2Vy5YtE70+OmzYsEQZ\n8j4IIIAAAggggECMgKcvEWpL+vfvL2PGjJGpU6caY470zNWsWbMkNzc3pqEsIIAAAggggAAC\niRLwfMBSqEmTJsnYsWNFx14VFhYmyo73QQABBBBAAAEE4gp4/hJhqFXp6emEqxAG3xFAAAEE\nEECgSQV8E7CaVJE3RwABBBBAAAEEogQIWFEYzCKAAAIIIIAAAk4IELCcUGQbCCCAAAIIIIBA\nlAABKwqDWQQQQAABBBBAwAkBApYTimwDAQQQQAABBBCIEkg6dXPOQD9L5fDhw1Ec/pldv369\n8QyoQYMG+adRDrREP21a1wd1OvB2ntjEBx98YNxDrm/fvp7Y30TtJMdKrPTJkydFjxV9xlzP\nnj1jVwZ4SR/ZlpqaKurD9J2A3jJJfwe1b99ezj33XN+x6HOMmzVrZtmuwAcsSyGPVhg1apRs\n2rRJPvvsM4+2gN1OlMCFF14oLVq0kHfeeSdRb8n7eFBAH2bcr18/GTx4sDz33HMebAG7nCiB\njRs3yujRo2XChAly7733JuptXfc+XCJ0XZewQwgggAACCCDgdQECltd7kP1HAAEEEEAAAdcJ\nELBc1yXsEAIIIIAAAgh4XYAxWF7vwdPsf3FxsRw7dkx69+59mhoUI/CdwMcff2wM0u3Rowck\nCJxWoLKyUvRYyc/P9+XA5dM2nBW2BY4ePSr6O6hVq1bSrl0726/3ywsIWH7pSdqBAAIIIIAA\nAq4R4BKha7qCHUEAAQQQQAABvwgQsPzSk7QDAQQQQAABBFwjkOqaPWFHHBMoKyuTNWvWGDca\n1fvWdOzY0bFtsyF/CXz99dfy/vvvS0pKigwcOFDatm3rrwbSGscF/vOf/4jeE+vyyy93fNts\n0PsC1dXVsnbtWvniiy/kvPPOk169eonemDOIUzBb7eOe/uqrr2TEiBGydOlS+eSTT2TSpEny\nr3/9y8ctpmn1FbjvvvvkpptuMgajFhUVybhx44z/GOu7PV7nf4F9+/bJrFmzZOXKlf5vLC20\nLaB3s7/nnntk3rx5on+8/eY3vzF+B2noCuLEGSyf9fpDDz0k1157rdx5552ij3B48cUX5fHH\nH5eXX37ZWPZZc2lOPQX0Dv/vvfeevPrqq8YnfXQz+p/h/PnzZcCAAfXcKi/zs4D+kvzd737H\n/yN+7uQGtm3FihXG00MWLlwohYWFcuLECRk5cqT8/e9/l6FDhzZw6957OWewvNdnp93jgwcP\nyqeffmqcwdJwpdPVV19t/CWxZcuW076OFcET0Gdw3nzzzeFwpQJ9+vSRvXv3SsAfTxq8g6GO\nLf7rX/9qhKtLL720jq+gWtAEXnvtNSNQabjSKSMjQzRsBfWPNgKWj34C9JejTtHjaPTBrPrQ\n2v379/uopTSloQL9+/eX8ePHx2xG/8rUe2GFwnnMShYCLaBnPDVgzZw5k+Mj0EfCmRu/c+dO\n4/ePXjnRqyhz5swxxuvl5uae+YU+XUvA8lHH7tmzx/iLQf9qiJ7y8vJEz1gwIXA6gSVLlog+\noFX/U2RCIFpAL/PopcGpU6dKmzZtolcxj0BYQG9sXV5ebgxL2bBhg1x88cXGGfHbbrtNtm/f\nHq4XpBkClo96Oy0tTfRuy7Wnqqoqyc7Orl3MMgKGwAsvvCDPPfecPPjgg9KtWzdUEIgReOqp\np6RTp05y1VVXxZSzgEC0gP6e0UnPVum431GjRskzzzwjzZo1k5deeim6amDmGeTuo67W6956\nkOtfEtGBqrS0VM4++2wftZSmOCGgg5Yfe+wxWbVqlTz66KPGGCwntss2/COgnxrUcTX6cfvp\n06cbDdOP31dUVBjLM2bMkObNm/unwbSk3gJ6pUSvnlxyySXhbehwAx1/pZ9uD+JEwPJRr7dv\n3954ptzmzZulb9++Rst00Lv+Io0el+WjJtOUBgjoZR+9LKh/ZXbp0qUBW+KlfhXIysqSW265\nJaZ5hw4dEn3W3A9+8APRs+ZMCIQEOnfubFwWDC3r9y+//FLOOeec6KLAzBOwfNTVeir2iiuu\nMD61oYOVU1NT5Y9//KP85Cc/kbPOOstHLaUpDRVYvny5cebq17/+tXFDWg1aoalnz57GjUdD\ny3wProA+2HnChAkxAAcOHBD9ql0eU4mFQApcf/31xlADHX+ln0rWD87oJ9j1foxBnAhYPuv1\nKVOmGPczuuaaa4zTtXoX3TvuuMNnraQ5DRXQG9Hq9Mgjj5g29c4778RcYjZVoAABBBCII6C3\n8NBPrOulY73di54BnTZtWviKSpyX+Loo6RRCja9bGNDG6bgrffxJTk5OQAVoNgIIIIBAUwjo\nWOCSkhLjPntBvu0LAaspjj7eEwEEEEAAAQR8LcBtGnzdvTQOAQQQQAABBJpCgIDVFOq8JwII\nIIAAAgj4WoCA5evupXEIIIAAAggg0BQCBKymUOc9EUAAAQQQQMDXAgQsX3cvjUMAAQQQQACB\nphAgYDWFOu+JAAIIIIAAAr4WIGD5untpHAII1FWgvLxcduzYIfqdCQEEEGioAAGroYK8HgEE\nfCGgj/XQZ6atWLHCF+2hEQgg0LQCBKym9efdEUAAAQQQQMCHAgQsH3YqTUIAAQQQQACBphXg\nYc9N68+7I4BAggQ+/PBDWbJkiXz11VfGpcCrrrpKLr/88rjvrvWWL18umZmZctlll8moUaNi\n6lVXV8trr70mb7/9thw6dEi6du0qw4YNkx//+Mcx9VhAAIHgCnAGK7h9T8sRCIzAAw88IP36\n9TNCkT4E/Z133pGhQ4fKlClTTAZz5syRyZMnS1lZmaxfv15Gjx4tY8eOjal39913G6Hr3//+\ntyQnJ8uiRYtk8ODB8vjjj8fUYwEBBAIsUMOEAAII+FhgzZo1NadCUM2YMWNqKioqjJaeOgNV\nM23atJpT//XXvPzyy0bZG2+8YSy3atWqZtu2bWGRGTNmGOWnzlgZZaWlpTWnQlrN7bffHq5T\nVVVVc95559W0bt26prKyMlzODAIIBFeAM1gBDtc0HYEgCLzwwguiZ62eeOIJSUtLM5qclJQk\nDz74oJwKU/Lkk0/GMJwKXnLuueeGy+677z5p3ry5LFiwIFymZ602b94se/bsMcp0+Z///Kds\n377deK9wRWYQQCCwAgSswHY9DUcgGAKffvqpdOrUyQhT0S3W8VW9evWSrVu3RhdL3759Y5az\nsrKMMVafffaZUZ6Xlyd6iVADVbt27eSCCy4QDWFffvmlMWYr5sUsIIBAYAUIWIHtehqOQDAE\nDh48KPn5+XEbm5ubKydPnoxZF6+u1ou+Aenvf/97KSoqkhtuuEF27twpOsZLg9aECRPk1CXC\nmO2xgAACwRQgYAWz32k1AoER0Mt9eof2eJNe0uvdu3fMqr1798Ys64K+/nvf+164/NSYK7ni\niivkz3/+s+zbt0/WrVsngwYNMga765ktJgQQQICAxTGAAAK+FrjoootEz2K9/vrrMe3UTwhu\n2LBB+vTpE1P+6quvxiyvXr1avvjiC7nkkkuMcn1NTk5O+BODOp5LLyv+8pe/NNbHC2gxG2QB\nAQQCIZCk4/sD0VIaiQACgRTQS3s9evSQb775Rh599FEZOHCgfPLJJ8Y4qoyMDGMsVfv27eXN\nN9+Ua665xhgIf9ddd8mNN94opz5NKHfccYdoiNIxWHqpUKfhw4eL3qJh5syZcumll8qWLVtk\n7ty5xiB3PdvVsmXLQFrTaAQQiAgQsCIWzCGAgE8Fdu/eLbfddptx81C9SaiegdKbgj777LPS\nsWNHo9WhgLV48WLRe2HpWSud9AyYXgo859RzCkNTcXGxjB8/3ghZWqYBTAfMa70f/vCHoWp8\nRwCBAAsQsALc+TQdgaAJ6NksHXel46lCt2w4nYHe8V0HvBcUFJyuipSUlBi3atDwpZ8uZEIA\nAQRCAgSskATfEUAAAQQQQAABhwQY5O4QJJtBAAEEEEAAAQRCAgSskATfEUAAAQQQQAABhwQI\nWA5BshkEEEAAAQQQQCAkQMAKSfAdAQQQQAABBBBwSICA5RAkm0EAAQQQQAABBEICBKyQBN8R\nQAABBBBAAAGHBAhYDkGyGQQQQAABBBBAICRAwApJ8B0BBBBAAAEEEHBIgIDlECSbQQABBBBA\nAAEEQgIErJAE3xFAAAEEEEAAAYcECFgOQbIZBBBAAAEEEEAgJPB/VcDJgnp14qkAAAAASUVO\nRK5CYII=",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"obs <- rpois(300, lambda = 1.5)\n",
"dat2 <- data.frame(obs)\n",
"\n",
"ggplot(dat2, aes(x=obs, y=stat(count))) + geom_bar()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n8nvmXwAAAABJRU5ErkJggg==",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dat2_filt = data.frame(obs = dat2[dat2$obs > 0, ])\n",
"ggplot(dat2_filt, aes(x=obs, y=stat(count))) + geom_bar()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Try fit with truncated model"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"obs | trunc(lb = 1) ~ 1 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"formula.truncpois = brmsformula(obs | trunc(lb=1) ~ 1, family = poisson())\n",
"formula.truncpois"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Compiling the C++ model\n",
"Start sampling\n",
"Warning message:\n",
"“There were 3226 transitions after warmup that exceeded the maximum treedepth. Increase max_treedepth above 10. See\n",
"http://mc-stan.org/misc/warnings.html#maximum-treedepth-exceeded”Warning message:\n",
"“Examine the pairs() plot to diagnose sampling problems\n",
"”"
]
}
],
"source": [
"fit_truncpois <- brm(formula.truncpois, data = dat2_filt)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"above cell runs very slow"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" Family: poisson \n",
" Links: mu = log \n",
"Formula: obs | trunc(lb = 1) ~ 1 \n",
" Data: dat2_filt (Number of observations: 228) \n",
"Samples: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;\n",
" total post-warmup samples = 4000\n",
"\n",
"Population-Level Effects: \n",
" Estimate Est.Error l-95% CI u-95% CI Eff.Sample Rhat\n",
"Intercept -371.67 0.00 -371.68 -371.67 88 1.06\n",
"\n",
"Samples were drawn using sampling(NUTS). For each parameter, Eff.Sample \n",
"is a crude measure of effective sample size, and Rhat is the potential \n",
"scale reduction factor on split chains (at convergence, Rhat = 1)."
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"summary(fit_truncpois)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n1lcIydIpg2ChLN+wQ6vsaggYAobAQY2AEayD+u21yRkCo4vASyu30P79RE2B9woW1HKqBpTV\nr+2Wq70YAoaAIXCwI2AE62B/h21+hsAoIrBghQtk70ewqpVg7RpFa2woQ8AQMATGDgEjWGOH\nvY1sCBx0CCxkDxYKlgjDUqsEa7N5sEJc7N4QMAQOXgSMYB28763NzBAYdQQWrd5K48a5oPZw\n8JqqMnlcv3VPWG33BxkC+7E+zGXfvn20ZevOnLNTmZ7evpztuSr3sd4+1rli9Yaoua9vX3Rf\nyM2e1g7q2OtOE+jig8j38RFOq9ZvoV62Y9PWXdTZ3RupaW3fS1u2x5/VXj8WbN7b3RPJ5brZ\nw30xR+2TSyas6/Y4oE8b2we7ULqDcSDT3dsresO+dp9tBIxgZfv9MesMgZJBAF94S9Zulx2D\nyOIelvLy8Zx0dBxt3N4aVtv9QYRADxOAZ9mD+e1b7qHfPvAHesMlH41mB4Jw0bs+RT+/4/f0\n+OL1dP+CZXTT7Q9F7a+8uoqeXbAkegaZQtm8bTc9v2gVLXh1Hd32myfp+De8jxa8spJeWbOV\nLr72O7RojVuSbt3bTU+8tIKe41xrICq72/bS2m0touPZ5Rtp4dqt9C+3P0xX/5/v0RMvLqen\nXl1P67fvppPffi399pml9JYPfZUWcBqRdiY4f3fzr2j66/8/uvrzP6COrm76Btv51z+5m55d\ntp6+cdt99P1fP06Xf+wmJmU7qb3Lka1tO1vozMv/Dy1eu5k+8t3b6QX+Q+O5lZtpET+j/O8f\nXqFdbFNbeyft2tVKz7ywmBav2kQ/v/txlt1Gf/uNH1PTye+nR19eS1v2dDB+T9HZb72aevr6\n6JHnFtNNv7if/uKm2+iYt15Ln7/p57R7Tyv97f/7Ba3ZaKlPBOCMvrjAiIwaZ2YZAoZA6SCw\nYtNO/iu7jyZPcPmv0pZXV5XTBv+ll26z59JH4PVv/wh9/wc30i13PkZ/8uaTqYvJCQrIEkjE\n3p5e6tw3jioqK5m4dNGejk5awUvGZePH0//c9yQtXbqKXn/miTTvyDn09OYWOud1h9H//PcD\n9Mgzr9L/veHDBA9UZWWFkKfK8VU0afokWrtlF1VV19CO1k7atqedptfW0xsv+wTNOXwOXX/t\n1dRcV0Wbd7fTlOZGOvmkY2jipGZas72NqmuraNPadVRVVUlTpkykH/7fz7LndRz97wPP09f+\n+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\ngg==",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(fit_truncpois)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using all posterior samples for ppc type 'rootogram' by default.\n",
"Warning message:\n",
"“100% of all predicted values were invalid. Increasing argument 'ntrys' may help.”"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# rootogram\n",
"pp_check(fit_truncpois, type = \"rootogram\", style=\"hanging\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"it does not look like this converged"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Hypothesis Tests for class b:\n",
" Hypothesis Estimate Est.Error CI.Lower CI.Upper Evid.Ratio\n",
"1 (exp(Intercept)) = 0 0 0 0 0 NA\n",
" Post.Prob Star\n",
"1 NA *\n",
"---\n",
"'*': The expected value under the hypothesis lies outside the 95%-CI.\n",
"Posterior probabilities of point hypotheses assume equal prior probabilities."
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# get parameter estimate\n",
"hypothesis(fit_truncpois, c(\"exp(Intercept) = 0\"))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## workaround: hurdle model\n",
"\n",
"with zero probability fixed at zero"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"obs ~ 1 \n",
"hu = 0"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"formula.hpois = brmsformula(obs ~ 1, hu = 0, family = hurdle_poisson())\n",
"formula.hpois"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Compiling the C++ model\n",
"Start sampling\n"
]
}
],
"source": [
"fit_hpois <- brm(formula.hpois, data = dat2_filt)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" Family: hurdle_poisson \n",
" Links: mu = log; hu = identity \n",
"Formula: obs ~ 1 \n",
" hu = 0\n",
" Data: dat2_filt (Number of observations: 228) \n",
"Samples: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;\n",
" total post-warmup samples = 4000\n",
"\n",
"Population-Level Effects: \n",
" Estimate Est.Error l-95% CI u-95% CI Eff.Sample Rhat\n",
"Intercept 0.35 0.07 0.22 0.48 1377 1.00\n",
"\n",
"Samples were drawn using sampling(NUTS). For each parameter, Eff.Sample \n",
"is a crude measure of effective sample size, and Rhat is the potential \n",
"scale reduction factor on split chains (at convergence, Rhat = 1)."
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"summary(fit_hpois)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using all posterior samples for ppc type 'rootogram' by default.\n"
]
},
{
"data": {
"image/png": "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\nkwAAAABJRU5ErkJggg==",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# rootogram\n",
"pp_check(fit_hpois, type = \"rootogram\", style=\"hanging\")"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Hypothesis Tests for class b:\n",
" Hypothesis Estimate Est.Error CI.Lower CI.Upper Evid.Ratio\n",
"1 (exp(Intercept)) = 0 1.42 0.1 1.24 1.61 NA\n",
" Post.Prob Star\n",
"1 NA *\n",
"---\n",
"'*': The expected value under the hypothesis lies outside the 95%-CI.\n",
"Posterior probabilities of point hypotheses assume equal prior probabilities."
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# get parameter estimate\n",
"hypothesis(fit_hpois, c(\"exp(Intercept) = 0\"))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"works great"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## examine differences in the generated stan code"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"library(diffr)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"// generated with brms 2.7.2\n",
"functions {\n",
"}\n",
"data {\n",
" int<lower=1> N; // total number of observations\n",
" int Y[N]; // response variable\n",
" int lb[N]; // lower truncation bounds;\n",
" int prior_only; // should the likelihood be ignored?\n",
"}\n",
"transformed data {\n",
"}\n",
"parameters {\n",
" real temp_Intercept; // temporary intercept\n",
"}\n",
"transformed parameters {\n",
"}\n",
"model {\n",
" vector[N] mu = temp_Intercept + rep_vector(0, N);\n",
" for (n in 1:N) {\n",
" mu[n] = exp(mu[n]);\n",
" }\n",
" // priors including all constants\n",
" target += student_t_lpdf(temp_Intercept | 3, 1, 10);\n",
" // likelihood including all constants\n",
" if (!prior_only) {\n",
" for (n in 1:N) {\n",
" target += poisson_lpmf(Y[n] | mu[n]) -\n",
" poisson_lccdf(lb[n] | mu[n]);\n",
" }\n",
" }\n",
"}\n",
"generated quantities {\n",
" // actual population-level intercept\n",
" real b_Intercept = temp_Intercept;\n",
"}\n"
]
}
],
"source": [
"stancode.truncpois = make_stancode(formula.truncpois, dat2_filt)\n",
"print(stancode.truncpois)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"// generated with brms 2.7.2\n",
"functions {\n",
"\n",
" /* hurdle poisson log-PDF of a single response \n",
" * Args: \n",
" * y: the response value \n",
" * lambda: mean parameter of the poisson distribution\n",
" * hu: hurdle probability\n",
" * Returns: \n",
" * a scalar to be added to the log posterior \n",
" */ \n",
" real hurdle_poisson_lpmf(int y, real lambda, real hu) { \n",
" if (y == 0) { \n",
" return bernoulli_lpmf(1 | hu); \n",
" } else { \n",
" return bernoulli_lpmf(0 | hu) + \n",
" poisson_lpmf(y | lambda) - \n",
" log1m_exp(-lambda); \n",
" } \n",
" }\n",
" /* hurdle poisson log-PDF of a single response \n",
" * logit parameterization of the hurdle part\n",
" * Args: \n",
" * y: the response value \n",
" * lambda: mean parameter of the poisson distribution\n",
" * hu: linear predictor for hurdle part \n",
" * Returns: \n",
" * a scalar to be added to the log posterior \n",
" */ \n",
" real hurdle_poisson_logit_lpmf(int y, real lambda, real hu) { \n",
" if (y == 0) { \n",
" return bernoulli_logit_lpmf(1 | hu); \n",
" } else { \n",
" return bernoulli_logit_lpmf(0 | hu) + \n",
" poisson_lpmf(y | lambda) - \n",
" log1m_exp(-lambda); \n",
" } \n",
" }\n",
" /* hurdle poisson log-PDF of a single response \n",
" * log parameterization for the poisson part\n",
" * Args: \n",
" * y: the response value \n",
" * eta: linear predictor for poisson part \n",
" * hu: hurdle probability\n",
" * Returns: \n",
" * a scalar to be added to the log posterior \n",
" */ \n",
" real hurdle_poisson_log_lpmf(int y, real eta, real hu) { \n",
" if (y == 0) { \n",
" return bernoulli_lpmf(1 | hu); \n",
" } else { \n",
" return bernoulli_lpmf(0 | hu) + \n",
" poisson_log_lpmf(y | eta) - \n",
" log1m_exp(-exp(eta)); \n",
" } \n",
" }\n",
" /* hurdle poisson log-PDF of a single response \n",
" * log parameterization for the poisson part\n",
" * logit parameterization of the hurdle part\n",
" * Args: \n",
" * y: the response value \n",
" * eta: linear predictor for poisson part \n",
" * hu: linear predictor for hurdle part \n",
" * Returns: \n",
" * a scalar to be added to the log posterior \n",
" */ \n",
" real hurdle_poisson_log_logit_lpmf(int y, real eta, real hu) { \n",
" if (y == 0) { \n",
" return bernoulli_logit_lpmf(1 | hu); \n",
" } else { \n",
" return bernoulli_logit_lpmf(0 | hu) + \n",
" poisson_log_lpmf(y | eta) - \n",
" log1m_exp(-exp(eta)); \n",
" } \n",
" }\n",
" // hurdle poisson log-CCDF and log-CDF functions\n",
" real hurdle_poisson_lccdf(int y, real lambda, real hu) { \n",
" return bernoulli_lpmf(0 | hu) + poisson_lccdf(y | lambda) - \n",
" log1m_exp(-lambda);\n",
" }\n",
" real hurdle_poisson_lcdf(int y, real lambda, real hu) { \n",
" return log1m_exp(hurdle_poisson_lccdf(y | lambda, hu));\n",
" }\n",
"}\n",
"data {\n",
" int<lower=1> N; // total number of observations\n",
" int Y[N]; // response variable\n",
" real<lower=0,upper=1> hu; // hurdle probability\n",
" int prior_only; // should the likelihood be ignored?\n",
"}\n",
"transformed data {\n",
"}\n",
"parameters {\n",
" real temp_Intercept; // temporary intercept\n",
"}\n",
"transformed parameters {\n",
"}\n",
"model {\n",
" vector[N] mu = temp_Intercept + rep_vector(0, N);\n",
" // priors including all constants\n",
" target += student_t_lpdf(temp_Intercept | 3, 1, 10);\n",
" // likelihood including all constants\n",
" if (!prior_only) {\n",
" for (n in 1:N) {\n",
" target += hurdle_poisson_log_lpmf(Y[n] | mu[n], hu);\n",
" }\n",
" }\n",
"}\n",
"generated quantities {\n",
" // actual population-level intercept\n",
" real b_Intercept = temp_Intercept;\n",
"}\n"
]
}
],
"source": [
"stancode.hpois = make_stancode(formula.hpois, dat2_filt)\n",
"print(stancode.hpois)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<!doctype html>\n",
"<html>\n",
"\t<head>\n",
"\t\t<meta charset=\"utf-8\">\n",
"\t\t<script title=\"htmlwidgets\" src=\"data:application/javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gZXZhbCgiKCIgKyB0YXNrICsgIikiKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5pdFNpemluZyhlbCkgewogICAgdmFyIHNpemluZyA9IHNpemluZ1BvbGljeShlbCk7CiAgICBpZiAoIXNpemluZykKICAgICAgcmV0dXJuOwoKICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsKICAgIGlmICghY2VsKQogICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZihzaXppbmcucGFkZGluZykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOwogICAgfQoKICAgIGlmIChzaXppbmcuZmlsbCkgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGlmIChjZWwpIHsKICAgICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHZhciBwYWQgPSB1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKTsKICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUuYm90dG9tID0gcGFkLmJvdHRvbSArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7CiAgICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwoKICAgIH0gZWxzZSB7CiAgICAgIGVsLnN0eWxlLndpZHRoID0gcHgoc2l6aW5nLndpZHRoKTsKICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKICAgIH0KICB9CgogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzCiAgdmFyIGRlZmF1bHRzID0gewogICAgZmluZDogZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7CiAgICB9LAogICAgcmVuZGVyRXJyb3I6IGZ1bmN0aW9uKGVsLCBlcnIpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwoKICAgICAgdGhpcy5jbGVhckVycm9yKGVsKTsKCiAgICAgIC8vIEFkZCBhbGwgdGhlc2UgZXJyb3IgY2xhc3NlcywgYXMgU2hpbnkgZG9lcwogICAgICB2YXIgZXJyQ2xhc3MgPSAic2hpbnktb3V0cHV0LWVycm9yIjsKICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7CiAgICAgICAgLy8gdXNlIHRoZSBjbGFzc2VzIG9mIHRoZSBlcnJvciBjb25kaXRpb24gYXMgQ1NTIGNsYXNzIG5hbWVzCiAgICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgIiArICQubWFwKGFzQXJyYXkoZXJyLnR5cGUpLCBmdW5jdGlvbih0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOwogICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgfQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7CgogICAgICAvLyBJcyBlbCBpbmxpbmUgb3IgYmxvY2s/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQoKICAgIC8vIFN1cHBvcnQgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zLiBPbGQtc3R5bGUgY2xhc3MtYm91bmQKICAgIC8vIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldCAib2JqZWN0IiBwZXIgd2lkZ2V0IHBlciB0eXBlL2NsYXNzIG9mCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cwogICAgLy8gdGFrZSBlbCBhbmQgaW5zdGFuY2UgYXJndW1lbnRzLCBiZWNhdXNlIHRoZSB3aWRnZXQgb2JqZWN0IGNhbid0CiAgICAvLyBzdG9yZSB0aGVtLiBOZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0CiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0CiAgICAvLyBwcm92aWRlIHJlbmRlclZhbHVlIG9yIHJlc2l6ZSBtZXRob2RzIGF0IGFsbCwganVzdCB0aGUgc2luZ2xlIG1ldGhvZAogICAgLy8gICBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4KICAgIC8vIFRoaXMgZW5hYmxlcyBhIGZhciBtb3JlIG5hdHVyYWwgcHJvZ3JhbW1pbmcgc3R5bGUgZm9yIHRoZSB3aWRnZXQKICAgIC8vIGF1dGhvciwgd2hvIGNhbiBzdG9yZSBwZXItaW5zdGFuY2Ugc3RhdGUgdXNpbmcgZWl0aGVyIE9PLXN0eWxlCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzCiAgICAvLyBpcyBpbiBjb250cmFzdCB0byB3aGF0IGNhbiBvbmx5IGJlIGNhbGxlZCBDLXN0eWxlIHBzZXVkby1PTyB3aGljaCBpcwogICAgLy8gd2hhdCB3ZSByZXF1aXJlZCBiZWZvcmUpLgogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgewogICAgICBkZWZpbml0aW9uID0gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmaW5pdGlvbik7CiAgICB9CgogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4KICAgICAgLy8gVGhlIGRlZmluaXRpb24gaXRzZWxmIHdpbGwgbm90IGJlIHRoZSBvdXRwdXQgYmluZGluZywgaW5zdGVhZAogICAgICAvLyB3ZSB3aWxsIG1ha2UgYW4gb3V0cHV0IGJpbmRpbmcgb2JqZWN0IHRoYXQgZGVsZWdhdGVzIHRvIHRoZQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kCiAgICAgIC8vIG5hbWUgKHJlbmRlclZhbHVlKSBmb3IgaHRtbHdpZGdldHMgZGVmaW5pdGlvbiBhbmQgU2hpbnkgYmluZGluZ3MKICAgICAgLy8gYnV0IHRoZXkgYWN0dWFsbHkgaGF2ZSBxdWl0ZSBkaWZmZXJlbnQgc2VtYW50aWNzICh0aGUgU2hpbnkKICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0CiAgICAgIC8vIHN0cmlwcyBvZmYgYmVmb3JlIGNhbGxpbmcgaHRtbHdpZGdldHMgcmVuZGVyVmFsdWUpLiBXZSBjYW4ndAogICAgICAvLyBqdXN0IGlnbm9yZSB0aGUgZGlmZmVyZW5jZSBiZWNhdXNlIGluIHNvbWUgd2lkZ2V0cyBpdCdzIGhlbHBmdWwKICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZgogICAgICAvLyB3ZSdyZSBub3QgZGVsZWdhdGluZywgdGhlbiB0aGF0IGNhbGwgd2lsbCBnbyB0byB0aGUgU2hpbnkKICAgICAgLy8gdmVyc2lvbiBpbnN0ZWFkIG9mIHRoZSBodG1sd2lkZ2V0cyB2ZXJzaW9uLgoKICAgICAgLy8gTWVyZ2UgZGVmYXVsdHMgd2l0aCBkZWZpbml0aW9uLCB3aXRob3V0IG11dGF0aW5nIGVpdGhlci4KICAgICAgdmFyIGJpbmRpbmdEZWYgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKCiAgICAgIC8vIFRoaXMgb2JqZWN0IHdpbGwgYmUgb3VyIGFjdHVhbCBTaGlueSBiaW5kaW5nLgogICAgICB2YXIgc2hpbnlCaW5kaW5nID0gbmV3IFNoaW55Lk91dHB1dEJpbmRpbmcoKTsKCiAgICAgIC8vIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgd2UnbGwgd2FudCB0byBzaW1wbHkgdXNlIHRoZSBiaW5kaW5nRGVmJ3MKICAgICAgLy8gdmVyc2lvbiBvZiBtZXRob2RzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwKICAgICAgLy8gbWV0aG9kcyBpbiB0aGUgZnV0dXJlLCBhbmQgd2Ugd2FudCB0aGVtIHRvIGJlIG92ZXJyaWRlYWJsZSBieQogICAgICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcgZGVmaW5pdGlvbnMsIHRoZW4gd2UnbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGlzCiAgICAgIC8vIGxpc3QuCiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImdldElkIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVDaGFuZ2UiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInJlbmRlckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImNsZWFyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7CgogICAgICAvLyBUaGUgZmluZCwgcmVuZGVyVmFsdWUsIGFuZCByZXNpemUgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHksIGJlY2F1c2Ugd2UKICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4KCiAgICAgIHNoaW55QmluZGluZy5maW5kID0gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7CgogICAgICAgIC8vIE9ubHkgcmV0dXJuIGVsZW1lbnRzIHRoYXQgYXJlIFNoaW55IG91dHB1dHMsIG5vdCBzdGF0aWMgb25lcwogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7CgogICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuCiAgICAgICAgLy8gU2luY2UgdGhlcmUgbWlnaHQgYmUgbG90cyBvZiBkaWZmZXJlbnQgaHRtbHdpZGdldHMgYmluZGluZ3MsIHdlCiAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAvLyB0aW1lcy4KICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IGR5bmFtaWNSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgIHJldHVybiBkeW5hbWljUmVzdWx0czsKICAgICAgfTsKCiAgICAgIC8vIFdyYXAgcmVuZGVyVmFsdWUgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzbid0CiAgICAgIC8vIHN1cHBvcnRlZCBuYXRpdmVseSBieSBTaGlueSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCgogICAgICBzaGlueUJpbmRpbmcucmVuZGVyVmFsdWUgPSBmdW5jdGlvbihlbCwgZGF0YSkgewogICAgICAgIFNoaW55LnJlbmRlckRlcGVuZGVuY2llcyhkYXRhLmRlcHMpOwogICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5ldmFscyAmJiBpIDwgZGF0YS5ldmFscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICghYmluZGluZ0RlZi5yZW5kZXJPbk51bGxWYWx1ZSkgewogICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICBpbml0U2l6aW5nKGVsKTsKCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICBpZiAoYmluZGluZ0RlZi5pbml0aWFsaXplKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiaW5kaW5nRGVmLmluaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBiaW5kaW5nRGVmLnJlbmRlclZhbHVlKGVsLCBkYXRhLngsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7CiAgICAgIH07CgogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQKICAgICAgaWYgKGJpbmRpbmdEZWYucmVzaXplKSB7CiAgICAgICAgc2hpbnlCaW5kaW5nLnJlc2l6ZSA9IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuCiAgICAgICAgICAvLyBjYWxsZWQsIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3Igd2lkZ2V0cy4KICAgICAgICAgIGlmIChlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgU2hpbnkub3V0cHV0QmluZGluZ3MucmVnaXN0ZXIoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLm5hbWUpOwogICAgfQogIH07CgogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogIGZ1bmN0aW9uIHNjaGVkdWxlU3RhdGljUmVuZGVyKCkgewogICAgaWYgKCFzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQpIHsKICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfQoKICAvLyBSZW5kZXIgc3RhdGljIHdpZGdldHMgYWZ0ZXIgdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmcKICAvLyBTdGF0aWNhbGx5IHJlbmRlciBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2YgdGhpcyB3aWRnZXQncyBjbGFzcwogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBiaW5kaW5ncyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgewogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOwogICAgICBmb3JFYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdmFyIHNpemVPYmogPSBpbml0U2l6aW5nKGVsLCBiaW5kaW5nKTsKCiAgICAgICAgaWYgKGhhc0NsYXNzKGVsLCAiaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOwoKICAgICAgICB2YXIgaW5pdFJlc3VsdDsKICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7CiAgICAgICAgICBpbml0UmVzdWx0ID0gYmluZGluZy5pbml0aWFsaXplKGVsLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICApOwogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIGluaXRSZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGJpbmRpbmcucmVzaXplKSB7CiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7CiAgICAgICAgICAgIHc6IHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgIH07CiAgICAgICAgICB2YXIgcmVzaXplSGFuZGxlciA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgdmFyIHNpemUgPSB7CiAgICAgICAgICAgICAgdzogc2l6ZU9iaiA/IHNpemVPYmouZ2V0V2lkdGgoKSA6IGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgIGg6IHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGlmIChzaXplLncgPT09IDAgJiYgc2l6ZS5oID09PSAwKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gbGFzdFNpemUudyAmJiBzaXplLmggPT09IGxhc3RTaXplLmgpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBsYXN0U2l6ZSA9IHNpemU7CiAgICAgICAgICAgIGJpbmRpbmcucmVzaXplKGVsLCBzaXplLncsIHNpemUuaCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICB9OwoKICAgICAgICAgIG9uKHdpbmRvdywgInJlc2l6ZSIsIHJlc2l6ZUhhbmRsZXIpOwoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciBjYXNlcyB3aGVyZSB3ZSdyZSBydW5uaW5nIGluIGEgU2hpbnkKICAgICAgICAgIC8vIGFwcCwgYnV0IHRoZSB3aWRnZXQgaXRzZWxmIGlzIG5vdCBhIFNoaW55IG91dHB1dCwgYnV0CiAgICAgICAgICAvLyByYXRoZXIgYSBzaW1wbGUgc3RhdGljIHdpZGdldC4gT25lIGV4YW1wbGUgb2YgdGhpcyBpcwogICAgICAgICAgLy8gYW4gcm1hcmtkb3duIGRvY3VtZW50IHRoYXQgaGFzIHJ1bnRpbWU6c2hpbnkgYW5kIHdpZGdldAogICAgICAgICAgLy8gdGhhdCBpc24ndCBpbiBhIHJlbmRlciBmdW5jdGlvbi4gU2hpbnkgb25seSBrbm93cyB0bwogICAgICAgICAgLy8gY2FsbCByZXNpemUgaGFuZGxlcnMgZm9yIFNoaW55IG91dHB1dHMsIG5vdCBmb3Igc3RhdGljCiAgICAgICAgICAvLyB3aWRnZXRzLCBzbyB3ZSBkbyBpdCBvdXJzZWx2ZXMuCiAgICAgICAgICBpZiAod2luZG93LmpRdWVyeSkgewogICAgICAgICAgICB3aW5kb3cualF1ZXJ5KGRvY3VtZW50KS5vbigKICAgICAgICAgICAgICAic2hvd24uaHRtbHdpZGdldHMgc2hvd24uYnMudGFiLmh0bWx3aWRnZXRzIHNob3duLmJzLmNvbGxhcHNlLmh0bWx3aWRnZXRzIiwKICAgICAgICAgICAgICByZXNpemVIYW5kbGVyCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJoaWRkZW4uaHRtbHdpZGdldHMgaGlkZGVuLmJzLnRhYi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGhlIHNwZWNpZmljIGNhc2Ugb2YgaW9zbGlkZXMsIHdoaWNoCiAgICAgICAgICAvLyBmbGlwcyBzbGlkZXMgYmV0d2VlbiBkaXNwbGF5Om5vbmUgYW5kIGRpc3BsYXk6YmxvY2suCiAgICAgICAgICAvLyBJZGVhbGx5IHdlIHdvdWxkIG5vdCBoYXZlIHRvIGhhdmUgaW9zbGlkZS1zcGVjaWZpYyBjb2RlCiAgICAgICAgICAvLyBoZXJlLCBidXQgcmF0aGVyIGhhdmUgaW9zbGlkZXMgcmFpc2UgYSBnZW5lcmljIGV2ZW50LAogICAgICAgICAgLy8gYnV0IHRoZSBybWFya2Rvd24gcGFja2FnZSBqdXN0IHdlbnQgdG8gQ1JBTiBzbyB0aGUKICAgICAgICAgIC8vIHdpbmRvdyB0byBnZXR0aW5nIHRoYXQgZml4ZWQgbWF5IGJlIGxvbmcuCiAgICAgICAgICBpZiAod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgICAgICAgICAgLy8gSXQncyBPSyB0byBsaW1pdCB0aGlzIHRvIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyCiAgICAgICAgICAgIC8vIGJyb3dzZXJzIGJlY2F1c2UgaW9zbGlkZXMgaXRzZWxmIG9ubHkgc3VwcG9ydHMKICAgICAgICAgICAgLy8gc3VjaCBicm93c2Vycy4KICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWVudGVyIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICAgIG9uKGRvY3VtZW50LCAic2xpZGVsZWF2ZSIsIHJlc2l6ZUhhbmRsZXIpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIHNjcmlwdERhdGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzY3JpcHRbZGF0YS1mb3I9JyIgKyBlbC5pZCArICInXVt0eXBlPSdhcHBsaWNhdGlvbi9qc29uJ10iKTsKICAgICAgICBpZiAoc2NyaXB0RGF0YSkgewogICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHNjcmlwdERhdGEudGV4dENvbnRlbnQgfHwgc2NyaXB0RGF0YS50ZXh0KTsKICAgICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgICBpZiAoIShkYXRhLmV2YWxzIGluc3RhbmNlb2YgQXJyYXkpKSBkYXRhLmV2YWxzID0gW2RhdGEuZXZhbHNdOwogICAgICAgICAgZm9yICh2YXIgayA9IDA7IGRhdGEuZXZhbHMgJiYgayA8IGRhdGEuZXZhbHMubGVuZ3RoOyBrKyspIHsKICAgICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1trXSk7CiAgICAgICAgICB9CiAgICAgICAgICBiaW5kaW5nLnJlbmRlclZhbHVlKGVsLCBkYXRhLngsIGluaXRSZXN1bHQpOwogICAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBpbml0UmVzdWx0LCBbZWwsIGRhdGEueF0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKCiAgICBpbnZva2VQb3N0UmVuZGVySGFuZGxlcnMoKTsKICB9CgogIC8vIFdhaXQgdW50aWwgYWZ0ZXIgdGhlIGRvY3VtZW50IGhhcyBsb2FkZWQgdG8gcmVuZGVyIHRoZSB3aWRnZXRzLgogIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBhcmd1bWVudHMuY2FsbGVlLCBmYWxzZSk7CiAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgIH0sIGZhbHNlKTsKICB9IGVsc2UgaWYgKGRvY3VtZW50LmF0dGFjaEV2ZW50KSB7CiAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiKSB7CiAgICAgICAgZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGFyZ3VtZW50cy5jYWxsZWUpOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfQogICAgfSk7CiAgfQoKCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEF0dGFjaG1lbnRVcmwgPSBmdW5jdGlvbihkZXBuYW1lLCBrZXkpIHsKICAgIC8vIElmIG5vIGtleSwgZGVmYXVsdCB0byB0aGUgZmlyc3QgaXRlbQogICAgaWYgKHR5cGVvZihrZXkpID09PSAidW5kZWZpbmVkIikKICAgICAga2V5ID0gMTsKCiAgICB2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlcG5hbWUgKyAiLSIgKyBrZXkgKyAiLWF0dGFjaG1lbnQiKTsKICAgIGlmICghbGluaykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0dGFjaG1lbnQgIiArIGRlcG5hbWUgKyAiLyIgKyBrZXkgKyAiIG5vdCBmb3VuZCBpbiBkb2N1bWVudCIpOwogICAgfQogICAgcmV0dXJuIGxpbmsuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgfTsKCiAgd2luZG93LkhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMgPSBmdW5jdGlvbihkZikgewogICAgdmFyIG5hbWVzID0gW107CiAgICB2YXIgbGVuZ3RoOwogICAgZm9yICh2YXIgbmFtZSBpbiBkZikgewogICAgICAgIGlmIChkZi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgbmFtZXMucHVzaChuYW1lKTsKICAgICAgICBpZiAodHlwZW9mKGRmW25hbWVdKSAhPT0gIm9iamVjdCIgfHwgdHlwZW9mKGRmW25hbWVdLmxlbmd0aCkgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyIpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mKGxlbmd0aCkgIT09ICJ1bmRlZmluZWQiICYmIGxlbmd0aCAhPT0gZGZbbmFtZV0ubGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGgiKTsKICAgICAgICB9CiAgICAgICAgbGVuZ3RoID0gZGZbbmFtZV0ubGVuZ3RoOwogICAgfQogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHZhciBpdGVtOwogICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbGVuZ3RoOyByb3crKykgewogICAgICAgIGl0ZW0gPSB7fTsKICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBuYW1lcy5sZW5ndGg7IGNvbCsrKSB7CiAgICAgICAgICAgIGl0ZW1bbmFtZXNbY29sXV0gPSBkZltuYW1lc1tjb2xdXVtyb3ddOwogICAgICAgIH0KICAgICAgICByZXN1bHRzLnB1c2goaXRlbSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMudHJhbnNwb3NlQXJyYXkyRCA9IGZ1bmN0aW9uKGFycmF5KSB7CiAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybiBhcnJheTsKICAgICAgdmFyIG5ld0FycmF5ID0gYXJyYXlbMF0ubWFwKGZ1bmN0aW9uKGNvbCwgaSkgewogICAgICAgICAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbihyb3cpIHsKICAgICAgICAgICAgICByZXR1cm4gcm93W2ldCiAgICAgICAgICB9KQogICAgICB9KTsKICAgICAgcmV0dXJuIG5ld0FycmF5OwogIH07CiAgLy8gU3BsaXQgdmFsdWUgYXQgc3BsaXRDaGFyLCBidXQgYWxsb3cgc3BsaXRDaGFyIHRvIGJlIGVzY2FwZWQKICAvLyB1c2luZyBlc2NhcGVDaGFyLiBBbnkgb3RoZXIgY2hhcmFjdGVycyBlc2NhcGVkIGJ5IGVzY2FwZUNoYXIKICAvLyB3aWxsIGJlIGluY2x1ZGVkIGFzIHVzdWFsIChpbmNsdWRpbmcgZXNjYXBlQ2hhciBpdHNlbGYpLgogIGZ1bmN0aW9uIHNwbGl0V2l0aEVzY2FwZSh2YWx1ZSwgc3BsaXRDaGFyLCBlc2NhcGVDaGFyKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgIHZhciBjdXJyZW50UmVzdWx0ID0gIiI7CiAgICBmb3IgKHZhciBwb3MgPSAwOyBwb3MgPCB2YWx1ZS5sZW5ndGg7IHBvcysrKSB7CiAgICAgIGlmICghZXNjYXBlTW9kZSkgewogICAgICAgIGlmICh2YWx1ZVtwb3NdID09PSBzcGxpdENoYXIpIHsKICAgICAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW3Bvc10gPT09IGVzY2FwZUNoYXIpIHsKICAgICAgICAgIGVzY2FwZU1vZGUgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJyZW50UmVzdWx0ICs9IHZhbHVlW3Bvc107CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICBlc2NhcGVNb2RlID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChjdXJyZW50UmVzdWx0ICE9PSAiIikgewogICAgICByZXN1bHRzLnB1c2goY3VycmVudFJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9CiAgLy8gRnVuY3Rpb24gYXV0aG9yZWQgYnkgWWlodWkvSkogQWxsYWlyZQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlciA9IGZ1bmN0aW9uKG8sIG1lbWJlcikgewogICAgdmFyIHBhcnRzID0gc3BsaXRXaXRoRXNjYXBlKG1lbWJlciwgJy4nLCAnXFwnKTsKICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07CiAgICAgIC8vIHBhcnQgbWF5IGJlIGEgY2hhcmFjdGVyIG9yICdudW1lcmljJyBtZW1iZXIgbmFtZQogICAgICBpZiAobyAhPT0gbnVsbCAmJiB0eXBlb2YgbyA9PT0gIm9iamVjdCIgJiYgcGFydCBpbiBvKSB7CiAgICAgICAgaWYgKGkgPT0gKGwgLSAxKSkgeyAvLyBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSB0aGVuIGV2YWx1bGF0ZQogICAgICAgICAgaWYgKHR5cGVvZiBvW3BhcnRdID09PSAic3RyaW5nIikKICAgICAgICAgICAgb1twYXJ0XSA9IGV2YWwoIigiICsgb1twYXJ0XSArICIpIik7CiAgICAgICAgfSBlbHNlIHsgLy8gb3RoZXJ3aXNlIGNvbnRpbnVlIHRvIG5leHQgZW1iZWRkZWQgb2JqZWN0CiAgICAgICAgICBvID0gb1twYXJ0XTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9OwoKICAvLyBSZXRyaWV2ZSB0aGUgSFRNTFdpZGdldCBpbnN0YW5jZSAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlIG9mIGFuCiAgLy8gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCwgb3IgbnVsbCBpZiBub25lLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGVsKSB7CiAgICByZXR1cm4gZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpOwogIH07CgogIC8vIEZpbmRzIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzY29wZSB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLAogIC8vIGFuZCByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YKICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGVsZW1lbnQsIGlmIGFueS4gSWYgbm8gZWxlbWVudCBtYXRjaGVzIHRoZQogIC8vIHNlbGVjdG9yLCBvciB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBoYXMgbm8gSFRNTFdpZGdldAogIC8vIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBpdCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIGVsID0gc2NvcGUucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CiAgICBpZiAoZWwgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKGVsKTsKICAgIH0KICB9OwoKICAvLyBGaW5kcyBhbGwgZWxlbWVudHMgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yLCBhbmQKICAvLyByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlcyAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlcyBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50cywgaW4gYW4gYXJyYXkuIElmIGVsZW1lbnRzIHRoYXQKICAvLyBtYXRjaCB0aGUgc2VsZWN0b3IgZG9uJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIEhUTUxXaWRnZXQKICAvLyBpbnN0YW5jZSwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgY29udGFpbiBudWxscy4KICAvLwogIC8vIFRoZSBzY29wZSBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIHdpbmRvdy5kb2N1bWVudC4KICB3aW5kb3cuSFRNTFdpZGdldHMuZmluZEFsbCA9IGZ1bmN0aW9uKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICBzZWxlY3RvciA9IHNjb3BlOwogICAgICBzY29wZSA9IGRvY3VtZW50OwogICAgfQoKICAgIHZhciBub2RlcyA9IHNjb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0cy5wdXNoKHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZShub2Rlc1tpXSkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfTsKCiAgdmFyIHBvc3RSZW5kZXJIYW5kbGVycyA9IFtdOwogIGZ1bmN0aW9uIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpIHsKICAgIHdoaWxlIChwb3N0UmVuZGVySGFuZGxlcnMubGVuZ3RoKSB7CiAgICAgIHZhciBoYW5kbGVyID0gcG9zdFJlbmRlckhhbmRsZXJzLnNoaWZ0KCk7CiAgICAgIGlmIChoYW5kbGVyKSB7CiAgICAgICAgaGFuZGxlcigpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZWdpc3RlciB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUKICAvLyBuZXh0IHRpbWUgc3RhdGljIHdpZGdldHMgYXJlIHJlbmRlcmVkLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICBwb3N0UmVuZGVySGFuZGxlcnMucHVzaChjYWxsYmFjayk7CiAgfTsKCiAgLy8gVGFrZXMgYSBuZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbiwgYW5kIHJldHVybnMgYW4KICAvLyBvbGQtc3R5bGUgY2xhc3MtYm91bmQgZGVmaW5pdGlvbi4gVGhpcyBzYXZlcyB1cyBmcm9tIGhhdmluZwogIC8vIHRvIHJld3JpdGUgYWxsIHRoZSBsb2dpYyBpbiB0aGlzIGZpbGUgdG8gYWNjb21vZGF0ZSBib3RoCiAgLy8gdHlwZXMgb2YgZGVmaW5pdGlvbnMuCiAgZnVuY3Rpb24gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmbikgewogICAgdmFyIHJlc3VsdCA9IHsKICAgICAgbmFtZTogZGVmbi5uYW1lLAogICAgICB0eXBlOiBkZWZuLnR5cGUsCiAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgcmV0dXJuIGRlZm4uZmFjdG9yeShlbCwgd2lkdGgsIGhlaWdodCk7CiAgICAgIH0sCiAgICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgeCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVuZGVyVmFsdWUoeCk7CiAgICAgIH0sCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7CiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgfQogICAgfTsKCiAgICBpZiAoZGVmbi5maW5kKQogICAgICByZXN1bHQuZmluZCA9IGRlZm4uZmluZDsKICAgIGlmIChkZWZuLnJlbmRlckVycm9yKQogICAgICByZXN1bHQucmVuZGVyRXJyb3IgPSBkZWZuLnJlbmRlckVycm9yOwogICAgaWYgKGRlZm4uY2xlYXJFcnJvcikKICAgICAgcmVzdWx0LmNsZWFyRXJyb3IgPSBkZWZuLmNsZWFyRXJyb3I7CgogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0pKCk7Cgo=\"></script>\n",
"<script title=\"jquery\" src=\"data:application/javascript;base64,LyohIGpRdWVyeSB2MS4xMS4xIHwgKGMpIDIwMDUsIDIwMTQgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KIWZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YS5kb2N1bWVudD9iKGEsITApOmZ1bmN0aW9uKGEpe2lmKCFhLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiBiKGEpfTpiKGEpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQ9Yy5zbGljZSxlPWMuY29uY2F0LGY9Yy5wdXNoLGc9Yy5pbmRleE9mLGg9e30saT1oLnRvU3RyaW5nLGo9aC5oYXNPd25Qcm9wZXJ0eSxrPXt9LGw9IjEuMTEuMSIsbT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgbS5mbi5pbml0KGEsYil9LG49L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLG89L14tbXMtLyxwPS8tKFtcZGEtel0pL2dpLHE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50b1VwcGVyQ2FzZSgpfTttLmZuPW0ucHJvdG90eXBlPXtqcXVlcnk6bCxjb25zdHJ1Y3RvcjptLHNlbGVjdG9yOiIiLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZC5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/MD5hP3RoaXNbYSt0aGlzLmxlbmd0aF06dGhpc1thXTpkLmNhbGwodGhpcyl9LHB1c2hTdGFjazpmdW5jdGlvbihhKXt2YXIgYj1tLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gYi5wcmV2T2JqZWN0PXRoaXMsYi5jb250ZXh0PXRoaXMuY29udGV4dCxifSxlYWNoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uZWFjaCh0aGlzLGEsYil9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobS5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubGVuZ3RoLGM9K2ErKDA+YT9iOjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhjPj0wJiZiPmM/W3RoaXNbY11dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpmLHNvcnQ6Yy5zb3J0LHNwbGljZTpjLnNwbGljZX0sbS5leHRlbmQ9bS5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsZz1hcmd1bWVudHNbMF18fHt9LGg9MSxpPWFyZ3VtZW50cy5sZW5ndGgsaj0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsrKSwib2JqZWN0Ij09dHlwZW9mIGd8fG0uaXNGdW5jdGlvbihnKXx8KGc9e30pLGg9PT1pJiYoZz10aGlzLGgtLSk7aT5oO2grKylpZihudWxsIT0oZT1hcmd1bWVudHNbaF0pKWZvcihkIGluIGUpYT1nW2RdLGM9ZVtkXSxnIT09YyYmKGomJmMmJihtLmlzUGxhaW5PYmplY3QoYyl8fChiPW0uaXNBcnJheShjKSkpPyhiPyhiPSExLGY9YSYmbS5pc0FycmF5KGEpP2E6W10pOmY9YSYmbS5pc1BsYWluT2JqZWN0KGEpP2E6e30sZ1tkXT1tLmV4dGVuZChqLGYsYykpOnZvaWQgMCE9PWMmJihnW2RdPWMpKTtyZXR1cm4gZ30sbS5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKGwrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09PW0udHlwZShhKX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iYXJyYXkiPT09bS50eXBlKGEpfSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4hbS5pc0FycmF5KGEpJiZhLXBhcnNlRmxvYXQoYSk+PTB9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7dmFyIGI7Zm9yKGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtpZighYXx8Im9iamVjdCIhPT1tLnR5cGUoYSl8fGEubm9kZVR5cGV8fG0uaXNXaW5kb3coYSkpcmV0dXJuITE7dHJ5e2lmKGEuY29uc3RydWN0b3ImJiFqLmNhbGwoYSwiY29uc3RydWN0b3IiKSYmIWouY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKGMpe3JldHVybiExfWlmKGsub3duTGFzdClmb3IoYiBpbiBhKXJldHVybiBqLmNhbGwoYSxiKTtmb3IoYiBpbiBhKTtyZXR1cm4gdm9pZCAwPT09Ynx8ai5jYWxsKGEsYil9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/YSsiIjoib2JqZWN0Ij09dHlwZW9mIGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBhP2hbaS5jYWxsKGEpXXx8Im9iamVjdCI6dHlwZW9mIGF9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYil7YiYmbS50cmltKGIpJiYoYS5leGVjU2NyaXB0fHxmdW5jdGlvbihiKXthLmV2YWwuY2FsbChhLGIpfSkoYil9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKG8sIm1zLSIpLnJlcGxhY2UocCxxKX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yi50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlPTAsZj1hLmxlbmd0aCxnPXIoYSk7aWYoYyl7aWYoZyl7Zm9yKDtmPmU7ZSsrKWlmKGQ9Yi5hcHBseShhW2VdLGMpLGQ9PT0hMSlicmVha31lbHNlIGZvcihlIGluIGEpaWYoZD1iLmFwcGx5KGFbZV0sYyksZD09PSExKWJyZWFrfWVsc2UgaWYoZyl7Zm9yKDtmPmU7ZSsrKWlmKGQ9Yi5jYWxsKGFbZV0sZSxhW2VdKSxkPT09ITEpYnJlYWt9ZWxzZSBmb3IoZSBpbiBhKWlmKGQ9Yi5jYWxsKGFbZV0sZSxhW2VdKSxkPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6KGErIiIpLnJlcGxhY2UobiwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO3JldHVybiBudWxsIT1hJiYocihPYmplY3QoYSkpP20ubWVyZ2UoYywic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEpOmYuY2FsbChjLGEpKSxjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZihiKXtpZihnKXJldHVybiBnLmNhbGwoYixhLGMpO2ZvcihkPWIubGVuZ3RoLGM9Yz8wPmM/TWF0aC5tYXgoMCxkK2MpOmM6MDtkPmM7YysrKWlmKGMgaW4gYiYmYltjXT09PWEpcmV0dXJuIGN9cmV0dXJuLTF9LG1lcmdlOmZ1bmN0aW9uKGEsYil7dmFyIGM9K2IubGVuZ3RoLGQ9MCxlPWEubGVuZ3RoO3doaWxlKGM+ZClhW2UrK109YltkKytdO2lmKGMhPT1jKXdoaWxlKHZvaWQgMCE9PWJbZF0pYVtlKytdPWJbZCsrXTtyZXR1cm4gYS5sZW5ndGg9ZSxhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQsZT1bXSxmPTAsZz1hLmxlbmd0aCxoPSFjO2c+ZjtmKyspZD0hYihhW2ZdLGYpLGQhPT1oJiZlLnB1c2goYVtmXSk7cmV0dXJuIGV9LG1hcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZj0wLGc9YS5sZW5ndGgsaD1yKGEpLGk9W107aWYoaClmb3IoO2c+ZjtmKyspZD1iKGFbZl0sZixjKSxudWxsIT1kJiZpLnB1c2goZCk7ZWxzZSBmb3IoZiBpbiBhKWQ9YihhW2ZdLGYsYyksbnVsbCE9ZCYmaS5wdXNoKGQpO3JldHVybiBlLmFwcGx5KFtdLGkpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGY7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiJiYoZj1hW2JdLGI9YSxhPWYpLG0uaXNGdW5jdGlvbihhKT8oYz1kLmNhbGwoYXJndW1lbnRzLDIpLGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShifHx0aGlzLGMuY29uY2F0KGQuY2FsbChhcmd1bWVudHMpKSl9LGUuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxtLmd1aWQrKyxlKTp2b2lkIDB9LG5vdzpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0sc3VwcG9ydDprfSksbS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7aFsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiByKGEpe3ZhciBiPWEubGVuZ3RoLGM9bS50eXBlKGEpO3JldHVybiJmdW5jdGlvbiI9PT1jfHxtLmlzV2luZG93KGEpPyExOjE9PT1hLm5vZGVUeXBlJiZiPyEwOiJhcnJheSI9PT1jfHwwPT09Ynx8Im51bWJlciI9PXR5cGVvZiBiJiZiPjAmJmItMSBpbiBhfXZhciBzPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU9InNpenpsZSIrLW5ldyBEYXRlLHY9YS5kb2N1bWVudCx3PTAseD0wLHk9Z2IoKSx6PWdiKCksQT1nYigpLEI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPSJ1bmRlZmluZWQiLEQ9MTw8MzEsRT17fS5oYXNPd25Qcm9wZXJ0eSxGPVtdLEc9Ri5wb3AsSD1GLnB1c2gsST1GLnB1c2gsSj1GLnNsaWNlLEs9Ri5pbmRleE9mfHxmdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPXRoaXMubGVuZ3RoO2M+YjtiKyspaWYodGhpc1tiXT09PWEpcmV0dXJuIGI7cmV0dXJuLTF9LEw9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixNPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixOPSIoPzpcXFxcLnxbXFx3LV18W15cXHgwMC1cXHhhMF0pKyIsTz1OLnJlcGxhY2UoInciLCJ3IyIpLFA9IlxcWyIrTSsiKigiK04rIikoPzoiK00rIiooWypeJHwhfl0/PSkiK00rIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitPKyIpKXwpIitNKyIqXFxdIixRPSI6KCIrTisiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrUCsiKSopfC4qKVxcKXwpIixSPW5ldyBSZWdFeHAoIl4iK00rIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTSsiKyQiLCJnIiksUz1uZXcgUmVnRXhwKCJeIitNKyIqLCIrTSsiKiIpLFQ9bmV3IFJlZ0V4cCgiXiIrTSsiKihbPit+XXwiK00rIikiK00rIioiKSxVPW5ldyBSZWdFeHAoIj0iK00rIiooW15cXF0nXCJdKj8pIitNKyIqXFxdIiwiZyIpLFY9bmV3IFJlZ0V4cChRKSxXPW5ldyBSZWdFeHAoIl4iK08rIiQiKSxYPXtJRDpuZXcgUmVnRXhwKCJeIygiK04rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTisiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTi5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrUCksUFNFVURPOm5ldyBSZWdFeHAoIl4iK1EpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK0wrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitNKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxaPS9eaFxkJC9pLCQ9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLF89L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxhYj0vWyt+XS8sYmI9Lyd8XFwvZyxjYj1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIsImlnIiksZGI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9O3RyeXtJLmFwcGx5KEY9Si5jYWxsKHYuY2hpbGROb2Rlcyksdi5jaGlsZE5vZGVzKSxGW3YuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGViKXtJPXthcHBseTpGLmxlbmd0aD9mdW5jdGlvbihhLGIpe0guYXBwbHkoYSxKLmNhbGwoYikpfTpmdW5jdGlvbihhLGIpe3ZhciBjPWEubGVuZ3RoLGQ9MDt3aGlsZShhW2MrK109YltkKytdKTthLmxlbmd0aD1jLTF9fX1mdW5jdGlvbiBmYihhLGIsZCxlKXt2YXIgZixoLGosayxsLG8scixzLHcseDtpZigoYj9iLm93bmVyRG9jdW1lbnR8fGI6dikhPT1uJiZtKGIpLGI9Ynx8bixkPWR8fFtdLCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIGQ7aWYoMSE9PShrPWIubm9kZVR5cGUpJiY5IT09aylyZXR1cm5bXTtpZihwJiYhZSl7aWYoZj1fLmV4ZWMoYSkpaWYoaj1mWzFdKXtpZig5PT09ayl7aWYoaD1iLmdldEVsZW1lbnRCeUlkKGopLCFofHwhaC5wYXJlbnROb2RlKXJldHVybiBkO2lmKGguaWQ9PT1qKXJldHVybiBkLnB1c2goaCksZH1lbHNlIGlmKGIub3duZXJEb2N1bWVudCYmKGg9Yi5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGopKSYmdChiLGgpJiZoLmlkPT09ailyZXR1cm4gZC5wdXNoKGgpLGR9ZWxzZXtpZihmWzJdKXJldHVybiBJLmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigoaj1mWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEkuYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaikpLGR9aWYoYy5xc2EmJighcXx8IXEudGVzdChhKSkpe2lmKHM9cj11LHc9Yix4PTk9PT1rJiZhLDE9PT1rJiYib2JqZWN0IiE9PWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7bz1nKGEpLChyPWIuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXIucmVwbGFjZShiYiwiXFwkJiIpOmIuc2V0QXR0cmlidXRlKCJpZCIscykscz0iW2lkPSciK3MrIiddICIsbD1vLmxlbmd0aDt3aGlsZShsLS0pb1tsXT1zK3FiKG9bbF0pO3c9YWIudGVzdChhKSYmb2IoYi5wYXJlbnROb2RlKXx8Yix4PW8uam9pbigiLCIpfWlmKHgpdHJ5e3JldHVybiBJLmFwcGx5KGQsdy5xdWVyeVNlbGVjdG9yQWxsKHgpKSxkfWNhdGNoKHkpe31maW5hbGx5e3J8fGIucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGkoYS5yZXBsYWNlKFIsIiQxIiksYixkLGUpfWZ1bmN0aW9uIGdiKCl7dmFyIGE9W107ZnVuY3Rpb24gYihjLGUpe3JldHVybiBhLnB1c2goYysiICIpPmQuY2FjaGVMZW5ndGgmJmRlbGV0ZSBiW2Euc2hpZnQoKV0sYltjKyIgIl09ZX1yZXR1cm4gYn1mdW5jdGlvbiBoYihhKXtyZXR1cm4gYVt1XT0hMCxhfWZ1bmN0aW9uIGliKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEhYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24gamIoYSxiKXt2YXIgYz1hLnNwbGl0KCJ8IiksZT1hLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRySGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24ga2IoYSxiKXt2YXIgYz1iJiZhLGQ9YyYmMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiYofmIuc291cmNlSW5kZXh8fEQpLSh+YS5zb3VyY2VJbmRleHx8RCk7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxlKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0xfWZ1bmN0aW9uIGxiKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWMmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG1iKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1jfHwiYnV0dG9uIj09PWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBuYihhKXtyZXR1cm4gaGIoZnVuY3Rpb24oYil7cmV0dXJuIGI9K2IsaGIoZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10sYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tlXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBvYihhKXtyZXR1cm4gYSYmdHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1DJiZhfWM9ZmIuc3VwcG9ydD17fSxmPWZiLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1lbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj8iSFRNTCIhPT1iLm5vZGVOYW1lOiExfSxtPWZiLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe3ZhciBiLGU9YT9hLm93bmVyRG9jdW1lbnR8fGE6dixnPWUuZGVmYXVsdFZpZXc7cmV0dXJuIGUhPT1uJiY5PT09ZS5ub2RlVHlwZSYmZS5kb2N1bWVudEVsZW1lbnQ/KG49ZSxvPWUuZG9jdW1lbnRFbGVtZW50LHA9IWYoZSksZyYmZyE9PWcudG9wJiYoZy5hZGRFdmVudExpc3RlbmVyP2cuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixmdW5jdGlvbigpe20oKX0sITEpOmcuYXR0YWNoRXZlbnQmJmcuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixmdW5jdGlvbigpe20oKX0pKSxjLmF0dHJpYnV0ZXM9aWIoZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2xhc3NOYW1lPSJpIiwhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksYy5nZXRFbGVtZW50c0J5VGFnTmFtZT1pYihmdW5jdGlvbihhKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlLmNyZWF0ZUNvbW1lbnQoIiIpKSwhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT0kLnRlc3QoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSYmaWIoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdhJz48L2Rpdj48ZGl2IGNsYXNzPSdhIGknPjwvZGl2PiIsYS5maXJzdENoaWxkLmNsYXNzTmFtZT0iaSIsMj09PWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaSIpLmxlbmd0aH0pLGMuZ2V0QnlJZD1pYihmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChhKS5pZD11LCFlLmdldEVsZW1lbnRzQnlOYW1lfHwhZS5nZXRFbGVtZW50c0J5TmFtZSh1KS5sZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRCeUlkIT09QyYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50QnlJZChhKTtyZXR1cm4gYyYmYy5wYXJlbnROb2RlP1tjXTpbXX19LGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYixkYik7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaWQiKT09PWJ9fSk6KGRlbGV0ZSBkLmZpbmQuSUQsZC5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKGNiLGRiKTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGM9dHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSE9PUMmJmEuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gYyYmYy52YWx1ZT09PWJ9fSksZC5maW5kLlRBRz1jLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGEsYil7cmV0dXJuIHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09Qz9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOnZvaWQgMH06ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9MCxmPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSk7aWYoIioiPT09YSl7d2hpbGUoYz1mW2UrK10pMT09PWMubm9kZVR5cGUmJmQucHVzaChjKTtyZXR1cm4gZH1yZXR1cm4gZn0sZC5maW5kLkNMQVNTPWMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oYSxiKXtyZXR1cm4gdHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PUMmJnA/Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT0kLnRlc3QoZS5xdWVyeVNlbGVjdG9yQWxsKSkmJihpYihmdW5jdGlvbihhKXthLmlubmVySFRNTD0iPHNlbGVjdCBtc2FsbG93Y2xpcD0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NsaXBePScnXSIpLmxlbmd0aCYmcS5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8cS5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK0wrIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIil9KSxpYihmdW5jdGlvbihhKXt2YXIgYj1lLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Yi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJoaWRkZW4iKSxhLmFwcGVuZENoaWxkKGIpLnNldEF0dHJpYnV0ZSgibmFtZSIsIkQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPWRdIikubGVuZ3RoJiZxLnB1c2goIm5hbWUiK00rIipbKl4kfCF+XT89IiksYS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aHx8cS5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGEucXVlcnlTZWxlY3RvckFsbCgiKiw6eCIpLHEucHVzaCgiLC4qOiIpfSkpLChjLm1hdGNoZXNTZWxlY3Rvcj0kLnRlc3Qocz1vLm1hdGNoZXN8fG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxvLm1vek1hdGNoZXNTZWxlY3Rvcnx8by5vTWF0Y2hlc1NlbGVjdG9yfHxvLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJmliKGZ1bmN0aW9uKGEpe2MuZGlzY29ubmVjdGVkTWF0Y2g9cy5jYWxsKGEsImRpdiIpLHMuY2FsbChhLCJbcyE9JyddOngiKSxyLnB1c2goIiE9IixRKX0pLHE9cS5sZW5ndGgmJm5ldyBSZWdFeHAocS5qb2luKCJ8IikpLHI9ci5sZW5ndGgmJm5ldyBSZWdFeHAoci5qb2luKCJ8IikpLGI9JC50ZXN0KG8uY29tcGFyZURvY3VtZW50UG9zaXRpb24pLHQ9Ynx8JC50ZXN0KG8uY29udGFpbnMpP2Z1bmN0aW9uKGEsYil7dmFyIGM9OT09PWEubm9kZVR5cGU/YS5kb2N1bWVudEVsZW1lbnQ6YSxkPWImJmIucGFyZW50Tm9kZTtyZXR1cm4gYT09PWR8fCEoIWR8fDEhPT1kLm5vZGVUeXBlfHwhKGMuY29udGFpbnM/Yy5jb250YWlucyhkKTphLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQpKSl9OmZ1bmN0aW9uKGEsYil7aWYoYil3aGlsZShiPWIucGFyZW50Tm9kZSlpZihiPT09YSlyZXR1cm4hMDtyZXR1cm4hMX0sQj1iP2Z1bmN0aW9uKGEsYil7aWYoYT09PWIpcmV0dXJuIGw9ITAsMDt2YXIgZD0hYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gZD9kOihkPShhLm93bmVyRG9jdW1lbnR8fGEpPT09KGIub3duZXJEb2N1bWVudHx8Yik/YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKToxLDEmZHx8IWMuc29ydERldGFjaGVkJiZiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpPT09ZD9hPT09ZXx8YS5vd25lckRvY3VtZW50PT09diYmdCh2LGEpPy0xOmI9PT1lfHxiLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYik/MTprP0suY2FsbChrLGEpLUsuY2FsbChrLGIpOjA6NCZkPy0xOjEpfTpmdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGMsZD0wLGY9YS5wYXJlbnROb2RlLGc9Yi5wYXJlbnROb2RlLGg9W2FdLGk9W2JdO2lmKCFmfHwhZylyZXR1cm4gYT09PWU/LTE6Yj09PWU/MTpmPy0xOmc/MTprP0suY2FsbChrLGEpLUsuY2FsbChrLGIpOjA7aWYoZj09PWcpcmV0dXJuIGtiKGEsYik7Yz1hO3doaWxlKGM9Yy5wYXJlbnROb2RlKWgudW5zaGlmdChjKTtjPWI7d2hpbGUoYz1jLnBhcmVudE5vZGUpaS51bnNoaWZ0KGMpO3doaWxlKGhbZF09PT1pW2RdKWQrKztyZXR1cm4gZD9rYihoW2RdLGlbZF0pOmhbZF09PT12Py0xOmlbZF09PT12PzE6MH0sZSk6bn0sZmIubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBmYihhLG51bGwsbnVsbCxiKX0sZmIubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLGI9Yi5yZXBsYWNlKFUsIj0nJDEnXSIpLCEoIWMubWF0Y2hlc1NlbGVjdG9yfHwhcHx8ciYmci50ZXN0KGIpfHxxJiZxLnRlc3QoYikpKXRyeXt2YXIgZD1zLmNhbGwoYSxiKTtpZihkfHxjLmRpc2Nvbm5lY3RlZE1hdGNofHxhLmRvY3VtZW50JiYxMSE9PWEuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIGR9Y2F0Y2goZSl7fXJldHVybiBmYihiLG4sbnVsbCxbYV0pLmxlbmd0aD4wfSxmYi5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybihhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKSx0KGEsYil9LGZiLmF0dHI9ZnVuY3Rpb24oYSxiKXsoYS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSk7dmFyIGU9ZC5hdHRySGFuZGxlW2IudG9Mb3dlckNhc2UoKV0sZj1lJiZFLmNhbGwoZC5hdHRySGFuZGxlLGIudG9Mb3dlckNhc2UoKSk/ZShhLGIsIXApOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09Zj9mOmMuYXR0cmlidXRlc3x8IXA/YS5nZXRBdHRyaWJ1dGUoYik6KGY9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmZi5zcGVjaWZpZWQ/Zi52YWx1ZTpudWxsfSxmYi5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrYSl9LGZiLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZD1bXSxlPTAsZj0wO2lmKGw9IWMuZGV0ZWN0RHVwbGljYXRlcyxrPSFjLnNvcnRTdGFibGUmJmEuc2xpY2UoMCksYS5zb3J0KEIpLGwpe3doaWxlKGI9YVtmKytdKWI9PT1hW2ZdJiYoZT1kLnB1c2goZikpO3doaWxlKGUtLSlhLnNwbGljZShkW2VdLDEpfXJldHVybiBrPW51bGwsYX0sZT1mYi5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9IiIsZD0wLGY9YS5ub2RlVHlwZTtpZihmKXtpZigxPT09Znx8OT09PWZ8fDExPT09Zil7aWYoInN0cmluZyI9PXR5cGVvZiBhLnRleHRDb250ZW50KXJldHVybiBhLnRleHRDb250ZW50O2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyljKz1lKGEpfWVsc2UgaWYoMz09PWZ8fDQ9PT1mKXJldHVybiBhLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKGI9YVtkKytdKWMrPWUoYik7cmV0dXJuIGN9LGQ9ZmIuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86aGIsbWF0Y2g6WCxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS5yZXBsYWNlKGNiLGRiKSxhWzNdPShhWzNdfHxhWzRdfHxhWzVdfHwiIikucmVwbGFjZShjYixkYiksIn49Ij09PWFbMl0mJihhWzNdPSIgIithWzNdKyIgIiksYS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1hWzFdLnNsaWNlKDAsMyk/KGFbM118fGZiLmVycm9yKGFbMF0pLGFbNF09KyhhWzRdP2FbNV0rKGFbNl18fDEpOjIqKCJldmVuIj09PWFbM118fCJvZGQiPT09YVszXSkpLGFbNV09KyhhWzddK2FbOF18fCJvZGQiPT09YVszXSkpOmFbM10mJmZiLmVycm9yKGFbMF0pLGF9LFBTRVVETzpmdW5jdGlvbihhKXt2YXIgYixjPSFhWzZdJiZhWzJdO3JldHVybiBYLkNISUxELnRlc3QoYVswXSk/bnVsbDooYVszXT9hWzJdPWFbNF18fGFbNV18fCIiOmMmJlYudGVzdChjKSYmKGI9ZyhjLCEwKSkmJihiPWMuaW5kZXhPZigiKSIsYy5sZW5ndGgtYiktYy5sZW5ndGgpJiYoYVswXT1hWzBdLnNsaWNlKDAsYiksYVsyXT1jLnNsaWNlKDAsYikpLGEuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoY2IsZGIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09YT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yn19LENMQVNTOmZ1bmN0aW9uKGEpe3ZhciBiPXlbYSsiICJdO3JldHVybiBifHwoYj1uZXcgUmVnRXhwKCIoXnwiK00rIikiK2ErIigiK00rInwkKSIpKSYmeShhLGZ1bmN0aW9uKGEpe3JldHVybiBiLnRlc3QoInN0cmluZyI9PXR5cGVvZiBhLmNsYXNzTmFtZSYmYS5jbGFzc05hbWV8fHR5cGVvZiBhLmdldEF0dHJpYnV0ZSE9PUMmJmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBlPWZiLmF0dHIoZCxhKTtyZXR1cm4gbnVsbD09ZT8iIT0iPT09YjpiPyhlKz0iIiwiPSI9PT1iP2U9PT1jOiIhPSI9PT1iP2UhPT1jOiJePSI9PT1iP2MmJjA9PT1lLmluZGV4T2YoYyk6Iio9Ij09PWI/YyYmZS5pbmRleE9mKGMpPi0xOiIkPSI9PT1iP2MmJmUuc2xpY2UoLWMubGVuZ3RoKT09PWM6In49Ij09PWI/KCIgIitlKyIgIikuaW5kZXhPZihjKT4tMToifD0iPT09Yj9lPT09Y3x8ZS5zbGljZSgwLGMubGVuZ3RoKzEpPT09YysiLSI6ITEpOiEwfX0sQ0hJTEQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj0ibnRoIiE9PWEuc2xpY2UoMCwzKSxnPSJsYXN0IiE9PWEuc2xpY2UoLTQpLGg9Im9mLXR5cGUiPT09YjtyZXR1cm4gMT09PWQmJjA9PT1lP2Z1bmN0aW9uKGEpe3JldHVybiEhYS5wYXJlbnROb2RlfTpmdW5jdGlvbihiLGMsaSl7dmFyIGosayxsLG0sbixvLHA9ZiE9PWc/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixxPWIucGFyZW50Tm9kZSxyPWgmJmIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxzPSFpJiYhaDtpZihxKXtpZihmKXt3aGlsZShwKXtsPWI7d2hpbGUobD1sW3BdKWlmKGg/bC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09cjoxPT09bC5ub2RlVHlwZSlyZXR1cm4hMTtvPXA9Im9ubHkiPT09YSYmIW8mJiJuZXh0U2libGluZyJ9cmV0dXJuITB9aWYobz1bZz9xLmZpcnN0Q2hpbGQ6cS5sYXN0Q2hpbGRdLGcmJnMpe2s9cVt1XXx8KHFbdV09e30pLGo9a1thXXx8W10sbj1qWzBdPT09dyYmalsxXSxtPWpbMF09PT13JiZqWzJdLGw9biYmcS5jaGlsZE5vZGVzW25dO3doaWxlKGw9KytuJiZsJiZsW3BdfHwobT1uPTApfHxvLnBvcCgpKWlmKDE9PT1sLm5vZGVUeXBlJiYrK20mJmw9PT1iKXtrW2FdPVt3LG4sbV07YnJlYWt9fWVsc2UgaWYocyYmKGo9KGJbdV18fChiW3VdPXt9KSlbYV0pJiZqWzBdPT09dyltPWpbMV07ZWxzZSB3aGlsZShsPSsrbiYmbCYmbFtwXXx8KG09bj0wKXx8by5wb3AoKSlpZigoaD9sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1yOjE9PT1sLm5vZGVUeXBlKSYmKyttJiYocyYmKChsW3VdfHwobFt1XT17fSkpW2FdPVt3LG1dKSxsPT09YikpYnJlYWs7cmV0dXJuIG0tPWUsbT09PWR8fG0lZD09PTAmJm0vZD49MH19fSxQU0VVRE86ZnVuY3Rpb24oYSxiKXt2YXIgYyxlPWQucHNldWRvc1thXXx8ZC5zZXRGaWx0ZXJzW2EudG9Mb3dlckNhc2UoKV18fGZiLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrYSk7cmV0dXJuIGVbdV0/ZShiKTplLmxlbmd0aD4xPyhjPVthLGEsIiIsYl0sZC5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSk/aGIoZnVuY3Rpb24oYSxjKXt2YXIgZCxmPWUoYSxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSlkPUsuY2FsbChhLGZbZ10pLGFbZF09IShjW2RdPWZbZ10pfSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSwwLGMpfSk6ZX19LHBzZXVkb3M6e25vdDpoYihmdW5jdGlvbihhKXt2YXIgYj1bXSxjPVtdLGQ9aChhLnJlcGxhY2UoUiwiJDEiKSk7cmV0dXJuIGRbdV0/aGIoZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSkoZj1nW2hdKSYmKGFbaF09IShiW2hdPWYpKX0pOmZ1bmN0aW9uKGEsZSxmKXtyZXR1cm4gYlswXT1hLGQoYixudWxsLGYsYyksIWMucG9wKCl9fSksaGFzOmhiKGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZmIoYSxiKS5sZW5ndGg+MH19KSxjb250YWluczpoYihmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuKGIudGV4dENvbnRlbnR8fGIuaW5uZXJUZXh0fHxlKGIpKS5pbmRleE9mKGEpPi0xfX0pLGxhbmc6aGIoZnVuY3Rpb24oYSl7cmV0dXJuIFcudGVzdChhfHwiIil8fGZiLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2EpLGE9YS5yZXBsYWNlKGNiLGRiKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGIpe3ZhciBjO2RvIGlmKGM9cD9iLmxhbmc6Yi5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fGIuZ2V0QXR0cmlidXRlKCJsYW5nIikpcmV0dXJuIGM9Yy50b0xvd2VyQ2FzZSgpLGM9PT1hfHwwPT09Yy5pbmRleE9mKGErIi0iKTt3aGlsZSgoYj1iLnBhcmVudE5vZGUpJiYxPT09Yi5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGIpe3ZhciBjPWEubG9jYXRpb24mJmEubG9jYXRpb24uaGFzaDtyZXR1cm4gYyYmYy5zbGljZSgxKT09PWIuaWR9LHJvb3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1vfSxmb2N1czpmdW5jdGlvbihhKXtyZXR1cm4gYT09PW4uYWN0aXZlRWxlbWVudCYmKCFuLmhhc0ZvY3VzfHxuLmhhc0ZvY3VzKCkpJiYhIShhLnR5cGV8fGEuaHJlZnx8fmEudGFiSW5kZXgpfSxlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITF9LGRpc2FibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1iJiYhIWEuY2hlY2tlZHx8Im9wdGlvbiI9PT1iJiYhIWEuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LGEuc2VsZWN0ZWQ9PT0hMH0sZW1wdHk6ZnVuY3Rpb24oYSl7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWlmKGEubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGEpe3JldHVybiFkLnBzZXVkb3MuZW1wdHkoYSl9LGhlYWRlcjpmdW5jdGlvbihhKXtyZXR1cm4gWi50ZXN0KGEubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihhKXtyZXR1cm4gWS50ZXN0KGEubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1iJiYiYnV0dG9uIj09PWEudHlwZXx8ImJ1dHRvbiI9PT1ifSx0ZXh0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiJpbnB1dCI9PT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJiJ0ZXh0Ij09PWEudHlwZSYmKG51bGw9PShiPWEuZ2V0QXR0cmlidXRlKCJ0eXBlIikpfHwidGV4dCI9PT1iLnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpuYihmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6bmIoZnVuY3Rpb24oYSxiKXtyZXR1cm5bYi0xXX0pLGVxOm5iKGZ1bmN0aW9uKGEsYixjKXtyZXR1cm5bMD5jP2MrYjpjXX0pLGV2ZW46bmIoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxvZGQ6bmIoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MTtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxsdDpuYihmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzstLWQ+PTA7KWEucHVzaChkKTtyZXR1cm4gYX0pLGd0Om5iKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2MrYjpjOysrZDxiOylhLnB1c2goZCk7cmV0dXJuIGF9KX19LGQucHNldWRvcy5udGg9ZC5wc2V1ZG9zLmVxO2ZvcihiIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWQucHNldWRvc1tiXT1sYihiKTtmb3IoYiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KWQucHNldWRvc1tiXT1tYihiKTtmdW5jdGlvbiBwYigpe31wYi5wcm90b3R5cGU9ZC5maWx0ZXJzPWQucHNldWRvcyxkLnNldEZpbHRlcnM9bmV3IHBiLGc9ZmIudG9rZW5pemU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGYsZyxoLGksaixrPXpbYSsiICJdO2lmKGspcmV0dXJuIGI/MDprLnNsaWNlKDApO2g9YSxpPVtdLGo9ZC5wcmVGaWx0ZXI7d2hpbGUoaCl7KCFjfHwoZT1TLmV4ZWMoaCkpKSYmKGUmJihoPWguc2xpY2UoZVswXS5sZW5ndGgpfHxoKSxpLnB1c2goZj1bXSkpLGM9ITEsKGU9VC5leGVjKGgpKSYmKGM9ZS5zaGlmdCgpLGYucHVzaCh7dmFsdWU6Yyx0eXBlOmVbMF0ucmVwbGFjZShSLCIgIil9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtmb3IoZyBpbiBkLmZpbHRlcikhKGU9WFtnXS5leGVjKGgpKXx8altnXSYmIShlPWpbZ10oZSkpfHwoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZyxtYXRjaGVzOmV9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtpZighYylicmVha31yZXR1cm4gYj9oLmxlbmd0aDpoP2ZiLmVycm9yKGEpOnooYSxpKS5zbGljZSgwKX07ZnVuY3Rpb24gcWIoYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aCxkPSIiO2M+YjtiKyspZCs9YVtiXS52YWx1ZTtyZXR1cm4gZH1mdW5jdGlvbiByYihhLGIsYyl7dmFyIGQ9Yi5kaXIsZT1jJiYicGFyZW50Tm9kZSI9PT1kLGY9eCsrO3JldHVybiBiLmZpcnN0P2Z1bmN0aW9uKGIsYyxmKXt3aGlsZShiPWJbZF0paWYoMT09PWIubm9kZVR5cGV8fGUpcmV0dXJuIGEoYixjLGYpfTpmdW5jdGlvbihiLGMsZyl7dmFyIGgsaSxqPVt3LGZdO2lmKGcpe3doaWxlKGI9YltkXSlpZigoMT09PWIubm9kZVR5cGV8fGUpJiZhKGIsYyxnKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSl7aWYoaT1iW3VdfHwoYlt1XT17fSksKGg9aVtkXSkmJmhbMF09PT13JiZoWzFdPT09ZilyZXR1cm4galsyXT1oWzJdO2lmKGlbZF09aixqWzJdPWEoYixjLGcpKXJldHVybiEwfX19ZnVuY3Rpb24gc2IoYSl7cmV0dXJuIGEubGVuZ3RoPjE/ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWEubGVuZ3RoO3doaWxlKGUtLSlpZighYVtlXShiLGMsZCkpcmV0dXJuITE7cmV0dXJuITB9OmFbMF19ZnVuY3Rpb24gdGIoYSxiLGMpe2Zvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZT5kO2QrKylmYihhLGJbZF0sYyk7cmV0dXJuIGN9ZnVuY3Rpb24gdWIoYSxiLGMsZCxlKXtmb3IodmFyIGYsZz1bXSxoPTAsaT1hLmxlbmd0aCxqPW51bGwhPWI7aT5oO2grKykoZj1hW2hdKSYmKCFjfHxjKGYsZCxlKSkmJihnLnB1c2goZiksaiYmYi5wdXNoKGgpKTtyZXR1cm4gZ31mdW5jdGlvbiB2YihhLGIsYyxkLGUsZil7cmV0dXJuIGQmJiFkW3VdJiYoZD12YihkKSksZSYmIWVbdV0mJihlPXZiKGUsZikpLGhiKGZ1bmN0aW9uKGYsZyxoLGkpe3ZhciBqLGssbCxtPVtdLG49W10sbz1nLmxlbmd0aCxwPWZ8fHRiKGJ8fCIqIixoLm5vZGVUeXBlP1toXTpoLFtdKSxxPSFhfHwhZiYmYj9wOnViKHAsbSxhLGgsaSkscj1jP2V8fChmP2E6b3x8ZCk/W106ZzpxO2lmKGMmJmMocSxyLGgsaSksZCl7aj11YihyLG4pLGQoaixbXSxoLGkpLGs9ai5sZW5ndGg7d2hpbGUoay0tKShsPWpba10pJiYocltuW2tdXT0hKHFbbltrXV09bCkpfWlmKGYpe2lmKGV8fGEpe2lmKGUpe2o9W10saz1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJmoucHVzaChxW2tdPWwpO2UobnVsbCxyPVtdLGosaSl9az1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJihqPWU/Sy5jYWxsKGYsbCk6bVtrXSk+LTEmJihmW2pdPSEoZ1tqXT1sKSl9fWVsc2Ugcj11YihyPT09Zz9yLnNwbGljZShvLHIubGVuZ3RoKTpyKSxlP2UobnVsbCxnLHIsaSk6SS5hcHBseShnLHIpfSl9ZnVuY3Rpb24gd2IoYSl7Zm9yKHZhciBiLGMsZSxmPWEubGVuZ3RoLGc9ZC5yZWxhdGl2ZVthWzBdLnR5cGVdLGg9Z3x8ZC5yZWxhdGl2ZVsiICJdLGk9Zz8xOjAsaz1yYihmdW5jdGlvbihhKXtyZXR1cm4gYT09PWJ9LGgsITApLGw9cmIoZnVuY3Rpb24oYSl7cmV0dXJuIEsuY2FsbChiLGEpPi0xfSxoLCEwKSxtPVtmdW5jdGlvbihhLGMsZCl7cmV0dXJuIWcmJihkfHxjIT09ail8fCgoYj1jKS5ub2RlVHlwZT9rKGEsYyxkKTpsKGEsYyxkKSl9XTtmPmk7aSsrKWlmKGM9ZC5yZWxhdGl2ZVthW2ldLnR5cGVdKW09W3JiKHNiKG0pLGMpXTtlbHNle2lmKGM9ZC5maWx0ZXJbYVtpXS50eXBlXS5hcHBseShudWxsLGFbaV0ubWF0Y2hlcyksY1t1XSl7Zm9yKGU9KytpO2Y+ZTtlKyspaWYoZC5yZWxhdGl2ZVthW2VdLnR5cGVdKWJyZWFrO3JldHVybiB2YihpPjEmJnNiKG0pLGk+MSYmcWIoYS5zbGljZSgwLGktMSkuY29uY2F0KHt2YWx1ZToiICI9PT1hW2ktMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZShSLCIkMSIpLGMsZT5pJiZ3YihhLnNsaWNlKGksZSkpLGY+ZSYmd2IoYT1hLnNsaWNlKGUpKSxmPmUmJnFiKGEpKX1tLnB1c2goYyl9cmV0dXJuIHNiKG0pfWZ1bmN0aW9uIHhiKGEsYil7dmFyIGM9Yi5sZW5ndGg+MCxlPWEubGVuZ3RoPjAsZj1mdW5jdGlvbihmLGcsaCxpLGspe3ZhciBsLG0sbyxwPTAscT0iMCIscj1mJiZbXSxzPVtdLHQ9aix1PWZ8fGUmJmQuZmluZC5UQUcoIioiLGspLHY9dys9bnVsbD09dD8xOk1hdGgucmFuZG9tKCl8fC4xLHg9dS5sZW5ndGg7Zm9yKGsmJihqPWchPT1uJiZnKTtxIT09eCYmbnVsbCE9KGw9dVtxXSk7cSsrKXtpZihlJiZsKXttPTA7d2hpbGUobz1hW20rK10paWYobyhsLGcsaCkpe2kucHVzaChsKTticmVha31rJiYodz12KX1jJiYoKGw9IW8mJmwpJiZwLS0sZiYmci5wdXNoKGwpKX1pZihwKz1xLGMmJnEhPT1wKXttPTA7d2hpbGUobz1iW20rK10pbyhyLHMsZyxoKTtpZihmKXtpZihwPjApd2hpbGUocS0tKXJbcV18fHNbcV18fChzW3FdPUcuY2FsbChpKSk7cz11YihzKX1JLmFwcGx5KGkscyksayYmIWYmJnMubGVuZ3RoPjAmJnArYi5sZW5ndGg+MSYmZmIudW5pcXVlU29ydChpKX1yZXR1cm4gayYmKHc9dixqPXQpLHJ9O3JldHVybiBjP2hiKGYpOmZ9cmV0dXJuIGg9ZmIuY29tcGlsZT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1bXSxmPUFbYSsiICJdO2lmKCFmKXtifHwoYj1nKGEpKSxjPWIubGVuZ3RoO3doaWxlKGMtLSlmPXdiKGJbY10pLGZbdV0/ZC5wdXNoKGYpOmUucHVzaChmKTtmPUEoYSx4YihlLGQpKSxmLnNlbGVjdG9yPWF9cmV0dXJuIGZ9LGk9ZmIuc2VsZWN0PWZ1bmN0aW9uKGEsYixlLGYpe3ZhciBpLGosayxsLG0sbj0iZnVuY3Rpb24iPT10eXBlb2YgYSYmYSxvPSFmJiZnKGE9bi5zZWxlY3Rvcnx8YSk7aWYoZT1lfHxbXSwxPT09by5sZW5ndGgpe2lmKGo9b1swXT1vWzBdLnNsaWNlKDApLGoubGVuZ3RoPjImJiJJRCI9PT0oaz1qWzBdKS50eXBlJiZjLmdldEJ5SWQmJjk9PT1iLm5vZGVUeXBlJiZwJiZkLnJlbGF0aXZlW2pbMV0udHlwZV0pe2lmKGI9KGQuZmluZC5JRChrLm1hdGNoZXNbMF0ucmVwbGFjZShjYixkYiksYil8fFtdKVswXSwhYilyZXR1cm4gZTtuJiYoYj1iLnBhcmVudE5vZGUpLGE9YS5zbGljZShqLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1pPVgubmVlZHNDb250ZXh0LnRlc3QoYSk/MDpqLmxlbmd0aDt3aGlsZShpLS0pe2lmKGs9altpXSxkLnJlbGF0aXZlW2w9ay50eXBlXSlicmVhaztpZigobT1kLmZpbmRbbF0pJiYoZj1tKGsubWF0Y2hlc1swXS5yZXBsYWNlKGNiLGRiKSxhYi50ZXN0KGpbMF0udHlwZSkmJm9iKGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoai5zcGxpY2UoaSwxKSxhPWYubGVuZ3RoJiZxYihqKSwhYSlyZXR1cm4gSS5hcHBseShlLGYpLGU7YnJlYWt9fX1yZXR1cm4obnx8aChhLG8pKShmLGIsIXAsZSxhYi50ZXN0KGEpJiZvYihiLnBhcmVudE5vZGUpfHxiKSxlfSxjLnNvcnRTdGFibGU9dS5zcGxpdCgiIikuc29ydChCKS5qb2luKCIiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5zb3J0RGV0YWNoZWQ9aWIoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGliKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGpiKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmEuZ2V0QXR0cmlidXRlKGIsInR5cGUiPT09Yi50b0xvd2VyQ2FzZSgpPzE6Mil9KSxjLmF0dHJpYnV0ZXMmJmliKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGpiKCJ2YWx1ZSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3ZvaWQgMDphLmRlZmF1bHRWYWx1ZX0pLGliKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxqYihMLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92b2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxmYn0oYSk7bS5maW5kPXMsbS5leHByPXMuc2VsZWN0b3JzLG0uZXhwclsiOiJdPW0uZXhwci5wc2V1ZG9zLG0udW5pcXVlPXMudW5pcXVlU29ydCxtLnRleHQ9cy5nZXRUZXh0LG0uaXNYTUxEb2M9cy5pc1hNTCxtLmNvbnRhaW5zPXMuY29udGFpbnM7dmFyIHQ9bS5leHByLm1hdGNoLm5lZWRzQ29udGV4dCx1PS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sdj0vXi5bXjojXFtcLixdKiQvO2Z1bmN0aW9uIHcoYSxiLGMpe2lmKG0uaXNGdW5jdGlvbihiKSlyZXR1cm4gbS5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4hIWIuY2FsbChhLGQsYSkhPT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gbS5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1iIT09Y30pO2lmKCJzdHJpbmciPT10eXBlb2YgYil7aWYodi50ZXN0KGIpKXJldHVybiBtLmZpbHRlcihiLGEsYyk7Yj1tLmZpbHRlcihiLGEpfXJldHVybiBtLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gbS5pbkFycmF5KGEsYik+PTAhPT1jfSl9bS5maWx0ZXI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWJbMF07cmV0dXJuIGMmJihhPSI6bm90KCIrYSsiKSIpLDE9PT1iLmxlbmd0aCYmMT09PWQubm9kZVR5cGU/bS5maW5kLm1hdGNoZXNTZWxlY3RvcihkLGEpP1tkXTpbXTptLmZpbmQubWF0Y2hlcyhhLG0uZ3JlcChiLGZ1bmN0aW9uKGEpe3JldHVybiAxPT09YS5ub2RlVHlwZX0pKX0sbS5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXSxkPXRoaXMsZT1kLmxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIHRoaXMucHVzaFN0YWNrKG0oYSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGI9MDtlPmI7YisrKWlmKG0uY29udGFpbnMoZFtiXSx0aGlzKSlyZXR1cm4hMH0pKTtmb3IoYj0wO2U+YjtiKyspbS5maW5kKGEsZFtiXSxjKTtyZXR1cm4gYz10aGlzLnB1c2hTdGFjayhlPjE/bS51bmlxdWUoYyk6YyksYy5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2E6YSxjfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHcodGhpcyxhfHxbXSwhMSkpfSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHcodGhpcyxhfHxbXSwhMCkpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIXcodGhpcywic3RyaW5nIj09dHlwZW9mIGEmJnQudGVzdChhKT9tKGEpOmF8fFtdLCExKS5sZW5ndGh9fSk7dmFyIHgseT1hLmRvY3VtZW50LHo9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0qKSkkLyxBPW0uZm4uaW5pdD1mdW5jdGlvbihhLGIpe3ZhciBjLGQ7aWYoIWEpcmV0dXJuIHRoaXM7aWYoInN0cmluZyI9PXR5cGVvZiBhKXtpZihjPSI8Ij09PWEuY2hhckF0KDApJiYiPiI9PT1hLmNoYXJBdChhLmxlbmd0aC0xKSYmYS5sZW5ndGg+PTM/W251bGwsYSxudWxsXTp6LmV4ZWMoYSksIWN8fCFjWzFdJiZiKXJldHVybiFifHxiLmpxdWVyeT8oYnx8eCkuZmluZChhKTp0aGlzLmNvbnN0cnVjdG9yKGIpLmZpbmQoYSk7aWYoY1sxXSl7aWYoYj1iIGluc3RhbmNlb2YgbT9iWzBdOmIsbS5tZXJnZSh0aGlzLG0ucGFyc2VIVE1MKGNbMV0sYiYmYi5ub2RlVHlwZT9iLm93bmVyRG9jdW1lbnR8fGI6eSwhMCkpLHUudGVzdChjWzFdKSYmbS5pc1BsYWluT2JqZWN0KGIpKWZvcihjIGluIGIpbS5pc0Z1bmN0aW9uKHRoaXNbY10pP3RoaXNbY10oYltjXSk6dGhpcy5hdHRyKGMsYltjXSk7cmV0dXJuIHRoaXN9aWYoZD15LmdldEVsZW1lbnRCeUlkKGNbMl0pLGQmJmQucGFyZW50Tm9kZSl7aWYoZC5pZCE9PWNbMl0pcmV0dXJuIHguZmluZChhKTt0aGlzLmxlbmd0aD0xLHRoaXNbMF09ZH1yZXR1cm4gdGhpcy5jb250ZXh0PXksdGhpcy5zZWxlY3Rvcj1hLHRoaXN9cmV0dXJuIGEubm9kZVR5cGU/KHRoaXMuY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MSx0aGlzKTptLmlzRnVuY3Rpb24oYSk/InVuZGVmaW5lZCIhPXR5cGVvZiB4LnJlYWR5P3gucmVhZHkoYSk6YShtKToodm9pZCAwIT09YS5zZWxlY3RvciYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KSxtLm1ha2VBcnJheShhLHRoaXMpKX07QS5wcm90b3R5cGU9bS5mbix4PW0oeSk7dmFyIEI9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sQz17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTttLmV4dGVuZCh7ZGlyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlPWFbYl07d2hpbGUoZSYmOSE9PWUubm9kZVR5cGUmJih2b2lkIDA9PT1jfHwxIT09ZS5ub2RlVHlwZXx8IW0oZSkuaXMoYykpKTE9PT1lLm5vZGVUeXBlJiZkLnB1c2goZSksZT1lW2JdO3JldHVybiBkfSxzaWJsaW5nOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdO2E7YT1hLm5leHRTaWJsaW5nKTE9PT1hLm5vZGVUeXBlJiZhIT09YiYmYy5wdXNoKGEpO3JldHVybiBjfX0pLG0uZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oYSl7dmFyIGIsYz1tKGEsdGhpcyksZD1jLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2Q+YjtiKyspaWYobS5jb250YWlucyh0aGlzLGNbYl0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD0wLGU9dGhpcy5sZW5ndGgsZj1bXSxnPXQudGVzdChhKXx8InN0cmluZyIhPXR5cGVvZiBhP20oYSxifHx0aGlzLmNvbnRleHQpOjA7ZT5kO2QrKylmb3IoYz10aGlzW2RdO2MmJmMhPT1iO2M9Yy5wYXJlbnROb2RlKWlmKGMubm9kZVR5cGU8MTEmJihnP2cuaW5kZXgoYyk+LTE6MT09PWMubm9kZVR5cGUmJm0uZmluZC5tYXRjaGVzU2VsZWN0b3IoYyxhKSkpe2YucHVzaChjKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2soZi5sZW5ndGg+MT9tLnVuaXF1ZShmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP20uaW5BcnJheSh0aGlzWzBdLG0oYSkpOm0uaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobS51bmlxdWUobS5tZXJnZSh0aGlzLmdldCgpLG0oYSxiKSkpKX0sYWRkQmFjazpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09YT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihhKSl9fSk7ZnVuY3Rpb24gRChhLGIpe2RvIGE9YVtiXTt3aGlsZShhJiYxIT09YS5ub2RlVHlwZSk7cmV0dXJuIGF9bS5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiYxMSE9PWIubm9kZVR5cGU/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBtLmRpcihhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0uZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBEKGEsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIEQoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIG0uZGlyKGEsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIG0uZGlyKGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBtLmRpcihhLCJuZXh0U2libGluZyIsYyl9LHByZXZVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0uZGlyKGEsInByZXZpb3VzU2libGluZyIsYyl9LHNpYmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiBtLnNpYmxpbmcoKGEucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiBtLnNpYmxpbmcoYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIG0ubm9kZU5hbWUoYSwiaWZyYW1lIik/YS5jb250ZW50RG9jdW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDptLm1lcmdlKFtdLGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe20uZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIgZT1tLm1hcCh0aGlzLGIsYyk7cmV0dXJuIlVudGlsIiE9PWEuc2xpY2UoLTUpJiYoZD1jKSxkJiYic3RyaW5nIj09dHlwZW9mIGQmJihlPW0uZmlsdGVyKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihDW2FdfHwoZT1tLnVuaXF1ZShlKSksQi50ZXN0KGEpJiYoZT1lLnJldmVyc2UoKSkpLHRoaXMucHVzaFN0YWNrKGUpfX0pO3ZhciBFPS9cUysvZyxGPXt9O2Z1bmN0aW9uIEcoYSl7dmFyIGI9RlthXT17fTtyZXR1cm4gbS5lYWNoKGEubWF0Y2goRSl8fFtdLGZ1bmN0aW9uKGEsYyl7YltjXT0hMH0pLGJ9bS5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT0ic3RyaW5nIj09dHlwZW9mIGE/RlthXXx8RyhhKTptLmV4dGVuZCh7fSxhKTt2YXIgYixjLGQsZSxmLGcsaD1bXSxpPSFhLm9uY2UmJltdLGo9ZnVuY3Rpb24obCl7Zm9yKGM9YS5tZW1vcnkmJmwsZD0hMCxmPWd8fDAsZz0wLGU9aC5sZW5ndGgsYj0hMDtoJiZlPmY7ZisrKWlmKGhbZl0uYXBwbHkobFswXSxsWzFdKT09PSExJiZhLnN0b3BPbkZhbHNlKXtjPSExO2JyZWFrfWI9ITEsaCYmKGk/aS5sZW5ndGgmJmooaS5zaGlmdCgpKTpjP2g9W106ay5kaXNhYmxlKCkpfSxrPXthZGQ6ZnVuY3Rpb24oKXtpZihoKXt2YXIgZD1oLmxlbmd0aDshZnVuY3Rpb24gZihiKXttLmVhY2goYixmdW5jdGlvbihiLGMpe3ZhciBkPW0udHlwZShjKTsiZnVuY3Rpb24iPT09ZD9hLnVuaXF1ZSYmay5oYXMoYyl8fGgucHVzaChjKTpjJiZjLmxlbmd0aCYmInN0cmluZyIhPT1kJiZmKGMpfSl9KGFyZ3VtZW50cyksYj9lPWgubGVuZ3RoOmMmJihnPWQsaihjKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiBoJiZtLmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGEsYyl7dmFyIGQ7d2hpbGUoKGQ9bS5pbkFycmF5KGMsaCxkKSk+LTEpaC5zcGxpY2UoZCwxKSxiJiYoZT49ZCYmZS0tLGY+PWQmJmYtLSl9KSx0aGlzfSxoYXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/bS5pbkFycmF5KGEsaCk+LTE6ISghaHx8IWgubGVuZ3RoKX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gaD1bXSxlPTAsdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBoPWk9Yz12b2lkIDAsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4haH0sbG9jazpmdW5jdGlvbigpe3JldHVybiBpPXZvaWQgMCxjfHxrLmRpc2FibGUoKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4haX0sZmlyZVdpdGg6ZnVuY3Rpb24oYSxjKXtyZXR1cm4haHx8ZCYmIWl8fChjPWN8fFtdLGM9W2EsYy5zbGljZT9jLnNsaWNlKCk6Y10sYj9pLnB1c2goYyk6aihjKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBrLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZH19O3JldHVybiBrfSxtLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9W1sicmVzb2x2ZSIsImRvbmUiLG0uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsbS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIsbS5DYWxsYmFja3MoIm1lbW9yeSIpXV0sYz0icGVuZGluZyIsZD17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBtLkRlZmVycmVkKGZ1bmN0aW9uKGMpe20uZWFjaChiLGZ1bmN0aW9uKGIsZil7dmFyIGc9bS5pc0Z1bmN0aW9uKGFbYl0pJiZhW2JdO2VbZlsxXV0oZnVuY3Rpb24oKXt2YXIgYT1nJiZnLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthJiZtLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9hLnByb21pc2UoKS5kb25lKGMucmVzb2x2ZSkuZmFpbChjLnJlamVjdCkucHJvZ3Jlc3MoYy5ub3RpZnkpOmNbZlswXSsiV2l0aCJdKHRoaXM9PT1kP2MucHJvbWlzZSgpOnRoaXMsZz9bYV06YXJndW1lbnRzKX0pfSksYT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hP20uZXh0ZW5kKGEsZCk6ZH19LGU9e307cmV0dXJuIGQucGlwZT1kLnRoZW4sbS5lYWNoKGIsZnVuY3Rpb24oYSxmKXt2YXIgZz1mWzJdLGg9ZlszXTtkW2ZbMV1dPWcuYWRkLGgmJmcuYWRkKGZ1bmN0aW9uKCl7Yz1ofSxiWzFeYV1bMl0uZGlzYWJsZSxiWzJdWzJdLmxvY2spLGVbZlswXV09ZnVuY3Rpb24oKXtyZXR1cm4gZVtmWzBdKyJXaXRoIl0odGhpcz09PWU/ZDp0aGlzLGFyZ3VtZW50cyksdGhpc30sZVtmWzBdKyJXaXRoIl09Zy5maXJlV2l0aH0pLGQucHJvbWlzZShlKSxhJiZhLmNhbGwoZSxlKSxlfSx3aGVuOmZ1bmN0aW9uKGEpe3ZhciBiPTAsYz1kLmNhbGwoYXJndW1lbnRzKSxlPWMubGVuZ3RoLGY9MSE9PWV8fGEmJm0uaXNGdW5jdGlvbihhLnByb21pc2UpP2U6MCxnPTE9PT1mP2E6bS5EZWZlcnJlZCgpLGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmdW5jdGlvbihlKXtiW2FdPXRoaXMsY1thXT1hcmd1bWVudHMubGVuZ3RoPjE/ZC5jYWxsKGFyZ3VtZW50cyk6ZSxjPT09aT9nLm5vdGlmeVdpdGgoYixjKTotLWZ8fGcucmVzb2x2ZVdpdGgoYixjKX19LGksaixrO2lmKGU+MSlmb3IoaT1uZXcgQXJyYXkoZSksaj1uZXcgQXJyYXkoZSksaz1uZXcgQXJyYXkoZSk7ZT5iO2IrKyljW2JdJiZtLmlzRnVuY3Rpb24oY1tiXS5wcm9taXNlKT9jW2JdLnByb21pc2UoKS5kb25lKGgoYixrLGMpKS5mYWlsKGcucmVqZWN0KS5wcm9ncmVzcyhoKGIsaixpKSk6LS1mO3JldHVybiBmfHxnLnJlc29sdmVXaXRoKGssYyksZy5wcm9taXNlKCl9fSk7dmFyIEg7bS5mbi5yZWFkeT1mdW5jdGlvbihhKXtyZXR1cm4gbS5yZWFkeS5wcm9taXNlKCkuZG9uZShhKSx0aGlzfSxtLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9tLnJlYWR5V2FpdCsrOm0ucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXtpZihhPT09ITA/IS0tbS5yZWFkeVdhaXQ6IW0uaXNSZWFkeSl7aWYoIXkuYm9keSlyZXR1cm4gc2V0VGltZW91dChtLnJlYWR5KTttLmlzUmVhZHk9ITAsYSE9PSEwJiYtLW0ucmVhZHlXYWl0PjB8fChILnJlc29sdmVXaXRoKHksW21dKSxtLmZuLnRyaWdnZXJIYW5kbGVyJiYobSh5KS50cmlnZ2VySGFuZGxlcigicmVhZHkiKSxtKHkpLm9mZigicmVhZHkiKSkpfX19KTtmdW5jdGlvbiBJKCl7eS5hZGRFdmVudExpc3RlbmVyPyh5LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEosITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsSiwhMSkpOih5LmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEopLGEuZGV0YWNoRXZlbnQoIm9ubG9hZCIsSikpfWZ1bmN0aW9uIEooKXsoeS5hZGRFdmVudExpc3RlbmVyfHwibG9hZCI9PT1ldmVudC50eXBlfHwiY29tcGxldGUiPT09eS5yZWFkeVN0YXRlKSYmKEkoKSxtLnJlYWR5KCkpfW0ucmVhZHkucHJvbWlzZT1mdW5jdGlvbihiKXtpZighSClpZihIPW0uRGVmZXJyZWQoKSwiY29tcGxldGUiPT09eS5yZWFkeVN0YXRlKXNldFRpbWVvdXQobS5yZWFkeSk7ZWxzZSBpZih5LmFkZEV2ZW50TGlzdGVuZXIpeS5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixKLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLEosITEpO2Vsc2V7eS5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixKKSxhLmF0dGFjaEV2ZW50KCJvbmxvYWQiLEopO3ZhciBjPSExO3RyeXtjPW51bGw9PWEuZnJhbWVFbGVtZW50JiZ5LmRvY3VtZW50RWxlbWVudH1jYXRjaChkKXt9YyYmYy5kb1Njcm9sbCYmIWZ1bmN0aW9uIGUoKXtpZighbS5pc1JlYWR5KXt0cnl7Yy5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGEpe3JldHVybiBzZXRUaW1lb3V0KGUsNTApfUkoKSxtLnJlYWR5KCl9fSgpfXJldHVybiBILnByb21pc2UoYil9O3ZhciBLPSJ1bmRlZmluZWQiLEw7Zm9yKEwgaW4gbShrKSlicmVhaztrLm93bkxhc3Q9IjAiIT09TCxrLmlubGluZUJsb2NrTmVlZHNMYXlvdXQ9ITEsbShmdW5jdGlvbigpe3ZhciBhLGIsYyxkO2M9eS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLGMmJmMuc3R5bGUmJihiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZD15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLGMuYXBwZW5kQ2hpbGQoZCkuYXBwZW5kQ2hpbGQoYiksdHlwZW9mIGIuc3R5bGUuem9vbSE9PUsmJihiLnN0eWxlLmNzc1RleHQ9ImRpc3BsYXk6aW5saW5lO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MXB4O3dpZHRoOjFweDt6b29tOjEiLGsuaW5saW5lQmxvY2tOZWVkc0xheW91dD1hPTM9PT1iLm9mZnNldFdpZHRoLGEmJihjLnN0eWxlLnpvb209MSkpLGMucmVtb3ZlQ2hpbGQoZCkpfSksZnVuY3Rpb24oKXt2YXIgYT15LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKG51bGw9PWsuZGVsZXRlRXhwYW5kbyl7ay5kZWxldGVFeHBhbmRvPSEwO3RyeXtkZWxldGUgYS50ZXN0fWNhdGNoKGIpe2suZGVsZXRlRXhwYW5kbz0hMX19YT1udWxsfSgpLG0uYWNjZXB0RGF0YT1mdW5jdGlvbihhKXt2YXIgYj1tLm5vRGF0YVsoYS5ub2RlTmFtZSsiICIpLnRvTG93ZXJDYXNlKCldLGM9K2Eubm9kZVR5cGV8fDE7cmV0dXJuIDEhPT1jJiY5IT09Yz8hMTohYnx8YiE9PSEwJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09Yn07dmFyIE09L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxOPS8oW0EtWl0pL2c7ZnVuY3Rpb24gTyhhLGIsYyl7aWYodm9pZCAwPT09YyYmMT09PWEubm9kZVR5cGUpe3ZhciBkPSJkYXRhLSIrYi5yZXBsYWNlKE4sIi0kMSIpLnRvTG93ZXJDYXNlKCk7aWYoYz1hLmdldEF0dHJpYnV0ZShkKSwic3RyaW5nIj09dHlwZW9mIGMpe3RyeXtjPSJ0cnVlIj09PWM/ITA6ImZhbHNlIj09PWM/ITE6Im51bGwiPT09Yz9udWxsOitjKyIiPT09Yz8rYzpNLnRlc3QoYyk/bS5wYXJzZUpTT04oYyk6Y31jYXRjaChlKXt9bS5kYXRhKGEsYixjKX1lbHNlIGM9dm9pZCAwfXJldHVybiBjfWZ1bmN0aW9uIFAoYSl7dmFyIGI7Zm9yKGIgaW4gYSlpZigoImRhdGEiIT09Ynx8IW0uaXNFbXB0eU9iamVjdChhW2JdKSkmJiJ0b0pTT04iIT09YilyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBRKGEsYixkLGUpe2lmKG0uYWNjZXB0RGF0YShhKSl7dmFyIGYsZyxoPW0uZXhwYW5kbyxpPWEubm9kZVR5cGUsaj1pP20uY2FjaGU6YSxrPWk/YVtoXTphW2hdJiZoOwppZihrJiZqW2tdJiYoZXx8altrXS5kYXRhKXx8dm9pZCAwIT09ZHx8InN0cmluZyIhPXR5cGVvZiBiKXJldHVybiBrfHwoaz1pP2FbaF09Yy5wb3AoKXx8bS5ndWlkKys6aCksaltrXXx8KGpba109aT97fTp7dG9KU09OOm0ubm9vcH0pLCgib2JqZWN0Ij09dHlwZW9mIGJ8fCJmdW5jdGlvbiI9PXR5cGVvZiBiKSYmKGU/altrXT1tLmV4dGVuZChqW2tdLGIpOmpba10uZGF0YT1tLmV4dGVuZChqW2tdLmRhdGEsYikpLGc9altrXSxlfHwoZy5kYXRhfHwoZy5kYXRhPXt9KSxnPWcuZGF0YSksdm9pZCAwIT09ZCYmKGdbbS5jYW1lbENhc2UoYildPWQpLCJzdHJpbmciPT10eXBlb2YgYj8oZj1nW2JdLG51bGw9PWYmJihmPWdbbS5jYW1lbENhc2UoYildKSk6Zj1nLGZ9fWZ1bmN0aW9uIFIoYSxiLGMpe2lmKG0uYWNjZXB0RGF0YShhKSl7dmFyIGQsZSxmPWEubm9kZVR5cGUsZz1mP20uY2FjaGU6YSxoPWY/YVttLmV4cGFuZG9dOm0uZXhwYW5kbztpZihnW2hdKXtpZihiJiYoZD1jP2dbaF06Z1toXS5kYXRhKSl7bS5pc0FycmF5KGIpP2I9Yi5jb25jYXQobS5tYXAoYixtLmNhbWVsQ2FzZSkpOmIgaW4gZD9iPVtiXTooYj1tLmNhbWVsQ2FzZShiKSxiPWIgaW4gZD9bYl06Yi5zcGxpdCgiICIpKSxlPWIubGVuZ3RoO3doaWxlKGUtLSlkZWxldGUgZFtiW2VdXTtpZihjPyFQKGQpOiFtLmlzRW1wdHlPYmplY3QoZCkpcmV0dXJufShjfHwoZGVsZXRlIGdbaF0uZGF0YSxQKGdbaF0pKSkmJihmP20uY2xlYW5EYXRhKFthXSwhMCk6ay5kZWxldGVFeHBhbmRvfHxnIT1nLndpbmRvdz9kZWxldGUgZ1toXTpnW2hdPW51bGwpfX19bS5leHRlbmQoe2NhY2hlOnt9LG5vRGF0YTp7ImFwcGxldCAiOiEwLCJlbWJlZCAiOiEwLCJvYmplY3QgIjoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIn0saGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gYT1hLm5vZGVUeXBlP20uY2FjaGVbYVttLmV4cGFuZG9dXTphW20uZXhwYW5kb10sISFhJiYhUChhKX0sZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIFEoYSxiLGMpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFIoYSxiKX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBRKGEsYixjLCEwKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUihhLGIsITApfX0pLG0uZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpc1swXSxnPWYmJmYuYXR0cmlidXRlcztpZih2b2lkIDA9PT1hKXtpZih0aGlzLmxlbmd0aCYmKGU9bS5kYXRhKGYpLDE9PT1mLm5vZGVUeXBlJiYhbS5fZGF0YShmLCJwYXJzZWRBdHRycyIpKSl7Yz1nLmxlbmd0aDt3aGlsZShjLS0pZ1tjXSYmKGQ9Z1tjXS5uYW1lLDA9PT1kLmluZGV4T2YoImRhdGEtIikmJihkPW0uY2FtZWxDYXNlKGQuc2xpY2UoNSkpLE8oZixkLGVbZF0pKSk7bS5fZGF0YShmLCJwYXJzZWRBdHRycyIsITApfXJldHVybiBlfXJldHVybiJvYmplY3QiPT10eXBlb2YgYT90aGlzLmVhY2goZnVuY3Rpb24oKXttLmRhdGEodGhpcyxhKX0pOmFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goZnVuY3Rpb24oKXttLmRhdGEodGhpcyxhLGIpfSk6Zj9PKGYsYSxtLmRhdGEoZixhKSk6dm9pZCAwfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXttLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLG0uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGE/KGI9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1tLl9kYXRhKGEsYiksYyYmKCFkfHxtLmlzQXJyYXkoYyk/ZD1tLl9kYXRhKGEsYixtLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9pZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPW0ucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bS5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXttLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09ZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gbS5fZGF0YShhLGMpfHxtLl9kYXRhKGEsYyx7ZW1wdHk6bS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7bS5fcmVtb3ZlRGF0YShhLGIrInF1ZXVlIiksbS5fcmVtb3ZlRGF0YShhLGMpfSl9KX19KSxtLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bS5xdWV1ZSh0aGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1tLnF1ZXVlKHRoaXMsYSxiKTttLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4Ij09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm0uZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe20uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTEsZT1tLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgsaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSljPW0uX2RhdGEoZltnXSxhKyJxdWV1ZUhvb2tzIiksYyYmYy5lbXB0eSYmKGQrKyxjLmVtcHR5LmFkZChoKSk7cmV0dXJuIGgoKSxlLnByb21pc2UoYil9fSk7dmFyIFM9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsVD1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLFU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1ifHxhLCJub25lIj09PW0uY3NzKGEsImRpc3BsYXkiKXx8IW0uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfSxWPW0uYWNjZXNzPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe3ZhciBoPTAsaT1hLmxlbmd0aCxqPW51bGw9PWM7aWYoIm9iamVjdCI9PT1tLnR5cGUoYykpe2U9ITA7Zm9yKGggaW4gYyltLmFjY2VzcyhhLGIsaCxjW2hdLCEwLGYsZyl9ZWxzZSBpZih2b2lkIDAhPT1kJiYoZT0hMCxtLmlzRnVuY3Rpb24oZCl8fChnPSEwKSxqJiYoZz8oYi5jYWxsKGEsZCksYj1udWxsKTooaj1iLGI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBqLmNhbGwobShhKSxjKX0pKSxiKSlmb3IoO2k+aDtoKyspYihhW2hdLGMsZz9kOmQuY2FsbChhW2hdLGgsYihhW2hdLGMpKSk7cmV0dXJuIGU/YTpqP2IuY2FsbChhKTppP2IoYVswXSxjKTpmfSxXPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pOyFmdW5jdGlvbigpe3ZhciBhPXkuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksYz15LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihiLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixrLmxlYWRpbmdXaGl0ZXNwYWNlPTM9PT1iLmZpcnN0Q2hpbGQubm9kZVR5cGUsay50Ym9keT0hYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsay5odG1sU2VyaWFsaXplPSEhYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxrLmh0bWw1Q2xvbmU9Ijw6bmF2PjwvOm5hdj4iIT09eS5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCxhLnR5cGU9ImNoZWNrYm94IixhLmNoZWNrZWQ9ITAsYy5hcHBlbmRDaGlsZChhKSxrLmFwcGVuZENoZWNrZWQ9YS5jaGVja2VkLGIuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixrLm5vQ2xvbmVDaGVja2VkPSEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWUsYy5hcHBlbmRDaGlsZChiKSxiLmlubmVySFRNTD0iPGlucHV0IHR5cGU9J3JhZGlvJyBjaGVja2VkPSdjaGVja2VkJyBuYW1lPSd0Jy8+IixrLmNoZWNrQ2xvbmU9Yi5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsay5ub0Nsb25lRXZlbnQ9ITAsYi5hdHRhY2hFdmVudCYmKGIuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uKCl7ay5ub0Nsb25lRXZlbnQ9ITF9KSxiLmNsb25lTm9kZSghMCkuY2xpY2soKSksbnVsbD09ay5kZWxldGVFeHBhbmRvKXtrLmRlbGV0ZUV4cGFuZG89ITA7dHJ5e2RlbGV0ZSBiLnRlc3R9Y2F0Y2goZCl7ay5kZWxldGVFeHBhbmRvPSExfX19KCksZnVuY3Rpb24oKXt2YXIgYixjLGQ9eS5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3IoYiBpbntzdWJtaXQ6ITAsY2hhbmdlOiEwLGZvY3VzaW46ITB9KWM9Im9uIitiLChrW2IrIkJ1YmJsZXMiXT1jIGluIGEpfHwoZC5zZXRBdHRyaWJ1dGUoYywidCIpLGtbYisiQnViYmxlcyJdPWQuYXR0cmlidXRlc1tjXS5leHBhbmRvPT09ITEpO2Q9bnVsbH0oKTt2YXIgWD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksWT0vXmtleS8sWj0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnUpfGNsaWNrLywkPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxfPS9eKFteLl0qKSg/OlwuKC4rKXwpJC87ZnVuY3Rpb24gYWIoKXtyZXR1cm4hMH1mdW5jdGlvbiBiYigpe3JldHVybiExfWZ1bmN0aW9uIGNiKCl7dHJ5e3JldHVybiB5LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYSl7fX1tLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbixvLHAscSxyPW0uX2RhdGEoYSk7aWYocil7Yy5oYW5kbGVyJiYoaT1jLGM9aS5oYW5kbGVyLGU9aS5zZWxlY3RvciksYy5ndWlkfHwoYy5ndWlkPW0uZ3VpZCsrKSwoZz1yLmV2ZW50cyl8fChnPXIuZXZlbnRzPXt9KSwoaz1yLmhhbmRsZSl8fChrPXIuaGFuZGxlPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgbT09PUt8fGEmJm0uZXZlbnQudHJpZ2dlcmVkPT09YS50eXBlP3ZvaWQgMDptLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGsuZWxlbSxhcmd1bWVudHMpfSxrLmVsZW09YSksYj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGg9Yi5sZW5ndGg7d2hpbGUoaC0tKWY9Xy5leGVjKGJbaF0pfHxbXSxvPXE9ZlsxXSxwPShmWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyYmKGo9bS5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2ouZGVsZWdhdGVUeXBlOmouYmluZFR5cGUpfHxvLGo9bS5ldmVudC5zcGVjaWFsW29dfHx7fSxsPW0uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpjLGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm0uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9LGkpLChuPWdbb10pfHwobj1nW29dPVtdLG4uZGVsZWdhdGVDb3VudD0wLGouc2V0dXAmJmouc2V0dXAuY2FsbChhLGQscCxrKSE9PSExfHwoYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihvLGssITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIitvLGspKSksai5hZGQmJihqLmFkZC5jYWxsKGEsbCksbC5oYW5kbGVyLmd1aWR8fChsLmhhbmRsZXIuZ3VpZD1jLmd1aWQpKSxlP24uc3BsaWNlKG4uZGVsZWdhdGVDb3VudCsrLDAsbCk6bi5wdXNoKGwpLG0uZXZlbnQuZ2xvYmFsW29dPSEwKTthPW51bGx9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxuLG8scCxxLHI9bS5oYXNEYXRhKGEpJiZtLl9kYXRhKGEpO2lmKHImJihrPXIuZXZlbnRzKSl7Yj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGo9Yi5sZW5ndGg7d2hpbGUoai0tKWlmKGg9Xy5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyl7bD1tLmV2ZW50LnNwZWNpYWxbb118fHt9LG89KGQ/bC5kZWxlZ2F0ZVR5cGU6bC5iaW5kVHlwZSl8fG8sbj1rW29dfHxbXSxoPWhbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK3Auam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksaT1mPW4ubGVuZ3RoO3doaWxlKGYtLSlnPW5bZl0sIWUmJnEhPT1nLm9yaWdUeXBlfHxjJiZjLmd1aWQhPT1nLmd1aWR8fGgmJiFoLnRlc3QoZy5uYW1lc3BhY2UpfHxkJiZkIT09Zy5zZWxlY3RvciYmKCIqKiIhPT1kfHwhZy5zZWxlY3Rvcil8fChuLnNwbGljZShmLDEpLGcuc2VsZWN0b3ImJm4uZGVsZWdhdGVDb3VudC0tLGwucmVtb3ZlJiZsLnJlbW92ZS5jYWxsKGEsZykpO2kmJiFuLmxlbmd0aCYmKGwudGVhcmRvd24mJmwudGVhcmRvd24uY2FsbChhLHAsci5oYW5kbGUpIT09ITF8fG0ucmVtb3ZlRXZlbnQoYSxvLHIuaGFuZGxlKSxkZWxldGUga1tvXSl9ZWxzZSBmb3IobyBpbiBrKW0uZXZlbnQucmVtb3ZlKGEsbytiW2pdLGMsZCwhMCk7bS5pc0VtcHR5T2JqZWN0KGspJiYoZGVsZXRlIHIuaGFuZGxlLG0uX3JlbW92ZURhdGEoYSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZixnLGgsaSxrLGwsbixvPVtkfHx5XSxwPWouY2FsbChiLCJ0eXBlIik/Yi50eXBlOmIscT1qLmNhbGwoYiwibmFtZXNwYWNlIik/Yi5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihoPWw9ZD1kfHx5LDMhPT1kLm5vZGVUeXBlJiY4IT09ZC5ub2RlVHlwZSYmISQudGVzdChwK20uZXZlbnQudHJpZ2dlcmVkKSYmKHAuaW5kZXhPZigiLiIpPj0wJiYocT1wLnNwbGl0KCIuIikscD1xLnNoaWZ0KCkscS5zb3J0KCkpLGc9cC5pbmRleE9mKCI6Iik8MCYmIm9uIitwLGI9YlttLmV4cGFuZG9dP2I6bmV3IG0uRXZlbnQocCwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWU/MjozLGIubmFtZXNwYWNlPXEuam9pbigiLiIpLGIubmFtZXNwYWNlX3JlPWIubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Euam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChiLnRhcmdldD1kKSxjPW51bGw9PWM/W2JdOm0ubWFrZUFycmF5KGMsW2JdKSxrPW0uZXZlbnQuc3BlY2lhbFtwXXx8e30sZXx8IWsudHJpZ2dlcnx8ay50cmlnZ2VyLmFwcGx5KGQsYykhPT0hMSkpe2lmKCFlJiYhay5ub0J1YmJsZSYmIW0uaXNXaW5kb3coZCkpe2ZvcihpPWsuZGVsZWdhdGVUeXBlfHxwLCQudGVzdChpK3ApfHwoaD1oLnBhcmVudE5vZGUpO2g7aD1oLnBhcmVudE5vZGUpby5wdXNoKGgpLGw9aDtsPT09KGQub3duZXJEb2N1bWVudHx8eSkmJm8ucHVzaChsLmRlZmF1bHRWaWV3fHxsLnBhcmVudFdpbmRvd3x8YSl9bj0wO3doaWxlKChoPW9bbisrXSkmJiFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYi50eXBlPW4+MT9pOmsuYmluZFR5cGV8fHAsZj0obS5fZGF0YShoLCJldmVudHMiKXx8e30pW2IudHlwZV0mJm0uX2RhdGEoaCwiaGFuZGxlIiksZiYmZi5hcHBseShoLGMpLGY9ZyYmaFtnXSxmJiZmLmFwcGx5JiZtLmFjY2VwdERhdGEoaCkmJihiLnJlc3VsdD1mLmFwcGx5KGgsYyksYi5yZXN1bHQ9PT0hMSYmYi5wcmV2ZW50RGVmYXVsdCgpKTtpZihiLnR5cGU9cCwhZSYmIWIuaXNEZWZhdWx0UHJldmVudGVkKCkmJighay5fZGVmYXVsdHx8ay5fZGVmYXVsdC5hcHBseShvLnBvcCgpLGMpPT09ITEpJiZtLmFjY2VwdERhdGEoZCkmJmcmJmRbcF0mJiFtLmlzV2luZG93KGQpKXtsPWRbZ10sbCYmKGRbZ109bnVsbCksbS5ldmVudC50cmlnZ2VyZWQ9cDt0cnl7ZFtwXSgpfWNhdGNoKHIpe31tLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsbCYmKGRbZ109bCl9cmV0dXJuIGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1tLmV2ZW50LmZpeChhKTt2YXIgYixjLGUsZixnLGg9W10saT1kLmNhbGwoYXJndW1lbnRzKSxqPShtLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYS50eXBlXXx8W10saz1tLmV2ZW50LnNwZWNpYWxbYS50eXBlXXx8e307aWYoaVswXT1hLGEuZGVsZWdhdGVUYXJnZXQ9dGhpcywhay5wcmVEaXNwYXRjaHx8ay5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsYSkhPT0hMSl7aD1tLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxhLGopLGI9MDt3aGlsZSgoZj1oW2IrK10pJiYhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXthLmN1cnJlbnRUYXJnZXQ9Zi5lbGVtLGc9MDt3aGlsZSgoZT1mLmhhbmRsZXJzW2crK10pJiYhYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSghYS5uYW1lc3BhY2VfcmV8fGEubmFtZXNwYWNlX3JlLnRlc3QoZS5uYW1lc3BhY2UpKSYmKGEuaGFuZGxlT2JqPWUsYS5kYXRhPWUuZGF0YSxjPSgobS5ldmVudC5zcGVjaWFsW2Uub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxlLmhhbmRsZXIpLmFwcGx5KGYuZWxlbSxpKSx2b2lkIDAhPT1jJiYoYS5yZXN1bHQ9Yyk9PT0hMSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGsucG9zdERpc3BhdGNoJiZrLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsYSksYS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9W10saD1iLmRlbGVnYXRlQ291bnQsaT1hLnRhcmdldDtpZihoJiZpLm5vZGVUeXBlJiYoIWEuYnV0dG9ufHwiY2xpY2siIT09YS50eXBlKSlmb3IoO2khPXRoaXM7aT1pLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWkubm9kZVR5cGUmJihpLmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpKXtmb3IoZT1bXSxmPTA7aD5mO2YrKylkPWJbZl0sYz1kLnNlbGVjdG9yKyIgIix2b2lkIDA9PT1lW2NdJiYoZVtjXT1kLm5lZWRzQ29udGV4dD9tKGMsdGhpcykuaW5kZXgoaSk+PTA6bS5maW5kKGMsdGhpcyxudWxsLFtpXSkubGVuZ3RoKSxlW2NdJiZlLnB1c2goZCk7ZS5sZW5ndGgmJmcucHVzaCh7ZWxlbTppLGhhbmRsZXJzOmV9KX1yZXR1cm4gaDxiLmxlbmd0aCYmZy5wdXNoKHtlbGVtOnRoaXMsaGFuZGxlcnM6Yi5zbGljZShoKX0pLGd9LGZpeDpmdW5jdGlvbihhKXtpZihhW20uZXhwYW5kb10pcmV0dXJuIGE7dmFyIGIsYyxkLGU9YS50eXBlLGY9YSxnPXRoaXMuZml4SG9va3NbZV07Z3x8KHRoaXMuZml4SG9va3NbZV09Zz1aLnRlc3QoZSk/dGhpcy5tb3VzZUhvb2tzOlkudGVzdChlKT90aGlzLmtleUhvb2tzOnt9KSxkPWcucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoZy5wcm9wcyk6dGhpcy5wcm9wcyxhPW5ldyBtLkV2ZW50KGYpLGI9ZC5sZW5ndGg7d2hpbGUoYi0tKWM9ZFtiXSxhW2NdPWZbY107cmV0dXJuIGEudGFyZ2V0fHwoYS50YXJnZXQ9Zi5zcmNFbGVtZW50fHx5KSwzPT09YS50YXJnZXQubm9kZVR5cGUmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSxhLm1ldGFLZXk9ISFhLm1ldGFLZXksZy5maWx0ZXI/Zy5maWx0ZXIoYSxmKTphfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09YS53aGljaCYmKGEud2hpY2g9bnVsbCE9Yi5jaGFyQ29kZT9iLmNoYXJDb2RlOmIua2V5Q29kZSksYX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9Yi5idXR0b24sZz1iLmZyb21FbGVtZW50O3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxsIT1iLmNsaWVudFgmJihkPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fHksZT1kLmRvY3VtZW50RWxlbWVudCxjPWQuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZSYmZS5zY3JvbGxMZWZ0fHxjJiZjLnNjcm9sbExlZnR8fDApLShlJiZlLmNsaWVudExlZnR8fGMmJmMuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGUmJmUuc2Nyb2xsVG9wfHxjJiZjLnNjcm9sbFRvcHx8MCktKGUmJmUuY2xpZW50VG9wfHxjJiZjLmNsaWVudFRvcHx8MCkpLCFhLnJlbGF0ZWRUYXJnZXQmJmcmJihhLnJlbGF0ZWRUYXJnZXQ9Zz09PWEudGFyZ2V0P2IudG9FbGVtZW50OmcpLGEud2hpY2h8fHZvaWQgMD09PWZ8fChhLndoaWNoPTEmZj8xOjImZj8zOjQmZj8yOjApLGF9fSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09Y2IoKSYmdGhpcy5mb2N1cyl0cnl7cmV0dXJuIHRoaXMuZm9jdXMoKSwhMX1jYXRjaChhKXt9fSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1jYigpJiZ0aGlzLmJsdXI/KHRoaXMuYmx1cigpLCExKTp2b2lkIDB9LGRlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiBtLm5vZGVOYW1lKHRoaXMsImlucHV0IikmJiJjaGVja2JveCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2s/KHRoaXMuY2xpY2soKSwhMSk6dm9pZCAwfSxfZGVmYXVsdDpmdW5jdGlvbihhKXtyZXR1cm4gbS5ub2RlTmFtZShhLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7dm9pZCAwIT09YS5yZXN1bHQmJmEub3JpZ2luYWxFdmVudCYmKGEub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1hLnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bS5leHRlbmQobmV3IG0uRXZlbnQsYyx7dHlwZTphLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtkP20uZXZlbnQudHJpZ2dlcihlLG51bGwsYik6bS5ldmVudC5kaXNwYXRjaC5jYWxsKGIsZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sbS5yZW1vdmVFdmVudD15LnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0ib24iK2I7YS5kZXRhY2hFdmVudCYmKHR5cGVvZiBhW2RdPT09SyYmKGFbZF09bnVsbCksYS5kZXRhY2hFdmVudChkLGMpKX0sbS5FdmVudD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbS5FdmVudD8oYSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09YS5kZWZhdWx0UHJldmVudGVkJiZhLnJldHVyblZhbHVlPT09ITE/YWI6YmIpOnRoaXMudHlwZT1hLGImJm0uZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fG0ubm93KCksdm9pZCh0aGlzW20uZXhwYW5kb109ITApKTpuZXcgbS5FdmVudChhLGIpfSxtLkV2ZW50LnByb3RvdHlwZT17aXNEZWZhdWx0UHJldmVudGVkOmJiLGlzUHJvcGFnYXRpb25TdG9wcGVkOmJiLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmJiLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPWFiLGEmJihhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTphLnJldHVyblZhbHVlPSExKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9YWIsYSYmKGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpLGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9YWIsYSYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG0uZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxiKXttLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdldCxmPWEuaGFuZGxlT2JqO3JldHVybighZXx8ZSE9PWQmJiFtLmNvbnRhaW5zKGQsZSkpJiYoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxrLnN1Ym1pdEJ1YmJsZXN8fChtLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBtLm5vZGVOYW1lKHRoaXMsImZvcm0iKT8hMTp2b2lkIG0uZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsYz1tLm5vZGVOYW1lKGIsImlucHV0Iil8fG0ubm9kZU5hbWUoYiwiYnV0dG9uIik/Yi5mb3JtOnZvaWQgMDtjJiYhbS5fZGF0YShjLCJzdWJtaXRCdWJibGVzIikmJihtLmV2ZW50LmFkZChjLCJzdWJtaXQuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7YS5fc3VibWl0X2J1YmJsZT0hMH0pLG0uX2RhdGEoYywic3VibWl0QnViYmxlcyIsITApKX0pfSxwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YS5fc3VibWl0X2J1YmJsZSYmKGRlbGV0ZSBhLl9zdWJtaXRfYnViYmxlLHRoaXMucGFyZW50Tm9kZSYmIWEuaXNUcmlnZ2VyJiZtLmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxhLCEwKSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIG0ubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOnZvaWQgbS5ldmVudC5yZW1vdmUodGhpcywiLl9zdWJtaXQiKX19KSxrLmNoYW5nZUJ1YmJsZXN8fChtLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBYLnRlc3QodGhpcy5ub2RlTmFtZSk/KCgiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlKSYmKG0uZXZlbnQuYWRkKHRoaXMsInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpeyJjaGVja2VkIj09PWEub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWUmJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITApfSksbS5ldmVudC5hZGQodGhpcywiY2xpY2suX2NoYW5nZSIsZnVuY3Rpb24oYSl7dGhpcy5fanVzdF9jaGFuZ2VkJiYhYS5pc1RyaWdnZXImJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITEpLG0uZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcyxhLCEwKX0pKSwhMSk6dm9pZCBtLmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtYLnRlc3QoYi5ub2RlTmFtZSkmJiFtLl9kYXRhKGIsImNoYW5nZUJ1YmJsZXMiKSYmKG0uZXZlbnQuYWRkKGIsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXshdGhpcy5wYXJlbnROb2RlfHxhLmlzU2ltdWxhdGVkfHxhLmlzVHJpZ2dlcnx8bS5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsYSwhMCl9KSxtLl9kYXRhKGIsImNoYW5nZUJ1YmJsZXMiLCEwKSl9KX0saGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0O3JldHVybiB0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fCJyYWRpbyIhPT1iLnR5cGUmJiJjaGVja2JveCIhPT1iLnR5cGU/YS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBtLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpLCFYLnRlc3QodGhpcy5ub2RlTmFtZSl9fSksay5mb2N1c2luQnViYmxlc3x8bS5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKGEpe20uZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxtLmV2ZW50LmZpeChhKSwhMCl9O20uZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1tLl9kYXRhKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksbS5fZGF0YShkLGIsKGV8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPW0uX2RhdGEoZCxiKS0xO2U/bS5fZGF0YShkLGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLG0uX3JlbW92ZURhdGEoZCxiKSl9fX0pLG0uZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7aWYoIm9iamVjdCI9PXR5cGVvZiBhKXsic3RyaW5nIiE9dHlwZW9mIGImJihjPWN8fGIsYj12b2lkIDApO2ZvcihmIGluIGEpdGhpcy5vbihmLGIsYyxhW2ZdLGUpO3JldHVybiB0aGlzfWlmKG51bGw9PWMmJm51bGw9PWQ/KGQ9YixjPWI9dm9pZCAwKTpudWxsPT1kJiYoInN0cmluZyI9PXR5cGVvZiBiPyhkPWMsYz12b2lkIDApOihkPWMsYz1iLGI9dm9pZCAwKSksZD09PSExKWQ9YmI7ZWxzZSBpZighZClyZXR1cm4gdGhpcztyZXR1cm4gMT09PWUmJihnPWQsZD1mdW5jdGlvbihhKXtyZXR1cm4gbSgpLm9mZihhKSxnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5ndWlkPWcuZ3VpZHx8KGcuZ3VpZD1tLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe20uZXZlbnQuYWRkKHRoaXMsYSxkLGMsYil9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1hLmhhbmRsZU9iaixtKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9kLm9yaWdUeXBlKyIuIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3IsZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4gYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuKGI9PT0hMXx8ImZ1bmN0aW9uIj09dHlwZW9mIGIpJiYoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihjPWJiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXttLmV2ZW50LnJlbW92ZSh0aGlzLGEsYyxiKX0pfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe20uZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzWzBdO3JldHVybiBjP20uZXZlbnQudHJpZ2dlcihhLGIsYywhMCk6dm9pZCAwfX0pO2Z1bmN0aW9uIGRiKGEpe3ZhciBiPWViLnNwbGl0KCJ8IiksYz1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihjLmNyZWF0ZUVsZW1lbnQpd2hpbGUoYi5sZW5ndGgpYy5jcmVhdGVFbGVtZW50KGIucG9wKCkpO3JldHVybiBjfXZhciBlYj0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsZmI9LyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZyxnYj1uZXcgUmVnRXhwKCI8KD86IitlYisiKVtcXHMvPl0iLCJpIiksaGI9L15ccysvLGliPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksamI9LzwoW1x3Ol0rKS8sa2I9Lzx0Ym9keS9pLGxiPS88fCYjP1x3KzsvLG1iPS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksbmI9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksb2I9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLHBiPS9edHJ1ZVwvKC4qKS8scWI9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLHJiPXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0scGFyYW06WzEsIjxvYmplY3Q+IiwiPC9vYmplY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDprLmh0bWxTZXJpYWxpemU/WzAsIiIsIiJdOlsxLCJYPGRpdj4iLCI8L2Rpdj4iXX0sc2I9ZGIoeSksdGI9c2IuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSk7cmIub3B0Z3JvdXA9cmIub3B0aW9uLHJiLnRib2R5PXJiLnRmb290PXJiLmNvbGdyb3VwPXJiLmNhcHRpb249cmIudGhlYWQscmIudGg9cmIudGQ7ZnVuY3Rpb24gdWIoYSxiKXt2YXIgYyxkLGU9MCxmPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09Sz9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fCIqIik6dHlwZW9mIGEucXVlcnlTZWxlY3RvckFsbCE9PUs/YS5xdWVyeVNlbGVjdG9yQWxsKGJ8fCIqIik6dm9pZCAwO2lmKCFmKWZvcihmPVtdLGM9YS5jaGlsZE5vZGVzfHxhO251bGwhPShkPWNbZV0pO2UrKykhYnx8bS5ub2RlTmFtZShkLGIpP2YucHVzaChkKTptLm1lcmdlKGYsdWIoZCxiKSk7cmV0dXJuIHZvaWQgMD09PWJ8fGImJm0ubm9kZU5hbWUoYSxiKT9tLm1lcmdlKFthXSxmKTpmfWZ1bmN0aW9uIHZiKGEpe1cudGVzdChhLnR5cGUpJiYoYS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWQpfWZ1bmN0aW9uIHdiKGEsYil7cmV0dXJuIG0ubm9kZU5hbWUoYSwidGFibGUiKSYmbS5ub2RlTmFtZSgxMSE9PWIubm9kZVR5cGU/YjpiLmZpcnN0Q2hpbGQsInRyIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiB4YihhKXtyZXR1cm4gYS50eXBlPShudWxsIT09bS5maW5kLmF0dHIoYSwidHlwZSIpKSsiLyIrYS50eXBlLGF9ZnVuY3Rpb24geWIoYSl7dmFyIGI9cGIuZXhlYyhhLnR5cGUpO3JldHVybiBiP2EudHlwZT1iWzFdOmEucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksYX1mdW5jdGlvbiB6YihhLGIpe2Zvcih2YXIgYyxkPTA7bnVsbCE9KGM9YVtkXSk7ZCsrKW0uX2RhdGEoYywiZ2xvYmFsRXZhbCIsIWJ8fG0uX2RhdGEoYltkXSwiZ2xvYmFsRXZhbCIpKX1mdW5jdGlvbiBBYihhLGIpe2lmKDE9PT1iLm5vZGVUeXBlJiZtLmhhc0RhdGEoYSkpe3ZhciBjLGQsZSxmPW0uX2RhdGEoYSksZz1tLl9kYXRhKGIsZiksaD1mLmV2ZW50cztpZihoKXtkZWxldGUgZy5oYW5kbGUsZy5ldmVudHM9e307Zm9yKGMgaW4gaClmb3IoZD0wLGU9aFtjXS5sZW5ndGg7ZT5kO2QrKyltLmV2ZW50LmFkZChiLGMsaFtjXVtkXSl9Zy5kYXRhJiYoZy5kYXRhPW0uZXh0ZW5kKHt9LGcuZGF0YSkpfX1mdW5jdGlvbiBCYihhLGIpe3ZhciBjLGQsZTtpZigxPT09Yi5ub2RlVHlwZSl7aWYoYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIWsubm9DbG9uZUV2ZW50JiZiW20uZXhwYW5kb10pe2U9bS5fZGF0YShiKTtmb3IoZCBpbiBlLmV2ZW50cyltLnJlbW92ZUV2ZW50KGIsZCxlLmhhbmRsZSk7Yi5yZW1vdmVBdHRyaWJ1dGUobS5leHBhbmRvKX0ic2NyaXB0Ij09PWMmJmIudGV4dCE9PWEudGV4dD8oeGIoYikudGV4dD1hLnRleHQseWIoYikpOiJvYmplY3QiPT09Yz8oYi5wYXJlbnROb2RlJiYoYi5vdXRlckhUTUw9YS5vdXRlckhUTUwpLGsuaHRtbDVDbG9uZSYmYS5pbm5lckhUTUwmJiFtLnRyaW0oYi5pbm5lckhUTUwpJiYoYi5pbm5lckhUTUw9YS5pbm5lckhUTUwpKToiaW5wdXQiPT09YyYmVy50ZXN0KGEudHlwZSk/KGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCxiLnZhbHVlIT09YS52YWx1ZSYmKGIudmFsdWU9YS52YWx1ZSkpOiJvcHRpb24iPT09Yz9iLmRlZmF1bHRTZWxlY3RlZD1iLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkOigiaW5wdXQiPT09Y3x8InRleHRhcmVhIj09PWMpJiYoYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWUpfX1tLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGgsaT1tLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKTtpZihrLmh0bWw1Q2xvbmV8fG0uaXNYTUxEb2MoYSl8fCFnYi50ZXN0KCI8IithLm5vZGVOYW1lKyI+Iik/Zj1hLmNsb25lTm9kZSghMCk6KHRiLmlubmVySFRNTD1hLm91dGVySFRNTCx0Yi5yZW1vdmVDaGlsZChmPXRiLmZpcnN0Q2hpbGQpKSwhKGsubm9DbG9uZUV2ZW50JiZrLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxtLmlzWE1MRG9jKGEpKSlmb3IoZD11YihmKSxoPXViKGEpLGc9MDtudWxsIT0oZT1oW2ddKTsrK2cpZFtnXSYmQmIoZSxkW2ddKTtpZihiKWlmKGMpZm9yKGg9aHx8dWIoYSksZD1kfHx1YihmKSxnPTA7bnVsbCE9KGU9aFtnXSk7ZysrKUFiKGUsZFtnXSk7ZWxzZSBBYihhLGYpO3JldHVybiBkPXViKGYsInNjcmlwdCIpLGQubGVuZ3RoPjAmJnpiKGQsIWkmJnViKGEsInNjcmlwdCIpKSxkPWg9ZT1udWxsLGZ9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKHZhciBlLGYsZyxoLGksaixsLG49YS5sZW5ndGgsbz1kYihiKSxwPVtdLHE9MDtuPnE7cSsrKWlmKGY9YVtxXSxmfHwwPT09ZilpZigib2JqZWN0Ij09PW0udHlwZShmKSltLm1lcmdlKHAsZi5ub2RlVHlwZT9bZl06Zik7ZWxzZSBpZihsYi50ZXN0KGYpKXtoPWh8fG8uYXBwZW5kQ2hpbGQoYi5jcmVhdGVFbGVtZW50KCJkaXYiKSksaT0oamIuZXhlYyhmKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxsPXJiW2ldfHxyYi5fZGVmYXVsdCxoLmlubmVySFRNTD1sWzFdK2YucmVwbGFjZShpYiwiPCQxPjwvJDI+IikrbFsyXSxlPWxbMF07d2hpbGUoZS0tKWg9aC5sYXN0Q2hpbGQ7aWYoIWsubGVhZGluZ1doaXRlc3BhY2UmJmhiLnRlc3QoZikmJnAucHVzaChiLmNyZWF0ZVRleHROb2RlKGhiLmV4ZWMoZilbMF0pKSwhay50Ym9keSl7Zj0idGFibGUiIT09aXx8a2IudGVzdChmKT8iPHRhYmxlPiIhPT1sWzFdfHxrYi50ZXN0KGYpPzA6aDpoLmZpcnN0Q2hpbGQsZT1mJiZmLmNoaWxkTm9kZXMubGVuZ3RoO3doaWxlKGUtLSltLm5vZGVOYW1lKGo9Zi5jaGlsZE5vZGVzW2VdLCJ0Ym9keSIpJiYhai5jaGlsZE5vZGVzLmxlbmd0aCYmZi5yZW1vdmVDaGlsZChqKX1tLm1lcmdlKHAsaC5jaGlsZE5vZGVzKSxoLnRleHRDb250ZW50PSIiO3doaWxlKGguZmlyc3RDaGlsZCloLnJlbW92ZUNoaWxkKGguZmlyc3RDaGlsZCk7aD1vLmxhc3RDaGlsZH1lbHNlIHAucHVzaChiLmNyZWF0ZVRleHROb2RlKGYpKTtoJiZvLnJlbW92ZUNoaWxkKGgpLGsuYXBwZW5kQ2hlY2tlZHx8bS5ncmVwKHViKHAsImlucHV0IiksdmIpLHE9MDt3aGlsZShmPXBbcSsrXSlpZigoIWR8fC0xPT09bS5pbkFycmF5KGYsZCkpJiYoZz1tLmNvbnRhaW5zKGYub3duZXJEb2N1bWVudCxmKSxoPXViKG8uYXBwZW5kQ2hpbGQoZiksInNjcmlwdCIpLGcmJnpiKGgpLGMpKXtlPTA7d2hpbGUoZj1oW2UrK10pb2IudGVzdChmLnR5cGV8fCIiKSYmYy5wdXNoKGYpfXJldHVybiBoPW51bGwsb30sY2xlYW5EYXRhOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkLGUsZixnLGg9MCxpPW0uZXhwYW5kbyxqPW0uY2FjaGUsbD1rLmRlbGV0ZUV4cGFuZG8sbj1tLmV2ZW50LnNwZWNpYWw7bnVsbCE9KGQ9YVtoXSk7aCsrKWlmKChifHxtLmFjY2VwdERhdGEoZCkpJiYoZj1kW2ldLGc9ZiYmaltmXSkpe2lmKGcuZXZlbnRzKWZvcihlIGluIGcuZXZlbnRzKW5bZV0/bS5ldmVudC5yZW1vdmUoZCxlKTptLnJlbW92ZUV2ZW50KGQsZSxnLmhhbmRsZSk7altmXSYmKGRlbGV0ZSBqW2ZdLGw/ZGVsZXRlIGRbaV06dHlwZW9mIGQucmVtb3ZlQXR0cmlidXRlIT09Sz9kLnJlbW92ZUF0dHJpYnV0ZShpKTpkW2ldPW51bGwsYy5wdXNoKGYpKX19fSksbS5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFYodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT9tLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHx5KS5jcmVhdGVUZXh0Tm9kZShhKSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj13Yih0aGlzLGEpO2IuYXBwZW5kQ2hpbGQoYSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPXdiKHRoaXMsYSk7Yi5pbnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjLGQ9YT9tLmZpbHRlcihhLHRoaXMpOnRoaXMsZT0wO251bGwhPShjPWRbZV0pO2UrKylifHwxIT09Yy5ub2RlVHlwZXx8bS5jbGVhbkRhdGEodWIoYykpLGMucGFyZW50Tm9kZSYmKGImJm0uY29udGFpbnMoYy5vd25lckRvY3VtZW50LGMpJiZ6Yih1YihjLCJzY3JpcHQiKSksYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO251bGwhPShhPXRoaXNbYl0pO2IrKyl7MT09PWEubm9kZVR5cGUmJm0uY2xlYW5EYXRhKHViKGEsITEpKTt3aGlsZShhLmZpcnN0Q2hpbGQpYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2Eub3B0aW9ucyYmbS5ub2RlTmFtZShhLCJzZWxlY3QiKSYmKGEub3B0aW9ucy5sZW5ndGg9MCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9bnVsbD09YT8hMTphLGI9bnVsbD09Yj9hOmIsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbS5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF18fHt9LGM9MCxkPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWEpcmV0dXJuIDE9PT1iLm5vZGVUeXBlP2IuaW5uZXJIVE1MLnJlcGxhY2UoZmIsIiIpOnZvaWQgMDtpZighKCJzdHJpbmciIT10eXBlb2YgYXx8bWIudGVzdChhKXx8IWsuaHRtbFNlcmlhbGl6ZSYmZ2IudGVzdChhKXx8IWsubGVhZGluZ1doaXRlc3BhY2UmJmhiLnRlc3QoYSl8fHJiWyhqYi5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSkpe2E9YS5yZXBsYWNlKGliLCI8JDE+PC8kMj4iKTt0cnl7Zm9yKDtkPmM7YysrKWI9dGhpc1tjXXx8e30sMT09PWIubm9kZVR5cGUmJihtLmNsZWFuRGF0YSh1YihiLCExKSksYi5pbm5lckhUTUw9YSk7Yj0wfWNhdGNoKGUpe319YiYmdGhpcy5lbXB0eSgpLmFwcGVuZChhKX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50c1swXTtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYil7YT10aGlzLnBhcmVudE5vZGUsbS5jbGVhbkRhdGEodWIodGhpcykpLGEmJmEucmVwbGFjZUNoaWxkKGIsdGhpcyl9KSxhJiYoYS5sZW5ndGh8fGEubm9kZVR5cGUpP3RoaXM6dGhpcy5yZW1vdmUoKX0sZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbW92ZShhLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxiKXthPWUuYXBwbHkoW10sYSk7dmFyIGMsZCxmLGcsaCxpLGo9MCxsPXRoaXMubGVuZ3RoLG49dGhpcyxvPWwtMSxwPWFbMF0scT1tLmlzRnVuY3Rpb24ocCk7aWYocXx8bD4xJiYic3RyaW5nIj09dHlwZW9mIHAmJiFrLmNoZWNrQ2xvbmUmJm5iLnRlc3QocCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZD1uLmVxKGMpO3EmJihhWzBdPXAuY2FsbCh0aGlzLGMsZC5odG1sKCkpKSxkLmRvbU1hbmlwKGEsYil9KTtpZihsJiYoaT1tLmJ1aWxkRnJhZ21lbnQoYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQsITEsdGhpcyksYz1pLmZpcnN0Q2hpbGQsMT09PWkuY2hpbGROb2Rlcy5sZW5ndGgmJihpPWMpLGMpKXtmb3IoZz1tLm1hcCh1YihpLCJzY3JpcHQiKSx4YiksZj1nLmxlbmd0aDtsPmo7aisrKWQ9aSxqIT09byYmKGQ9bS5jbG9uZShkLCEwLCEwKSxmJiZtLm1lcmdlKGcsdWIoZCwic2NyaXB0IikpKSxiLmNhbGwodGhpc1tqXSxkLGopO2lmKGYpZm9yKGg9Z1tnLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LG0ubWFwKGcseWIpLGo9MDtmPmo7aisrKWQ9Z1tqXSxvYi50ZXN0KGQudHlwZXx8IiIpJiYhbS5fZGF0YShkLCJnbG9iYWxFdmFsIikmJm0uY29udGFpbnMoaCxkKSYmKGQuc3JjP20uX2V2YWxVcmwmJm0uX2V2YWxVcmwoZC5zcmMpOm0uZ2xvYmFsRXZhbCgoZC50ZXh0fHxkLnRleHRDb250ZW50fHxkLmlubmVySFRNTHx8IiIpLnJlcGxhY2UocWIsIiIpKSk7aT1jPW51bGx9cmV0dXJuIHRoaXN9fSksbS5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXttLmZuW2FdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPTAsZT1bXSxnPW0oYSksaD1nLmxlbmd0aC0xO2g+PWQ7ZCsrKWM9ZD09PWg/dGhpczp0aGlzLmNsb25lKCEwKSxtKGdbZF0pW2JdKGMpLGYuYXBwbHkoZSxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZSl9fSk7dmFyIENiLERiPXt9O2Z1bmN0aW9uIEViKGIsYyl7dmFyIGQsZT1tKGMuY3JlYXRlRWxlbWVudChiKSkuYXBwZW5kVG8oYy5ib2R5KSxmPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUmJihkPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUoZVswXSkpP2QuZGlzcGxheTptLmNzcyhlWzBdLCJkaXNwbGF5Iik7cmV0dXJuIGUuZGV0YWNoKCksZn1mdW5jdGlvbiBGYihhKXt2YXIgYj15LGM9RGJbYV07cmV0dXJuIGN8fChjPUViKGEsYiksIm5vbmUiIT09YyYmY3x8KENiPShDYnx8bSgiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhiLmRvY3VtZW50RWxlbWVudCksYj0oQ2JbMF0uY29udGVudFdpbmRvd3x8Q2JbMF0uY29udGVudERvY3VtZW50KS5kb2N1bWVudCxiLndyaXRlKCksYi5jbG9zZSgpLGM9RWIoYSxiKSxDYi5kZXRhY2goKSksRGJbYV09YyksY30hZnVuY3Rpb24oKXt2YXIgYTtrLnNocmlua1dyYXBCbG9ja3M9ZnVuY3Rpb24oKXtpZihudWxsIT1hKXJldHVybiBhO2E9ITE7dmFyIGIsYyxkO3JldHVybiBjPXkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxjJiZjLnN0eWxlPyhiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZD15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLGMuYXBwZW5kQ2hpbGQoZCkuYXBwZW5kQ2hpbGQoYiksdHlwZW9mIGIuc3R5bGUuem9vbSE9PUsmJihiLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MXB4O3dpZHRoOjFweDt6b29tOjEiLGIuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSkuc3R5bGUud2lkdGg9IjVweCIsYT0zIT09Yi5vZmZzZXRXaWR0aCksYy5yZW1vdmVDaGlsZChkKSxhKTp2b2lkIDB9fSgpO3ZhciBHYj0vXm1hcmdpbi8sSGI9bmV3IFJlZ0V4cCgiXigiK1MrIikoPyFweClbYS16JV0rJCIsImkiKSxJYixKYixLYj0vXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC87YS5nZXRDb21wdXRlZFN0eWxlPyhJYj1mdW5jdGlvbihhKXtyZXR1cm4gYS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYSxudWxsKX0sSmI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5zdHlsZTtyZXR1cm4gYz1jfHxJYihhKSxnPWM/Yy5nZXRQcm9wZXJ0eVZhbHVlKGIpfHxjW2JdOnZvaWQgMCxjJiYoIiIhPT1nfHxtLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKXx8KGc9bS5zdHlsZShhLGIpKSxIYi50ZXN0KGcpJiZHYi50ZXN0KGIpJiYoZD1oLndpZHRoLGU9aC5taW5XaWR0aCxmPWgubWF4V2lkdGgsaC5taW5XaWR0aD1oLm1heFdpZHRoPWgud2lkdGg9ZyxnPWMud2lkdGgsaC53aWR0aD1kLGgubWluV2lkdGg9ZSxoLm1heFdpZHRoPWYpKSx2b2lkIDA9PT1nP2c6ZysiIn0pOnkuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSYmKEliPWZ1bmN0aW9uKGEpe3JldHVybiBhLmN1cnJlbnRTdHlsZX0sSmI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5zdHlsZTtyZXR1cm4gYz1jfHxJYihhKSxnPWM/Y1tiXTp2b2lkIDAsbnVsbD09ZyYmaCYmaFtiXSYmKGc9aFtiXSksSGIudGVzdChnKSYmIUtiLnRlc3QoYikmJihkPWgubGVmdCxlPWEucnVudGltZVN0eWxlLGY9ZSYmZS5sZWZ0LGYmJihlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksaC5sZWZ0PSJmb250U2l6ZSI9PT1iPyIxZW0iOmcsZz1oLnBpeGVsTGVmdCsicHgiLGgubGVmdD1kLGYmJihlLmxlZnQ9ZikpLHZvaWQgMD09PWc/ZzpnKyIifHwiYXV0byJ9KTtmdW5jdGlvbiBMYihhLGIpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXt2YXIgYz1hKCk7aWYobnVsbCE9YylyZXR1cm4gYz92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9YikuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19IWZ1bmN0aW9uKCl7dmFyIGIsYyxkLGUsZixnLGg7aWYoYj15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGIuaW5uZXJIVE1MPSIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLGQ9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdLGM9ZCYmZC5zdHlsZSl7Yy5jc3NUZXh0PSJmbG9hdDpsZWZ0O29wYWNpdHk6LjUiLGsub3BhY2l0eT0iMC41Ij09PWMub3BhY2l0eSxrLmNzc0Zsb2F0PSEhYy5jc3NGbG9hdCxiLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsYi5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLGsuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1iLnN0eWxlLmJhY2tncm91bmRDbGlwLGsuYm94U2l6aW5nPSIiPT09Yy5ib3hTaXppbmd8fCIiPT09Yy5Nb3pCb3hTaXppbmd8fCIiPT09Yy5XZWJraXRCb3hTaXppbmcsbS5leHRlbmQoayx7cmVsaWFibGVIaWRkZW5PZmZzZXRzOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWcmJmkoKSxnfSxib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT1mJiZpKCksZn0scGl4ZWxQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBudWxsPT1lJiZpKCksZX0scmVsaWFibGVNYXJnaW5SaWdodDpmdW5jdGlvbigpe3JldHVybiBudWxsPT1oJiZpKCksaH19KTtmdW5jdGlvbiBpKCl7dmFyIGIsYyxkLGk7Yz15LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sYyYmYy5zdHlsZSYmKGI9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsYy5hcHBlbmRDaGlsZChkKS5hcHBlbmRDaGlsZChiKSxiLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MSU7dG9wOjElO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NHB4O3Bvc2l0aW9uOmFic29sdXRlIixlPWY9ITEsaD0hMCxhLmdldENvbXB1dGVkU3R5bGUmJihlPSIxJSIhPT0oYS5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCl8fHt9KS50b3AsZj0iNHB4Ij09PShhLmdldENvbXB1dGVkU3R5bGUoYixudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGgsaT1iLmFwcGVuZENoaWxkKHkuY3JlYXRlRWxlbWVudCgiZGl2IikpLGkuc3R5bGUuY3NzVGV4dD1iLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MCIsaS5zdHlsZS5tYXJnaW5SaWdodD1pLnN0eWxlLndpZHRoPSIwIixiLnN0eWxlLndpZHRoPSIxcHgiLGg9IXBhcnNlRmxvYXQoKGEuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpfHx7fSkubWFyZ2luUmlnaHQpKSxiLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIsaT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLGlbMF0uc3R5bGUuY3NzVGV4dD0ibWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowO2Rpc3BsYXk6bm9uZSIsZz0wPT09aVswXS5vZmZzZXRIZWlnaHQsZyYmKGlbMF0uc3R5bGUuZGlzcGxheT0iIixpWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGc9MD09PWlbMF0ub2Zmc2V0SGVpZ2h0KSxjLnJlbW92ZUNoaWxkKGQpKX19fSgpLG0uc3dhcD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc9e307Zm9yKGYgaW4gYilnW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5hcHBseShhLGR8fFtdKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09Z1tmXTtyZXR1cm4gZX07dmFyIE1iPS9hbHBoYVwoW14pXSpcKS9pLE5iPS9vcGFjaXR5XHMqPVxzKihbXildKikvLE9iPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxQYj1uZXcgUmVnRXhwKCJeKCIrUysiKSguKikkIiwiaSIpLFFiPW5ldyBSZWdFeHAoIl4oWystXSk9KCIrUysiKSIsImkiKSxSYj17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sU2I9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9LFRiPVsiV2Via2l0IiwiTyIsIk1veiIsIm1zIl07ZnVuY3Rpb24gVWIoYSxiKXtpZihiIGluIGEpcmV0dXJuIGI7dmFyIGM9Yi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStiLnNsaWNlKDEpLGQ9YixlPVRiLmxlbmd0aDt3aGlsZShlLS0paWYoYj1UYltlXStjLGIgaW4gYSlyZXR1cm4gYjtyZXR1cm4gZH1mdW5jdGlvbiBWYihhLGIpe2Zvcih2YXIgYyxkLGUsZj1bXSxnPTAsaD1hLmxlbmd0aDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoZltnXT1tLl9kYXRhKGQsIm9sZGRpc3BsYXkiKSxjPWQuc3R5bGUuZGlzcGxheSxiPyhmW2ddfHwibm9uZSIhPT1jfHwoZC5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PWQuc3R5bGUuZGlzcGxheSYmVShkKSYmKGZbZ109bS5fZGF0YShkLCJvbGRkaXNwbGF5IixGYihkLm5vZGVOYW1lKSkpKTooZT1VKGQpLChjJiYibm9uZSIhPT1jfHwhZSkmJm0uX2RhdGEoZCwib2xkZGlzcGxheSIsZT9jOm0uY3NzKGQsImRpc3BsYXkiKSkpKTtmb3IoZz0wO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihiJiYibm9uZSIhPT1kLnN0eWxlLmRpc3BsYXkmJiIiIT09ZC5zdHlsZS5kaXNwbGF5fHwoZC5zdHlsZS5kaXNwbGF5PWI/ZltnXXx8IiI6Im5vbmUiKSk7cmV0dXJuIGF9ZnVuY3Rpb24gV2IoYSxiLGMpe3ZhciBkPVBiLmV4ZWMoYik7cmV0dXJuIGQ/TWF0aC5tYXgoMCxkWzFdLShjfHwwKSkrKGRbMl18fCJweCIpOmJ9ZnVuY3Rpb24gWGIoYSxiLGMsZCxlKXtmb3IodmFyIGY9Yz09PShkPyJib3JkZXIiOiJjb250ZW50Iik/NDoid2lkdGgiPT09Yj8xOjAsZz0wOzQ+ZjtmKz0yKSJtYXJnaW4iPT09YyYmKGcrPW0uY3NzKGEsYytUW2ZdLCEwLGUpKSxkPygiY29udGVudCI9PT1jJiYoZy09bS5jc3MoYSwicGFkZGluZyIrVFtmXSwhMCxlKSksIm1hcmdpbiIhPT1jJiYoZy09bS5jc3MoYSwiYm9yZGVyIitUW2ZdKyJXaWR0aCIsITAsZSkpKTooZys9bS5jc3MoYSwicGFkZGluZyIrVFtmXSwhMCxlKSwicGFkZGluZyIhPT1jJiYoZys9bS5jc3MoYSwiYm9yZGVyIitUW2ZdKyJXaWR0aCIsITAsZSkpKTtyZXR1cm4gZ31mdW5jdGlvbiBZYihhLGIsYyl7dmFyIGQ9ITAsZT0id2lkdGgiPT09Yj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0LGY9SWIoYSksZz1rLmJveFNpemluZyYmImJvcmRlci1ib3giPT09bS5jc3MoYSwiYm94U2l6aW5nIiwhMSxmKTtpZigwPj1lfHxudWxsPT1lKXtpZihlPUpiKGEsYixmKSwoMD5lfHxudWxsPT1lKSYmKGU9YS5zdHlsZVtiXSksSGIudGVzdChlKSlyZXR1cm4gZTtkPWcmJihrLmJveFNpemluZ1JlbGlhYmxlKCl8fGU9PT1hLnN0eWxlW2JdKSxlPXBhcnNlRmxvYXQoZSl8fDB9cmV0dXJuIGUrWGIoYSxiLGN8fChnPyJib3JkZXIiOiJjb250ZW50IiksZCxmKSsicHgifW0uZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9SmIoYSwib3BhY2l0eSIpO3JldHVybiIiPT09Yz8iMSI6Y319fX0sY3NzTnVtYmVyOntjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0IjprLmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGIsYyxkKXtpZihhJiYzIT09YS5ub2RlVHlwZSYmOCE9PWEubm9kZVR5cGUmJmEuc3R5bGUpe3ZhciBlLGYsZyxoPW0uY2FtZWxDYXNlKGIpLGk9YS5zdHlsZTtpZihiPW0uY3NzUHJvcHNbaF18fChtLmNzc1Byb3BzW2hdPVViKGksaCkpLGc9bS5jc3NIb29rc1tiXXx8bS5jc3NIb29rc1toXSx2b2lkIDA9PT1jKXJldHVybiBnJiYiZ2V0ImluIGcmJnZvaWQgMCE9PShlPWcuZ2V0KGEsITEsZCkpP2U6aVtiXTtpZihmPXR5cGVvZiBjLCJzdHJpbmciPT09ZiYmKGU9UWIuZXhlYyhjKSkmJihjPShlWzFdKzEpKmVbMl0rcGFyc2VGbG9hdChtLmNzcyhhLGIpKSxmPSJudW1iZXIiKSxudWxsIT1jJiZjPT09YyYmKCJudW1iZXIiIT09Znx8bS5jc3NOdW1iZXJbaF18fChjKz0icHgiKSxrLmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1jfHwwIT09Yi5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChpW2JdPSJpbmhlcml0IiksIShnJiYic2V0ImluIGcmJnZvaWQgMD09PShjPWcuc2V0KGEsYyxkKSkpKSl0cnl7aVtiXT1jfWNhdGNoKGope319fSxjc3M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGg9bS5jYW1lbENhc2UoYik7cmV0dXJuIGI9bS5jc3NQcm9wc1toXXx8KG0uY3NzUHJvcHNbaF09VWIoYS5zdHlsZSxoKSksZz1tLmNzc0hvb2tzW2JdfHxtLmNzc0hvb2tzW2hdLGcmJiJnZXQiaW4gZyYmKGY9Zy5nZXQoYSwhMCxjKSksdm9pZCAwPT09ZiYmKGY9SmIoYSxiLGQpKSwibm9ybWFsIj09PWYmJmIgaW4gU2ImJihmPVNiW2JdKSwiIj09PWN8fGM/KGU9cGFyc2VGbG9hdChmKSxjPT09ITB8fG0uaXNOdW1lcmljKGUpP2V8fDA6Zik6Zn19KSxtLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGEsYil7bS5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gYz9PYi50ZXN0KG0uY3NzKGEsImRpc3BsYXkiKSkmJjA9PT1hLm9mZnNldFdpZHRoP20uc3dhcChhLFJiLGZ1bmN0aW9uKCl7cmV0dXJuIFliKGEsYixkKX0pOlliKGEsYixkKTp2b2lkIDB9LHNldDpmdW5jdGlvbihhLGMsZCl7dmFyIGU9ZCYmSWIoYSk7cmV0dXJuIFdiKGEsYyxkP1hiKGEsYixkLGsuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT1tLmNzcyhhLCJib3hTaXppbmciLCExLGUpLGUpOjApfX19KSxrLm9wYWNpdHl8fChtLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBOYi50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/LjAxKnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9bS5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IisxMDAqYisiKSI6IiIsZj1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xLChiPj0xfHwiIj09PWIpJiYiIj09PW0udHJpbShmLnJlcGxhY2UoTWIsIiIpKSYmYy5yZW1vdmVBdHRyaWJ1dGUmJihjLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIiksIiI9PT1ifHxkJiYhZC5maWx0ZXIpfHwoYy5maWx0ZXI9TWIudGVzdChmKT9mLnJlcGxhY2UoTWIsZSk6ZisiICIrZSl9fSksbS5jc3NIb29rcy5tYXJnaW5SaWdodD1MYihrLnJlbGlhYmxlTWFyZ2luUmlnaHQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9tLnN3YXAoYSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sSmIsW2EsIm1hcmdpblJpZ2h0Il0pOnZvaWQgMH0pLG0uZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGEsYil7bS5jc3NIb29rc1thK2JdPXtleHBhbmQ6ZnVuY3Rpb24oYyl7Zm9yKHZhciBkPTAsZT17fSxmPSJzdHJpbmciPT10eXBlb2YgYz9jLnNwbGl0KCIgIik6W2NdOzQ+ZDtkKyspZVthK1RbZF0rYl09ZltkXXx8ZltkLTJdfHxmWzBdO3JldHVybiBlfX0sR2IudGVzdChhKXx8KG0uY3NzSG9va3NbYStiXS5zZXQ9V2IpfSksbS5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihhLGIpe3JldHVybiBWKHRoaXMsZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj17fSxnPTA7aWYobS5pc0FycmF5KGIpKXtmb3IoZD1JYihhKSxlPWIubGVuZ3RoO2U+ZztnKyspZltiW2ddXT1tLmNzcyhhLGJbZ10sITEsZCk7cmV0dXJuIGZ9cmV0dXJuIHZvaWQgMCE9PWM/bS5zdHlsZShhLGIsYyk6bS5jc3MoYSxiKX0sYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gVmIodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gVmIodGhpcyl9LHRvZ2dsZTpmdW5jdGlvbihhKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBhP2E/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7VSh0aGlzKT9tKHRoaXMpLnNob3coKTptKHRoaXMpLmhpZGUoKX0pfX0pO2Z1bmN0aW9uIFpiKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBaYi5wcm90b3R5cGUuaW5pdChhLGIsYyxkLGUpfW0uVHdlZW49WmIsWmIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpaYixpbml0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmVsZW09YSx0aGlzLnByb3A9Yyx0aGlzLmVhc2luZz1lfHwic3dpbmciLHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1kLHRoaXMudW5pdD1mfHwobS5jc3NOdW1iZXJbY10/IiI6InB4IikKfSxjdXI6ZnVuY3Rpb24oKXt2YXIgYT1aYi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gYSYmYS5nZXQ/YS5nZXQodGhpcyk6WmIucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGEpe3ZhciBiLGM9WmIucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMucG9zPWI9dGhpcy5vcHRpb25zLmR1cmF0aW9uP20uZWFzaW5nW3RoaXMuZWFzaW5nXShhLHRoaXMub3B0aW9ucy5kdXJhdGlvbiphLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOmEsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKmIrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksYyYmYy5zZXQ/Yy5zZXQodGhpcyk6WmIucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sWmIucHJvdG90eXBlLmluaXQucHJvdG90eXBlPVpiLnByb3RvdHlwZSxaYi5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIG51bGw9PWEuZWxlbVthLnByb3BdfHxhLmVsZW0uc3R5bGUmJm51bGwhPWEuZWxlbS5zdHlsZVthLnByb3BdPyhiPW0uY3NzKGEuZWxlbSxhLnByb3AsIiIpLGImJiJhdXRvIiE9PWI/YjowKTphLmVsZW1bYS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGEpe20uZnguc3RlcFthLnByb3BdP20uZnguc3RlcFthLnByb3BdKGEpOmEuZWxlbS5zdHlsZSYmKG51bGwhPWEuZWxlbS5zdHlsZVttLmNzc1Byb3BzW2EucHJvcF1dfHxtLmNzc0hvb2tzW2EucHJvcF0pP20uc3R5bGUoYS5lbGVtLGEucHJvcCxhLm5vdythLnVuaXQpOmEuZWxlbVthLnByb3BdPWEubm93fX19LFpiLnByb3BIb29rcy5zY3JvbGxUb3A9WmIucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihhKXthLmVsZW0ubm9kZVR5cGUmJmEuZWxlbS5wYXJlbnROb2RlJiYoYS5lbGVtW2EucHJvcF09YS5ub3cpfX0sbS5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sc3dpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuLjUtTWF0aC5jb3MoYSpNYXRoLlBJKS8yfX0sbS5meD1aYi5wcm90b3R5cGUuaW5pdCxtLmZ4LnN0ZXA9e307dmFyICRiLF9iLGFjPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxiYz1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrUysiKShbYS16JV0qKSQiLCJpIiksY2M9L3F1ZXVlSG9va3MkLyxkYz1baWNdLGVjPXsiKiI6W2Z1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jcmVhdGVUd2VlbihhLGIpLGQ9Yy5jdXIoKSxlPWJjLmV4ZWMoYiksZj1lJiZlWzNdfHwobS5jc3NOdW1iZXJbYV0/IiI6InB4IiksZz0obS5jc3NOdW1iZXJbYV18fCJweCIhPT1mJiYrZCkmJmJjLmV4ZWMobS5jc3MoYy5lbGVtLGEpKSxoPTEsaT0yMDtpZihnJiZnWzNdIT09Zil7Zj1mfHxnWzNdLGU9ZXx8W10sZz0rZHx8MTtkbyBoPWh8fCIuNSIsZy89aCxtLnN0eWxlKGMuZWxlbSxhLGcrZik7d2hpbGUoaCE9PShoPWMuY3VyKCkvZCkmJjEhPT1oJiYtLWkpfXJldHVybiBlJiYoZz1jLnN0YXJ0PStnfHwrZHx8MCxjLnVuaXQ9ZixjLmVuZD1lWzFdP2crKGVbMV0rMSkqZVsyXTorZVsyXSksY31dfTtmdW5jdGlvbiBmYygpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7JGI9dm9pZCAwfSksJGI9bS5ub3coKX1mdW5jdGlvbiBnYyhhLGIpe3ZhciBjLGQ9e2hlaWdodDphfSxlPTA7Zm9yKGI9Yj8xOjA7ND5lO2UrPTItYiljPVRbZV0sZFsibWFyZ2luIitjXT1kWyJwYWRkaW5nIitjXT1hO3JldHVybiBiJiYoZC5vcGFjaXR5PWQud2lkdGg9YSksZH1mdW5jdGlvbiBoYyhhLGIsYyl7Zm9yKHZhciBkLGU9KGVjW2JdfHxbXSkuY29uY2F0KGVjWyIqIl0pLGY9MCxnPWUubGVuZ3RoO2c+ZjtmKyspaWYoZD1lW2ZdLmNhbGwoYyxiLGEpKXJldHVybiBkfWZ1bmN0aW9uIGljKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixsLG49dGhpcyxvPXt9LHA9YS5zdHlsZSxxPWEubm9kZVR5cGUmJlUoYSkscj1tLl9kYXRhKGEsImZ4c2hvdyIpO2MucXVldWV8fChoPW0uX3F1ZXVlSG9va3MoYSwiZngiKSxudWxsPT1oLnVucXVldWVkJiYoaC51bnF1ZXVlZD0wLGk9aC5lbXB0eS5maXJlLGguZW1wdHkuZmlyZT1mdW5jdGlvbigpe2gudW5xdWV1ZWR8fGkoKX0pLGgudW5xdWV1ZWQrKyxuLmFsd2F5cyhmdW5jdGlvbigpe24uYWx3YXlzKGZ1bmN0aW9uKCl7aC51bnF1ZXVlZC0tLG0ucXVldWUoYSwiZngiKS5sZW5ndGh8fGguZW1wdHkuZmlyZSgpfSl9KSksMT09PWEubm9kZVR5cGUmJigiaGVpZ2h0ImluIGJ8fCJ3aWR0aCJpbiBiKSYmKGMub3ZlcmZsb3c9W3Aub3ZlcmZsb3cscC5vdmVyZmxvd1gscC5vdmVyZmxvd1ldLGo9bS5jc3MoYSwiZGlzcGxheSIpLGw9Im5vbmUiPT09aj9tLl9kYXRhKGEsIm9sZGRpc3BsYXkiKXx8RmIoYS5ub2RlTmFtZSk6aiwiaW5saW5lIj09PWwmJiJub25lIj09PW0uY3NzKGEsImZsb2F0IikmJihrLmlubGluZUJsb2NrTmVlZHNMYXlvdXQmJiJpbmxpbmUiIT09RmIoYS5ub2RlTmFtZSk/cC56b29tPTE6cC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksYy5vdmVyZmxvdyYmKHAub3ZlcmZsb3c9ImhpZGRlbiIsay5zaHJpbmtXcmFwQmxvY2tzKCl8fG4uYWx3YXlzKGZ1bmN0aW9uKCl7cC5vdmVyZmxvdz1jLm92ZXJmbG93WzBdLHAub3ZlcmZsb3dYPWMub3ZlcmZsb3dbMV0scC5vdmVyZmxvd1k9Yy5vdmVyZmxvd1syXX0pKTtmb3IoZCBpbiBiKWlmKGU9YltkXSxhYy5leGVjKGUpKXtpZihkZWxldGUgYltkXSxmPWZ8fCJ0b2dnbGUiPT09ZSxlPT09KHE/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWV8fCFyfHx2b2lkIDA9PT1yW2RdKWNvbnRpbnVlO3E9ITB9b1tkXT1yJiZyW2RdfHxtLnN0eWxlKGEsZCl9ZWxzZSBqPXZvaWQgMDtpZihtLmlzRW1wdHlPYmplY3QobykpImlubGluZSI9PT0oIm5vbmUiPT09aj9GYihhLm5vZGVOYW1lKTpqKSYmKHAuZGlzcGxheT1qKTtlbHNle3I/ImhpZGRlbiJpbiByJiYocT1yLmhpZGRlbik6cj1tLl9kYXRhKGEsImZ4c2hvdyIse30pLGYmJihyLmhpZGRlbj0hcSkscT9tKGEpLnNob3coKTpuLmRvbmUoZnVuY3Rpb24oKXttKGEpLmhpZGUoKX0pLG4uZG9uZShmdW5jdGlvbigpe3ZhciBiO20uX3JlbW92ZURhdGEoYSwiZnhzaG93Iik7Zm9yKGIgaW4gbyltLnN0eWxlKGEsYixvW2JdKX0pO2ZvcihkIGluIG8pZz1oYyhxP3JbZF06MCxkLG4pLGQgaW4gcnx8KHJbZF09Zy5zdGFydCxxJiYoZy5lbmQ9Zy5zdGFydCxnLnN0YXJ0PSJ3aWR0aCI9PT1kfHwiaGVpZ2h0Ij09PWQ/MTowKSl9fWZ1bmN0aW9uIGpjKGEsYil7dmFyIGMsZCxlLGYsZztmb3IoYyBpbiBhKWlmKGQ9bS5jYW1lbENhc2UoYyksZT1iW2RdLGY9YVtjXSxtLmlzQXJyYXkoZikmJihlPWZbMV0sZj1hW2NdPWZbMF0pLGMhPT1kJiYoYVtkXT1mLGRlbGV0ZSBhW2NdKSxnPW0uY3NzSG9va3NbZF0sZyYmImV4cGFuZCJpbiBnKXtmPWcuZXhwYW5kKGYpLGRlbGV0ZSBhW2RdO2ZvcihjIGluIGYpYyBpbiBhfHwoYVtjXT1mW2NdLGJbY109ZSl9ZWxzZSBiW2RdPWV9ZnVuY3Rpb24ga2MoYSxiLGMpe3ZhciBkLGUsZj0wLGc9ZGMubGVuZ3RoLGg9bS5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3IodmFyIGI9JGJ8fGZjKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRpb24tYiksZD1jL2ouZHVyYXRpb258fDAsZj0xLWQsZz0wLGk9ai50d2VlbnMubGVuZ3RoO2k+ZztnKyspai50d2VlbnNbZ10ucnVuKGYpO3JldHVybiBoLm5vdGlmeVdpdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEpfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOm0uZXh0ZW5kKHt9LGIpLG9wdHM6bS5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVydGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTokYnx8ZmMoKSxkdXJhdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihiLGMpe3ZhciBkPW0uVHdlZW4oYSxqLm9wdHMsYixjLGoub3B0cy5zcGVjaWFsRWFzaW5nW2JdfHxqLm9wdHMuZWFzaW5nKTtyZXR1cm4gai50d2VlbnMucHVzaChkKSxkfSxzdG9wOmZ1bmN0aW9uKGIpe3ZhciBjPTAsZD1iP2oudHdlZW5zLmxlbmd0aDowO2lmKGUpcmV0dXJuIHRoaXM7Zm9yKGU9ITA7ZD5jO2MrKylqLnR3ZWVuc1tjXS5ydW4oMSk7cmV0dXJuIGI/aC5yZXNvbHZlV2l0aChhLFtqLGJdKTpoLnJlamVjdFdpdGgoYSxbaixiXSksdGhpc319KSxrPWoucHJvcHM7Zm9yKGpjKGssai5vcHRzLnNwZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1kY1tmXS5jYWxsKGosYSxrLGoub3B0cykpcmV0dXJuIGQ7cmV0dXJuIG0ubWFwKGssaGMsaiksbS5pc0Z1bmN0aW9uKGoub3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaiksbS5meC50aW1lcihtLmV4dGVuZChpLHtlbGVtOmEsYW5pbTpqLHF1ZXVlOmoub3B0cy5xdWV1ZX0pKSxqLnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3YXlzKX1tLkFuaW1hdGlvbj1tLmV4dGVuZChrYyx7dHdlZW5lcjpmdW5jdGlvbihhLGIpe20uaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5zcGxpdCgiICIpO2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxlY1tjXT1lY1tjXXx8W10sZWNbY10udW5zaGlmdChiKX0scHJlZmlsdGVyOmZ1bmN0aW9uKGEsYil7Yj9kYy51bnNoaWZ0KGEpOmRjLnB1c2goYSl9fSksbS5zcGVlZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmIm9iamVjdCI9PXR5cGVvZiBhP20uZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8bS5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFtLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVybiBkLmR1cmF0aW9uPW0uZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiBkLmR1cmF0aW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBtLmZ4LnNwZWVkcz9tLmZ4LnNwZWVkc1tkLmR1cmF0aW9uXTptLmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ZC5xdWV1ZXx8ZC5xdWV1ZT09PSEwKSYmKGQucXVldWU9ImZ4IiksZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bS5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZtLmRlcXVldWUodGhpcyxkLnF1ZXVlKX0sZH0sbS5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoVSkuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bS5pc0VtcHR5T2JqZWN0KGEpLGY9bS5zcGVlZChiLGMsZCksZz1mdW5jdGlvbigpe3ZhciBiPWtjKHRoaXMsbS5leHRlbmQoe30sYSksZik7KGV8fG0uX2RhdGEodGhpcywiZmluaXNoIikpJiZiLnN0b3AoITApfTtyZXR1cm4gZy5maW5pc2g9ZyxlfHxmLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZi5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5zdG9wO2RlbGV0ZSBhLnN0b3AsYihjKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYz1iLGI9YSxhPXZvaWQgMCksYiYmYSE9PSExJiZ0aGlzLnF1ZXVlKGF8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPSEwLGU9bnVsbCE9YSYmYSsicXVldWVIb29rcyIsZj1tLnRpbWVycyxnPW0uX2RhdGEodGhpcyk7aWYoZSlnW2VdJiZnW2VdLnN0b3AmJmQoZ1tlXSk7ZWxzZSBmb3IoZSBpbiBnKWdbZV0mJmdbZV0uc3RvcCYmY2MudGVzdChlKSYmZChnW2VdKTtmb3IoZT1mLmxlbmd0aDtlLS07KWZbZV0uZWxlbSE9PXRoaXN8fG51bGwhPWEmJmZbZV0ucXVldWUhPT1hfHwoZltlXS5hbmltLnN0b3AoYyksYj0hMSxmLnNwbGljZShlLDEpKTsoYnx8IWMpJiZtLmRlcXVldWUodGhpcyxhKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT0hMSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGIsYz1tLl9kYXRhKHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tzIl0sZj1tLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbS5xdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCksYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1hJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5iO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgYy5maW5pc2h9KX19KSxtLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bS5mbltiXTttLmZuW2JdPWZ1bmN0aW9uKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoZ2MoYiwhMCksYSxkLGUpfX0pLG0uZWFjaCh7c2xpZGVEb3duOmdjKCJzaG93Iiksc2xpZGVVcDpnYygiaGlkZSIpLHNsaWRlVG9nZ2xlOmdjKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bS5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxtLnRpbWVycz1bXSxtLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPW0udGltZXJzLGM9MDtmb3IoJGI9bS5ub3coKTtjPGIubGVuZ3RoO2MrKylhPWJbY10sYSgpfHxiW2NdIT09YXx8Yi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxtLmZ4LnN0b3AoKSwkYj12b2lkIDB9LG0uZngudGltZXI9ZnVuY3Rpb24oYSl7bS50aW1lcnMucHVzaChhKSxhKCk/bS5meC5zdGFydCgpOm0udGltZXJzLnBvcCgpfSxtLmZ4LmludGVydmFsPTEzLG0uZnguc3RhcnQ9ZnVuY3Rpb24oKXtfYnx8KF9iPXNldEludGVydmFsKG0uZngudGljayxtLmZ4LmludGVydmFsKSl9LG0uZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoX2IpLF9iPW51bGx9LG0uZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LG0uZm4uZGVsYXk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1tLmZ4P20uZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiLHRoaXMucXVldWUoYixmdW5jdGlvbihiLGMpe3ZhciBkPXNldFRpbWVvdXQoYixhKTtjLnN0b3A9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZCl9fSl9LGZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZTtiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksYi5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxiLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxjPXkuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksZT1jLmFwcGVuZENoaWxkKHkuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxkLnN0eWxlLmNzc1RleHQ9InRvcDoxcHgiLGsuZ2V0U2V0QXR0cmlidXRlPSJ0IiE9PWIuY2xhc3NOYW1lLGsuc3R5bGU9L3RvcC8udGVzdChkLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksay5ocmVmTm9ybWFsaXplZD0iL2EiPT09ZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSxrLmNoZWNrT249ISFhLnZhbHVlLGsub3B0U2VsZWN0ZWQ9ZS5zZWxlY3RlZCxrLmVuY3R5cGU9ISF5LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGMuZGlzYWJsZWQ9ITAsay5vcHREaXNhYmxlZD0hZS5kaXNhYmxlZCxhPXkuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxhLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSxrLmlucHV0PSIiPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIiksYS52YWx1ZT0idCIsYS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGsucmFkaW9WYWx1ZT0idCI9PT1hLnZhbHVlfSgpO3ZhciBsYz0vXHIvZzttLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQ9bS5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwodGhpcyxjLG0odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPSIiOiJudW1iZXIiPT10eXBlb2YgZT9lKz0iIjptLmlzQXJyYXkoZSkmJihlPW0ubWFwKGUsZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6YSsiIn0pKSxiPW0udmFsSG9va3NbdGhpcy50eXBlXXx8bS52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJzZXQiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwodGhpcy52YWx1ZT1lKSl9KTtpZihlKXJldHVybiBiPW0udmFsSG9va3NbZS50eXBlXXx8bS52YWxIb29rc1tlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJnZXQiaW4gYiYmdm9pZCAwIT09KGM9Yi5nZXQoZSwidmFsdWUiKSk/YzooYz1lLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgYz9jLnJlcGxhY2UobGMsIiIpOm51bGw9PWM/IiI6Yyl9fX0pLG0uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bS5maW5kLmF0dHIoYSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9Yj9iOm0udHJpbShtLnRleHQoYSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZD1hLm9wdGlvbnMsZT1hLnNlbGVjdGVkSW5kZXgsZj0ic2VsZWN0LW9uZSI9PT1hLnR5cGV8fDA+ZSxnPWY/bnVsbDpbXSxoPWY/ZSsxOmQubGVuZ3RoLGk9MD5lP2g6Zj9lOjA7aD5pO2krKylpZihjPWRbaV0sISghYy5zZWxlY3RlZCYmaSE9PWV8fChrLm9wdERpc2FibGVkP2MuZGlzYWJsZWQ6bnVsbCE9PWMuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpKXx8Yy5wYXJlbnROb2RlLmRpc2FibGVkJiZtLm5vZGVOYW1lKGMucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKGI9bShjKS52YWwoKSxmKXJldHVybiBiO2cucHVzaChiKX1yZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPWEub3B0aW9ucyxmPW0ubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7d2hpbGUoZy0tKWlmKGQ9ZVtnXSxtLmluQXJyYXkobS52YWxIb29rcy5vcHRpb24uZ2V0KGQpLGYpPj0wKXRyeXtkLnNlbGVjdGVkPWM9ITB9Y2F0Y2goaCl7ZC5zY3JvbGxIZWlnaHR9ZWxzZSBkLnNlbGVjdGVkPSExO3JldHVybiBjfHwoYS5zZWxlY3RlZEluZGV4PS0xKSxlfX19fSksbS5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7bS52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uaXNBcnJheShiKT9hLmNoZWNrZWQ9bS5pbkFycmF5KG0oYSkudmFsKCksYik+PTA6dm9pZCAwfX0say5jaGVja09ufHwobS52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PT1hLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24iOmEudmFsdWV9KX0pO3ZhciBtYyxuYyxvYz1tLmV4cHIuYXR0ckhhbmRsZSxwYz0vXig/OmNoZWNrZWR8c2VsZWN0ZWQpJC9pLHFjPWsuZ2V0U2V0QXR0cmlidXRlLHJjPWsuaW5wdXQ7bS5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVih0aGlzLG0uYXR0cixhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bS5yZW1vdmVBdHRyKHRoaXMsYSl9KX19KSxtLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPWEubm9kZVR5cGU7aWYoYSYmMyE9PWYmJjghPT1mJiYyIT09ZilyZXR1cm4gdHlwZW9mIGEuZ2V0QXR0cmlidXRlPT09Sz9tLnByb3AoYSxiLGMpOigxPT09ZiYmbS5pc1hNTERvYyhhKXx8KGI9Yi50b0xvd2VyQ2FzZSgpLGQ9bS5hdHRySG9va3NbYl18fChtLmV4cHIubWF0Y2guYm9vbC50ZXN0KGIpP25jOm1jKSksdm9pZCAwPT09Yz9kJiYiZ2V0ImluIGQmJm51bGwhPT0oZT1kLmdldChhLGIpKT9lOihlPW0uZmluZC5hdHRyKGEsYiksbnVsbD09ZT92b2lkIDA6ZSk6bnVsbCE9PWM/ZCYmInNldCJpbiBkJiZ2b2lkIDAhPT0oZT1kLnNldChhLGMsYikpP2U6KGEuc2V0QXR0cmlidXRlKGIsYysiIiksYyk6dm9pZCBtLnJlbW92ZUF0dHIoYSxiKSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxmPWImJmIubWF0Y2goRSk7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2UrK10pZD1tLnByb3BGaXhbY118fGMsbS5leHByLm1hdGNoLmJvb2wudGVzdChjKT9yYyYmcWN8fCFwYy50ZXN0KGMpP2FbZF09ITE6YVttLmNhbWVsQ2FzZSgiZGVmYXVsdC0iK2MpXT1hW2RdPSExOm0uYXR0cihhLGMsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHFjP2M6ZCl9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoIWsucmFkaW9WYWx1ZSYmInJhZGlvIj09PWImJm0ubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX19fSksbmM9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9PT0hMT9tLnJlbW92ZUF0dHIoYSxjKTpyYyYmcWN8fCFwYy50ZXN0KGMpP2Euc2V0QXR0cmlidXRlKCFxYyYmbS5wcm9wRml4W2NdfHxjLGMpOmFbbS5jYW1lbENhc2UoImRlZmF1bHQtIitjKV09YVtjXT0hMCxjfX0sbS5lYWNoKG0uZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9b2NbYl18fG0uZmluZC5hdHRyO29jW2JdPXJjJiZxY3x8IXBjLnRlc3QoYik/ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGY7cmV0dXJuIGR8fChmPW9jW2JdLG9jW2JdPWUsZT1udWxsIT1jKGEsYixkKT9iLnRvTG93ZXJDYXNlKCk6bnVsbCxvY1tiXT1mKSxlfTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmFbbS5jYW1lbENhc2UoImRlZmF1bHQtIitiKV0/Yi50b0xvd2VyQ2FzZSgpOm51bGx9fSkscmMmJnFjfHwobS5hdHRySG9va3MudmFsdWU9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0ubm9kZU5hbWUoYSwiaW5wdXQiKT92b2lkKGEuZGVmYXVsdFZhbHVlPWIpOm1jJiZtYy5zZXQoYSxiLGMpfX0pLHFjfHwobWM9e3NldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkfHxhLnNldEF0dHJpYnV0ZU5vZGUoZD1hLm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKGMpKSxkLnZhbHVlPWIrPSIiLCJ2YWx1ZSI9PT1jfHxiPT09YS5nZXRBdHRyaWJ1dGUoYyk/Yjp2b2lkIDB9fSxvYy5pZD1vYy5uYW1lPW9jLmNvb3Jkcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGM/dm9pZCAwOihkPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJiIiIT09ZC52YWx1ZT9kLnZhbHVlOm51bGx9LG0udmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldEF0dHJpYnV0ZU5vZGUoYik7cmV0dXJuIGMmJmMuc3BlY2lmaWVkP2MudmFsdWU6dm9pZCAwfSxzZXQ6bWMuc2V0fSxtLmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e3NldDpmdW5jdGlvbihhLGIsYyl7bWMuc2V0KGEsIiI9PT1iPyExOmIsYyl9fSxtLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7bS5hdHRySG9va3NbYl09e3NldDpmdW5jdGlvbihhLGMpe3JldHVybiIiPT09Yz8oYS5zZXRBdHRyaWJ1dGUoYiwiYXV0byIpLGMpOnZvaWQgMH19fSkpLGsuc3R5bGV8fChtLmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0eWxlLmNzc1RleHR8fHZvaWQgMH0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dD1iKyIifX0pO3ZhciBzYz0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvaSx0Yz0vXig/OmF8YXJlYSkkL2k7bS5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVih0aGlzLG0ucHJvcCxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihhKXtyZXR1cm4gYT1tLnByb3BGaXhbYV18fGEsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYV09dm9pZCAwLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGIpe319KX19KSxtLmV4dGVuZCh7cHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9LHByb3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnPWEubm9kZVR5cGU7aWYoYSYmMyE9PWcmJjghPT1nJiYyIT09ZylyZXR1cm4gZj0xIT09Z3x8IW0uaXNYTUxEb2MoYSksZiYmKGI9bS5wcm9wRml4W2JdfHxiLGU9bS5wcm9wSG9va3NbYl0pLHZvaWQgMCE9PWM/ZSYmInNldCJpbiBlJiZ2b2lkIDAhPT0oZD1lLnNldChhLGMsYikpP2Q6YVtiXT1jOmUmJiJnZXQiaW4gZSYmbnVsbCE9PShkPWUuZ2V0KGEsYikpP2Q6YVtiXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPW0uZmluZC5hdHRyKGEsInRhYmluZGV4Iik7cmV0dXJuIGI/cGFyc2VJbnQoYiwxMCk6c2MudGVzdChhLm5vZGVOYW1lKXx8dGMudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6LTF9fX19KSxrLmhyZWZOb3JtYWxpemVkfHxtLmVhY2goWyJocmVmIiwic3JjIl0sZnVuY3Rpb24oYSxiKXttLnByb3BIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZShiLDQpfX19KSxrLm9wdFNlbGVjdGVkfHwobS5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH19KSxtLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe20ucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxrLmVuY3R5cGV8fChtLnByb3BGaXguZW5jdHlwZT0iZW5jb2RpbmciKTt2YXIgdWM9L1tcdFxyXG5cZl0vZzttLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MCxpPXRoaXMubGVuZ3RoLGo9InN0cmluZyI9PXR5cGVvZiBhJiZhO2lmKG0uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe20odGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoailmb3IoYj0oYXx8IiIpLm1hdGNoKEUpfHxbXTtpPmg7aCsrKWlmKGM9dGhpc1toXSxkPTE9PT1jLm5vZGVUeXBlJiYoYy5jbGFzc05hbWU/KCIgIitjLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UodWMsIiAiKToiICIpKXtmPTA7d2hpbGUoZT1iW2YrK10pZC5pbmRleE9mKCIgIitlKyIgIik8MCYmKGQrPWUrIiAiKTtnPW0udHJpbShkKSxjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MCxpPXRoaXMubGVuZ3RoLGo9MD09PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJpbmciPT10eXBlb2YgYSYmYTtpZihtLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXttKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGopZm9yKGI9KGF8fCIiKS5tYXRjaChFKXx8W107aT5oO2grKylpZihjPXRoaXNbaF0sZD0xPT09Yy5ub2RlVHlwZSYmKGMuY2xhc3NOYW1lPygiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHVjLCIgIik6IiIpKXtmPTA7d2hpbGUoZT1iW2YrK10pd2hpbGUoZC5pbmRleE9mKCIgIitlKyIgIik+PTApZD1kLnJlcGxhY2UoIiAiK2UrIiAiLCIgIik7Zz1hP20udHJpbShkKToiIixjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBiJiYic3RyaW5nIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6dGhpcy5lYWNoKG0uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihjKXttKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsdGhpcy5jbGFzc05hbWUsYiksYil9OmZ1bmN0aW9uKCl7aWYoInN0cmluZyI9PT1jKXt2YXIgYixkPTAsZT1tKHRoaXMpLGY9YS5tYXRjaChFKXx8W107d2hpbGUoYj1mW2QrK10pZS5oYXNDbGFzcyhiKT9lLnJlbW92ZUNsYXNzKGIpOmUuYWRkQ2xhc3MoYil9ZWxzZShjPT09S3x8ImJvb2xlYW4iPT09YykmJih0aGlzLmNsYXNzTmFtZSYmbS5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjptLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhpcy5sZW5ndGg7ZD5jO2MrKylpZigxPT09dGhpc1tjXS5ub2RlVHlwZSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UodWMsIiAiKS5pbmRleE9mKGIpPj0wKXJldHVybiEwO3JldHVybiExfX0pLG0uZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe20uZm5bYl09ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfX0pLG0uZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoYSkubW91c2VsZWF2ZShifHxhKX0sYmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGwsYil9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoYSwiKioiKTp0aGlzLm9mZihiLGF8fCIqKiIsYyl9fSk7dmFyIHZjPW0ubm93KCksd2M9L1w/Lyx4Yz0vKCwpfChcW3x7KXwofXxdKXwiKD86W14iXFxcclxuXXxcXFsiXFxcL2JmbnJ0XXxcXHVbXGRhLWZBLUZdezR9KSoiXHMqOj98dHJ1ZXxmYWxzZXxudWxsfC0/KD8hMFxkKVxkKyg/OlwuXGQrfCkoPzpbZUVdWystXT9cZCt8KS9nO20ucGFyc2VKU09OPWZ1bmN0aW9uKGIpe2lmKGEuSlNPTiYmYS5KU09OLnBhcnNlKXJldHVybiBhLkpTT04ucGFyc2UoYisiIik7dmFyIGMsZD1udWxsLGU9bS50cmltKGIrIiIpO3JldHVybiBlJiYhbS50cmltKGUucmVwbGFjZSh4YyxmdW5jdGlvbihhLGIsZSxmKXtyZXR1cm4gYyYmYiYmKGQ9MCksMD09PWQ/YTooYz1lfHxiLGQrPSFmLSFlLCIiKX0pKT9GdW5jdGlvbigicmV0dXJuICIrZSkoKTptLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LG0ucGFyc2VYTUw9ZnVuY3Rpb24oYil7dmFyIGMsZDtpZighYnx8InN0cmluZyIhPXR5cGVvZiBiKXJldHVybiBudWxsO3RyeXthLkRPTVBhcnNlcj8oZD1uZXcgRE9NUGFyc2VyLGM9ZC5wYXJzZUZyb21TdHJpbmcoYiwidGV4dC94bWwiKSk6KGM9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxjLmFzeW5jPSJmYWxzZSIsYy5sb2FkWE1MKGIpKX1jYXRjaChlKXtjPXZvaWQgMH1yZXR1cm4gYyYmYy5kb2N1bWVudEVsZW1lbnQmJiFjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8bS5lcnJvcigiSW52YWxpZCBYTUw6ICIrYiksY307dmFyIHljLHpjLEFjPS8jLiokLyxCYz0vKFs/Jl0pXz1bXiZdKi8sQ2M9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9nbSxEYz0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxFYz0vXig/OkdFVHxIRUFEKSQvLEZjPS9eXC9cLy8sR2M9L14oW1x3ListXSs6KSg/OlwvXC8oPzpbXlwvPyNdKkB8KShbXlwvPyM6XSopKD86OihcZCspfCl8KS8sSGM9e30sSWM9e30sSmM9IiovIi5jb25jYXQoIioiKTt0cnl7emM9bG9jYXRpb24uaHJlZn1jYXRjaChLYyl7emM9eS5jcmVhdGVFbGVtZW50KCJhIiksemMuaHJlZj0iIix6Yz16Yy5ocmVmfXljPUdjLmV4ZWMoemMudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIExjKGEpe3JldHVybiBmdW5jdGlvbihiLGMpeyJzdHJpbmciIT10eXBlb2YgYiYmKGM9YixiPSIqIik7dmFyIGQsZT0wLGY9Yi50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpfHxbXTtpZihtLmlzRnVuY3Rpb24oYykpd2hpbGUoZD1mW2UrK10pIisiPT09ZC5jaGFyQXQoMCk/KGQ9ZC5zbGljZSgxKXx8IioiLChhW2RdPWFbZF18fFtdKS51bnNoaWZ0KGMpKTooYVtkXT1hW2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24gTWMoYSxiLGMsZCl7dmFyIGU9e30sZj1hPT09SWM7ZnVuY3Rpb24gZyhoKXt2YXIgaTtyZXR1cm4gZVtoXT0hMCxtLmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGp8fGZ8fGVbal0/Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGcoaiksITEpfSksaX1yZXR1cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlWyIqIl0mJmcoIioiKX1mdW5jdGlvbiBOYyhhLGIpe3ZhciBjLGQsZT1tLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGQgaW4gYil2b2lkIDAhPT1iW2RdJiYoKGVbZF0/YTpjfHwoYz17fSkpW2RdPWJbZF0pO3JldHVybiBjJiZtLmV4dGVuZCghMCxhLGMpLGF9ZnVuY3Rpb24gT2MoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jb250ZW50cyxpPWEuZGF0YVR5cGVzO3doaWxlKCIqIj09PWlbMF0paS5zaGlmdCgpLHZvaWQgMD09PWUmJihlPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihlKWZvcihnIGluIGgpaWYoaFtnXSYmaFtnXS50ZXN0KGUpKXtpLnVuc2hpZnQoZyk7YnJlYWt9aWYoaVswXWluIGMpZj1pWzBdO2Vsc2V7Zm9yKGcgaW4gYyl7aWYoIWlbMF18fGEuY29udmVydGVyc1tnKyIgIitpWzBdXSl7Zj1nO2JyZWFrfWR8fChkPWcpfWY9Znx8ZH1yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gUGMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihnIGluIGEuY29udmVydGVycylqW2cudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2Y9ay5zaGlmdCgpO3doaWxlKGYpaWYoYS5yZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxkc1tmXV09YiksIWkmJmQmJmEuZGF0YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlwZSkpLGk9ZixmPWsuc2hpZnQoKSlpZigiKiI9PT1mKWY9aTtlbHNlIGlmKCIqIiE9PWkmJmkhPT1mKXtpZihnPWpbaSsiICIrZl18fGpbIiogIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdCgiICIpLGhbMV09PT1mJiYoZz1qW2krIiAiK2hbMF1dfHxqWyIqICIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhWyJ0aHJvd3MiXSliPWcoYik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmc/bDoiTm8gY29udmVyc2lvbiBmcm9tICIraSsiIHRvICIrZn19fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTpifX1tLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6emMsdHlwZToiR0VUIixpc0xvY2FsOkRjLnRlc3QoeWNbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6SmMsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjptLnBhcnNlSlNPTiwidGV4dCB4bWwiOm0ucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihhLGIpe3JldHVybiBiP05jKE5jKGEsbS5hamF4U2V0dGluZ3MpLGIpOk5jKG0uYWpheFNldHRpbmdzLGEpfSxhamF4UHJlZmlsdGVyOkxjKEhjKSxhamF4VHJhbnNwb3J0OkxjKEljKSxhamF4OmZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBhJiYoYj1hLGE9dm9pZCAwKSxiPWJ8fHt9O3ZhciBjLGQsZSxmLGcsaCxpLGosaz1tLmFqYXhTZXR1cCh7fSxiKSxsPWsuY29udGV4dHx8ayxuPWsuY29udGV4dCYmKGwubm9kZVR5cGV8fGwuanF1ZXJ5KT9tKGwpOm0uZXZlbnQsbz1tLkRlZmVycmVkKCkscD1tLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxxPWsuc3RhdHVzQ29kZXx8e30scj17fSxzPXt9LHQ9MCx1PSJjYW5jZWxlZCIsdj17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKDI9PT10KXtpZighail7aj17fTt3aGlsZShiPUNjLmV4ZWMoZikpaltiWzFdLnRvTG93ZXJDYXNlKCldPWJbMl19Yj1qW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PWI/bnVsbDpifSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PXQ/ZjpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS50b0xvd2VyQ2FzZSgpO3JldHVybiB0fHwoYT1zW2NdPXNbY118fGEsclthXT1iKSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGEpe3JldHVybiB0fHwoay5taW1lVHlwZT1hKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKGEpaWYoMj50KWZvcihiIGluIGEpcVtiXT1bcVtiXSxhW2JdXTtlbHNlIHYuYWx3YXlzKGFbdi5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YXx8dTtyZXR1cm4gaSYmaS5hYm9ydChiKSx4KDAsYiksdGhpc319O2lmKG8ucHJvbWlzZSh2KS5jb21wbGV0ZT1wLmFkZCx2LnN1Y2Nlc3M9di5kb25lLHYuZXJyb3I9di5mYWlsLGsudXJsPSgoYXx8ay51cmx8fHpjKSsiIikucmVwbGFjZShBYywiIikucmVwbGFjZShGYyx5Y1sxXSsiLy8iKSxrLnR5cGU9Yi5tZXRob2R8fGIudHlwZXx8ay5tZXRob2R8fGsudHlwZSxrLmRhdGFUeXBlcz1tLnRyaW0oay5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpfHxbIiJdLG51bGw9PWsuY3Jvc3NEb21haW4mJihjPUdjLmV4ZWMoay51cmwudG9Mb3dlckNhc2UoKSksay5jcm9zc0RvbWFpbj0hKCFjfHxjWzFdPT09eWNbMV0mJmNbMl09PT15Y1syXSYmKGNbM118fCgiaHR0cDoiPT09Y1sxXT8iODAiOiI0NDMiKSk9PT0oeWNbM118fCgiaHR0cDoiPT09eWNbMV0/IjgwIjoiNDQzIikpKSksay5kYXRhJiZrLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIGsuZGF0YSYmKGsuZGF0YT1tLnBhcmFtKGsuZGF0YSxrLnRyYWRpdGlvbmFsKSksTWMoSGMsayxiLHYpLDI9PT10KXJldHVybiB2O2g9ay5nbG9iYWwsaCYmMD09PW0uYWN0aXZlKysmJm0uZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iiksay50eXBlPWsudHlwZS50b1VwcGVyQ2FzZSgpLGsuaGFzQ29udGVudD0hRWMudGVzdChrLnR5cGUpLGU9ay51cmwsay5oYXNDb250ZW50fHwoay5kYXRhJiYoZT1rLnVybCs9KHdjLnRlc3QoZSk/IiYiOiI/Iikray5kYXRhLGRlbGV0ZSBrLmRhdGEpLGsuY2FjaGU9PT0hMSYmKGsudXJsPUJjLnRlc3QoZSk/ZS5yZXBsYWNlKEJjLCIkMV89Iit2YysrKTplKyh3Yy50ZXN0KGUpPyImIjoiPyIpKyJfPSIrdmMrKykpLGsuaWZNb2RpZmllZCYmKG0ubGFzdE1vZGlmaWVkW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixtLmxhc3RNb2RpZmllZFtlXSksbS5ldGFnW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLG0uZXRhZ1tlXSkpLChrLmRhdGEmJmsuaGFzQ29udGVudCYmay5jb250ZW50VHlwZSE9PSExfHxiLmNvbnRlbnRUeXBlKSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGsuY29udGVudFR5cGUpLHYuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixrLmRhdGFUeXBlc1swXSYmay5hY2NlcHRzW2suZGF0YVR5cGVzWzBdXT9rLmFjY2VwdHNbay5kYXRhVHlwZXNbMF1dKygiKiIhPT1rLmRhdGFUeXBlc1swXT8iLCAiK0pjKyI7IHE9MC4wMSI6IiIpOmsuYWNjZXB0c1siKiJdKTtmb3IoZCBpbiBrLmhlYWRlcnMpdi5zZXRSZXF1ZXN0SGVhZGVyKGQsay5oZWFkZXJzW2RdKTtpZihrLmJlZm9yZVNlbmQmJihrLmJlZm9yZVNlbmQuY2FsbChsLHYsayk9PT0hMXx8Mj09PXQpKXJldHVybiB2LmFib3J0KCk7dT0iYWJvcnQiO2ZvcihkIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbZF0oa1tkXSk7aWYoaT1NYyhJYyxrLGIsdikpe3YucmVhZHlTdGF0ZT0xLGgmJm4udHJpZ2dlcigiYWpheFNlbmQiLFt2LGtdKSxrLmFzeW5jJiZrLnRpbWVvdXQ+MCYmKGc9c2V0VGltZW91dChmdW5jdGlvbigpe3YuYWJvcnQoInRpbWVvdXQiKX0say50aW1lb3V0KSk7dHJ5e3Q9MSxpLnNlbmQocix4KX1jYXRjaCh3KXtpZighKDI+dCkpdGhyb3cgdzt4KC0xLHcpfX1lbHNlIHgoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIHgoYSxiLGMsZCl7dmFyIGoscixzLHUsdyx4PWI7MiE9PXQmJih0PTIsZyYmY2xlYXJUaW1lb3V0KGcpLGk9dm9pZCAwLGY9ZHx8IiIsdi5yZWFkeVN0YXRlPWE+MD80OjAsaj1hPj0yMDAmJjMwMD5hfHwzMDQ9PT1hLGMmJih1PU9jKGssdixjKSksdT1QYyhrLHUsdixqKSxqPyhrLmlmTW9kaWZpZWQmJih3PXYuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYobS5sYXN0TW9kaWZpZWRbZV09dyksdz12LmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksdyYmKG0uZXRhZ1tlXT13KSksMjA0PT09YXx8IkhFQUQiPT09ay50eXBlP3g9Im5vY29udGVudCI6MzA0PT09YT94PSJub3Rtb2RpZmllZCI6KHg9dS5zdGF0ZSxyPXUuZGF0YSxzPXUuZXJyb3Isaj0hcykpOihzPXgsKGF8fCF4KSYmKHg9ImVycm9yIiwwPmEmJihhPTApKSksdi5zdGF0dXM9YSx2LnN0YXR1c1RleHQ9KGJ8fHgpKyIiLGo/by5yZXNvbHZlV2l0aChsLFtyLHgsdl0pOm8ucmVqZWN0V2l0aChsLFt2LHgsc10pLHYuc3RhdHVzQ29kZShxKSxxPXZvaWQgMCxoJiZuLnRyaWdnZXIoaj8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFt2LGssaj9yOnNdKSxwLmZpcmVXaXRoKGwsW3YseF0pLGgmJihuLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3Ysa10pLC0tbS5hY3RpdmV8fG0uZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiB2fSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5nZXQoYSxiLGMsImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uZ2V0KGEsdm9pZCAwLGIsInNjcmlwdCIpfX0pLG0uZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihhLGIpe21bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIG0uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLG0uYWpheCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0pfX0pLG0uZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGEsYil7bS5mbltiXT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5vbihiLGEpfX0pLG0uX2V2YWxVcmw9ZnVuY3Rpb24oYSl7cmV0dXJuIG0uYWpheCh7dXJsOmEsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX0sbS5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oYSl7aWYobS5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bSh0aGlzKS53cmFwQWxsKGEuY2FsbCh0aGlzLGIpKX0pO2lmKHRoaXNbMF0pe3ZhciBiPW0oYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKTt0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLGIubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpczt3aGlsZShhLmZpcnN0Q2hpbGQmJjE9PT1hLmZpcnN0Q2hpbGQubm9kZVR5cGUpYT1hLmZpcnN0Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKG0uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihiKXttKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9OmZ1bmN0aW9uKCl7dmFyIGI9bSh0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1tLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXttKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7bS5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fG0odGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfX0pLG0uZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aDw9MCYmYS5vZmZzZXRIZWlnaHQ8PTB8fCFrLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cygpJiYibm9uZSI9PT0oYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxtLmNzcyhhLCJkaXNwbGF5IikpfSxtLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFtLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9O3ZhciBRYz0vJTIwL2csUmM9L1xbXF0kLyxTYz0vXHI/XG4vZyxUYz0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksVWM9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIFZjKGEsYixjLGQpe3ZhciBlO2lmKG0uaXNBcnJheShiKSltLmVhY2goYixmdW5jdGlvbihiLGUpe2N8fFJjLnRlc3QoYSk/ZChhLGUpOlZjKGErIlsiKygib2JqZWN0Ij09dHlwZW9mIGU/YjoiIikrIl0iLGUsYyxkKX0pO2Vsc2UgaWYoY3x8Im9iamVjdCIhPT1tLnR5cGUoYikpZChhLGIpO2Vsc2UgZm9yKGUgaW4gYilWYyhhKyJbIitlKyJdIixiW2VdLGMsZCl9bS5wYXJhbT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9bS5pc0Z1bmN0aW9uKGIpP2IoKTpudWxsPT1iPyIiOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2lmKHZvaWQgMD09PWImJihiPW0uYWpheFNldHRpbmdzJiZtLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCksbS5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIW0uaXNQbGFpbk9iamVjdChhKSltLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IoYyBpbiBhKVZjKGMsYVtjXSxiLGUpO3JldHVybiBkLmpvaW4oIiYiKS5yZXBsYWNlKFFjLCIrIil9LG0uZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gbS5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPW0ucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiBhP20ubWFrZUFycmF5KGEpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIW0odGhpcykuaXMoIjpkaXNhYmxlZCIpJiZVYy50ZXN0KHRoaXMubm9kZU5hbWUpJiYhVGMudGVzdChhKSYmKHRoaXMuY2hlY2tlZHx8IVcudGVzdChhKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1tKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1jP251bGw6bS5pc0FycmF5KGMpP20ubWFwKGMsZnVuY3Rpb24oYSl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVwbGFjZShTYywiXHJcbiIpfX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoU2MsIlxyXG4iKX19KS5nZXQoKX19KSxtLmFqYXhTZXR0aW5ncy54aHI9dm9pZCAwIT09YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmL14oZ2V0fHBvc3R8aGVhZHxwdXR8ZGVsZXRlfG9wdGlvbnMpJC9pLnRlc3QodGhpcy50eXBlKSYmWmMoKXx8JGMoKX06WmM7dmFyIFdjPTAsWGM9e30sWWM9bS5hamF4U2V0dGluZ3MueGhyKCk7YS5BY3RpdmVYT2JqZWN0JiZtKGEpLm9uKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIFhjKVhjW2FdKHZvaWQgMCwhMCl9KSxrLmNvcnM9ISFZYyYmIndpdGhDcmVkZW50aWFscyJpbiBZYyxZYz1rLmFqYXg9ISFZYyxZYyYmbS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGEpe2lmKCFhLmNyb3NzRG9tYWlufHxrLmNvcnMpe3ZhciBiO3JldHVybntzZW5kOmZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1hLnhocigpLGc9KytXYztpZihmLm9wZW4oYS50eXBlLGEudXJsLGEuYXN5bmMsYS51c2VybmFtZSxhLnBhc3N3b3JkKSxhLnhockZpZWxkcylmb3IoZSBpbiBhLnhockZpZWxkcylmW2VdPWEueGhyRmllbGRzW2VdO2EubWltZVR5cGUmJmYub3ZlcnJpZGVNaW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlKGEubWltZVR5cGUpLGEuY3Jvc3NEb21haW58fGNbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGNbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoZSBpbiBjKXZvaWQgMCE9PWNbZV0mJmYuc2V0UmVxdWVzdEhlYWRlcihlLGNbZV0rIiIpO2Yuc2VuZChhLmhhc0NvbnRlbnQmJmEuZGF0YXx8bnVsbCksYj1mdW5jdGlvbihjLGUpe3ZhciBoLGksajtpZihiJiYoZXx8ND09PWYucmVhZHlTdGF0ZSkpaWYoZGVsZXRlIFhjW2ddLGI9dm9pZCAwLGYub25yZWFkeXN0YXRlY2hhbmdlPW0ubm9vcCxlKTQhPT1mLnJlYWR5U3RhdGUmJmYuYWJvcnQoKTtlbHNle2o9e30saD1mLnN0YXR1cywic3RyaW5nIj09dHlwZW9mIGYucmVzcG9uc2VUZXh0JiYoai50ZXh0PWYucmVzcG9uc2VUZXh0KTt0cnl7aT1mLnN0YXR1c1RleHR9Y2F0Y2goayl7aT0iIn1ofHwhYS5pc0xvY2FsfHxhLmNyb3NzRG9tYWluPzEyMjM9PT1oJiYoaD0yMDQpOmg9ai50ZXh0PzIwMDo0MDR9aiYmZChoLGksaixmLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKX0sYS5hc3luYz80PT09Zi5yZWFkeVN0YXRlP3NldFRpbWVvdXQoYik6Zi5vbnJlYWR5c3RhdGVjaGFuZ2U9WGNbZ109YjpiKCl9LGFib3J0OmZ1bmN0aW9uKCl7YiYmYih2b2lkIDAsITApfX19fSk7ZnVuY3Rpb24gWmMoKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gJGMoKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1tLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6Lyg/OmphdmF8ZWNtYSlzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBtLmdsb2JhbEV2YWwoYSksYX19fSksbS5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiLGEuZ2xvYmFsPSExKX0pLG0uYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjPXkuaGVhZHx8bSgiaGVhZCIpWzBdfHx5LmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihkLGUpe2I9eS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxiLmFzeW5jPSEwLGEuc2NyaXB0Q2hhcnNldCYmKGIuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGIuc3JjPWEudXJsLGIub25sb2FkPWIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsYyl7KGN8fCFiLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoYi5yZWFkeVN0YXRlKSkmJihiLm9ubG9hZD1iLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbCxjfHxlKDIwMCwic3VjY2VzcyIpKX0sYy5pbnNlcnRCZWZvcmUoYixjLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2ImJmIub25sb2FkKHZvaWQgMCwhMCl9fX19KTt2YXIgX2M9W10sYWQ9Lyg9KVw/KD89JnwkKXxcP1w/LzttLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGE9X2MucG9wKCl8fG0uZXhwYW5kbysiXyIrdmMrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLG0uYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZyxoPWIuanNvbnAhPT0hMSYmKGFkLnRlc3QoYi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgYi5kYXRhJiYhKGIuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmYWQudGVzdChiLmRhdGEpJiYiZGF0YSIpO3JldHVybiBofHwianNvbnAiPT09Yi5kYXRhVHlwZXNbMF0/KGU9Yi5qc29ucENhbGxiYWNrPW0uaXNGdW5jdGlvbihiLmpzb25wQ2FsbGJhY2spP2IuanNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxoP2JbaF09YltoXS5yZXBsYWNlKGFkLCIkMSIrZSk6Yi5qc29ucCE9PSExJiYoYi51cmwrPSh3Yy50ZXN0KGIudXJsKT8iJiI6Ij8iKStiLmpzb25wKyI9IitlKSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gZ3x8bS5lcnJvcihlKyIgd2FzIG5vdCBjYWxsZWQiKSxnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiIsZj1hW2VdLGFbZV09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZC5hbHdheXMoZnVuY3Rpb24oKXthW2VdPWYsYltlXSYmKGIuanNvbnBDYWxsYmFjaz1jLmpzb25wQ2FsbGJhY2ssX2MucHVzaChlKSksZyYmbS5pc0Z1bmN0aW9uKGYpJiZmKGdbMF0pLGc9Zj12b2lkIDB9KSwic2NyaXB0Iik6dm9pZCAwfSksbS5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2YgYiYmKGM9YixiPSExKSxiPWJ8fHk7dmFyIGQ9dS5leGVjKGEpLGU9IWMmJltdO3JldHVybiBkP1tiLmNyZWF0ZUVsZW1lbnQoZFsxXSldOihkPW0uYnVpbGRGcmFnbWVudChbYV0sYixlKSxlJiZlLmxlbmd0aCYmbShlKS5yZW1vdmUoKSxtLm1lcmdlKFtdLGQuY2hpbGROb2RlcykpfTt2YXIgYmQ9bS5mbi5sb2FkO20uZm4ubG9hZD1mdW5jdGlvbihhLGIsYyl7aWYoInN0cmluZyIhPXR5cGVvZiBhJiZiZClyZXR1cm4gYmQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBkLGUsZixnPXRoaXMsaD1hLmluZGV4T2YoIiAiKTtyZXR1cm4gaD49MCYmKGQ9bS50cmltKGEuc2xpY2UoaCxhLmxlbmd0aCkpLGE9YS5zbGljZSgwLGgpKSxtLmlzRnVuY3Rpb24oYik/KGM9YixiPXZvaWQgMCk6YiYmIm9iamVjdCI9PXR5cGVvZiBiJiYoZj0iUE9TVCIpLGcubGVuZ3RoPjAmJm0uYWpheCh7dXJsOmEsdHlwZTpmLGRhdGFUeXBlOiJodG1sIixkYXRhOmJ9KS5kb25lKGZ1bmN0aW9uKGEpe2U9YXJndW1lbnRzLGcuaHRtbChkP20oIjxkaXY+IikuYXBwZW5kKG0ucGFyc2VIVE1MKGEpKS5maW5kKGQpOmEpfSkuY29tcGxldGUoYyYmZnVuY3Rpb24oYSxiKXtnLmVhY2goYyxlfHxbYS5yZXNwb25zZVRleHQsYixhXSl9KSx0aGlzfSxtLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gbS5ncmVwKG0udGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofTt2YXIgY2Q9YS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rpb24gZGQoYSl7cmV0dXJuIG0uaXNXaW5kb3coYSk/YTo5PT09YS5ub2RlVHlwZT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1tLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPW0uY3NzKGEsInBvc2l0aW9uIiksbD1tKGEpLG49e307InN0YXRpYyI9PT1rJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxoPWwub2Zmc2V0KCksZj1tLmNzcyhhLCJ0b3AiKSxpPW0uY3NzKGEsImxlZnQiKSxqPSgiYWJzb2x1dGUiPT09a3x8ImZpeGVkIj09PWspJiZtLmluQXJyYXkoImF1dG8iLFtmLGldKT4tMSxqPyhkPWwucG9zaXRpb24oKSxnPWQudG9wLGU9ZC5sZWZ0KTooZz1wYXJzZUZsb2F0KGYpfHwwLGU9cGFyc2VGbG9hdChpKXx8MCksbS5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGgpKSxudWxsIT1iLnRvcCYmKG4udG9wPWIudG9wLWgudG9wK2cpLG51bGwhPWIubGVmdCYmKG4ubGVmdD1iLmxlZnQtaC5sZWZ0K2UpLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLG4pOmwuY3NzKG4pfX0sbS5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1hP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe20ub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTt2YXIgYixjLGQ9e3RvcDowLGxlZnQ6MH0sZT10aGlzWzBdLGY9ZSYmZS5vd25lckRvY3VtZW50O2lmKGYpcmV0dXJuIGI9Zi5kb2N1bWVudEVsZW1lbnQsbS5jb250YWlucyhiLGUpPyh0eXBlb2YgZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QhPT1LJiYoZD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxjPWRkKGYpLHt0b3A6ZC50b3ArKGMucGFnZVlPZmZzZXR8fGIuc2Nyb2xsVG9wKS0oYi5jbGllbnRUb3B8fDApLGxlZnQ6ZC5sZWZ0KyhjLnBhZ2VYT2Zmc2V0fHxiLnNjcm9sbExlZnQpLShiLmNsaWVudExlZnR8fDApfSk6ZH0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgYSxiLGM9e3RvcDowLGxlZnQ6MH0sZD10aGlzWzBdO3JldHVybiJmaXhlZCI9PT1tLmNzcyhkLCJwb3NpdGlvbiIpP2I9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooYT10aGlzLm9mZnNldFBhcmVudCgpLGI9dGhpcy5vZmZzZXQoKSxtLm5vZGVOYW1lKGFbMF0sImh0bWwiKXx8KGM9YS5vZmZzZXQoKSksYy50b3ArPW0uY3NzKGFbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksYy5sZWZ0Kz1tLmNzcyhhWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDpiLnRvcC1jLnRvcC1tLmNzcyhkLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OmIubGVmdC1jLmxlZnQtbS5jc3MoZCwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50fHxjZDt3aGlsZShhJiYhbS5ub2RlTmFtZShhLCJodG1sIikmJiJzdGF0aWMiPT09bS5jc3MoYSwicG9zaXRpb24iKSlhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfHxjZH0pfX0pLG0uZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPS9ZLy50ZXN0KGIpO20uZm5bYV09ZnVuY3Rpb24oZCl7cmV0dXJuIFYodGhpcyxmdW5jdGlvbihhLGQsZSl7dmFyIGY9ZGQoYSk7cmV0dXJuIHZvaWQgMD09PWU/Zj9iIGluIGY/ZltiXTpmLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXTphW2RdOnZvaWQoZj9mLnNjcm9sbFRvKGM/bShmKS5zY3JvbGxMZWZ0KCk6ZSxjP2U6bShmKS5zY3JvbGxUb3AoKSk6YVtkXT1lKX0sYSxkLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksbS5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7bS5jc3NIb29rc1tiXT1MYihrLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz8oYz1KYihhLGIpLEhiLnRlc3QoYyk/bShhKS5wb3NpdGlvbigpW2JdKyJweCI6Yyk6dm9pZCAwfSl9KSxtLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLGIpe20uZWFjaCh7cGFkZGluZzoiaW5uZXIiK2EsY29udGVudDpiLCIiOiJvdXRlciIrYX0sZnVuY3Rpb24oYyxkKXttLmZuW2RdPWZ1bmN0aW9uKGQsZSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aCYmKGN8fCJib29sZWFuIiE9dHlwZW9mIGQpLGc9Y3x8KGQ9PT0hMHx8ZT09PSEwPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZTtyZXR1cm4gbS5pc1dpbmRvdyhiKT9iLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTo5PT09Yi5ub2RlVHlwZT8oZT1iLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChiLmJvZHlbInNjcm9sbCIrYV0sZVsic2Nyb2xsIithXSxiLmJvZHlbIm9mZnNldCIrYV0sZVsib2Zmc2V0IithXSxlWyJjbGllbnQiK2FdKSk6dm9pZCAwPT09ZD9tLmNzcyhiLGMsZyk6bS5zdHlsZShiLGMsZCxnKX0sYixmP2Q6dm9pZCAwLGYsbnVsbCl9fSl9KSxtLmZuLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LG0uZm4uYW5kU2VsZj1tLmZuLmFkZEJhY2ssImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIG19KTt2YXIgZWQ9YS5qUXVlcnksZmQ9YS4kO3JldHVybiBtLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGEuJD09PW0mJihhLiQ9ZmQpLGImJmEualF1ZXJ5PT09bSYmKGEualF1ZXJ5PWVkKSxtfSx0eXBlb2YgYj09PUsmJihhLmpRdWVyeT1hLiQ9bSksbX0pOwo=\"></script>\n",
"<script title=\"highlight\" src=\"data:application/javascript;base64,IWZ1bmN0aW9uKGUpeyJ1bmRlZmluZWQiIT10eXBlb2YgZXhwb3J0cz9lKGV4cG9ydHMpOih3aW5kb3cuaGxqcz1lKHt9KSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImhsanMiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5obGpzfSkpfShmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3JldHVybiBlLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvPC9nbSwiJmx0OyIpLnJlcGxhY2UoLz4vZ20sIiZndDsiKX1mdW5jdGlvbiByKGUpe3JldHVybiBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gYShlLHQpe3ZhciByPWUmJmUuZXhlYyh0KTtyZXR1cm4gciYmMD09ci5pbmRleH1mdW5jdGlvbiBuKGUpe3JldHVybi9eKG5vLT9oaWdobGlnaHR8cGxhaW58dGV4dCkkL2kudGVzdChlKX1mdW5jdGlvbiBpKGUpe3ZhciB0LHIsYSxpPWUuY2xhc3NOYW1lKyIgIjtpZihpKz1lLnBhcmVudE5vZGU/ZS5wYXJlbnROb2RlLmNsYXNzTmFtZToiIixyPS9cYmxhbmcoPzp1YWdlKT8tKFtcdy1dKylcYi9pLmV4ZWMoaSkpcmV0dXJuIHkoclsxXSk/clsxXToibm8taGlnaGxpZ2h0Ijtmb3IoaT1pLnNwbGl0KC9ccysvKSx0PTAsYT1pLmxlbmd0aDthPnQ7dCsrKWlmKHkoaVt0XSl8fG4oaVt0XSkpcmV0dXJuIGlbdF19ZnVuY3Rpb24gcyhlLHQpe3ZhciByLGE9e307Zm9yKHIgaW4gZSlhW3JdPWVbcl07aWYodClmb3IociBpbiB0KWFbcl09dFtyXTtyZXR1cm4gYX1mdW5jdGlvbiBjKGUpe3ZhciB0PVtdO3JldHVybiBmdW5jdGlvbiBhKGUsbil7Zm9yKHZhciBpPWUuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZykzPT1pLm5vZGVUeXBlP24rPWkubm9kZVZhbHVlLmxlbmd0aDoxPT1pLm5vZGVUeXBlJiYodC5wdXNoKHtldmVudDoic3RhcnQiLG9mZnNldDpuLG5vZGU6aX0pLG49YShpLG4pLHIoaSkubWF0Y2goL2JyfGhyfGltZ3xpbnB1dC8pfHx0LnB1c2goe2V2ZW50OiJzdG9wIixvZmZzZXQ6bixub2RlOml9KSk7cmV0dXJuIG59KGUsMCksdH1mdW5jdGlvbiBvKGUsYSxuKXtmdW5jdGlvbiBpKCl7cmV0dXJuIGUubGVuZ3RoJiZhLmxlbmd0aD9lWzBdLm9mZnNldCE9YVswXS5vZmZzZXQ/ZVswXS5vZmZzZXQ8YVswXS5vZmZzZXQ/ZTphOiJzdGFydCI9PWFbMF0uZXZlbnQ/ZTphOmUubGVuZ3RoP2U6YX1mdW5jdGlvbiBzKGUpe2Z1bmN0aW9uIGEoZSl7cmV0dXJuIiAiK2Uubm9kZU5hbWUrJz0iJyt0KGUudmFsdWUpKyciJ311Kz0iPCIrcihlKStBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoZS5hdHRyaWJ1dGVzLGEpLmpvaW4oIiIpKyI+In1mdW5jdGlvbiBjKGUpe3UrPSI8LyIrcihlKSsiPiJ9ZnVuY3Rpb24gbyhlKXsoInN0YXJ0Ij09ZS5ldmVudD9zOmMpKGUubm9kZSl9Zm9yKHZhciBsPTAsdT0iIixkPVtdO2UubGVuZ3RofHxhLmxlbmd0aDspe3ZhciBiPWkoKTtpZih1Kz10KG4uc3Vic3RyKGwsYlswXS5vZmZzZXQtbCkpLGw9YlswXS5vZmZzZXQsYj09ZSl7ZC5yZXZlcnNlKCkuZm9yRWFjaChjKTtkbyBvKGIuc3BsaWNlKDAsMSlbMF0pLGI9aSgpO3doaWxlKGI9PWUmJmIubGVuZ3RoJiZiWzBdLm9mZnNldD09bCk7ZC5yZXZlcnNlKCkuZm9yRWFjaChzKX1lbHNlInN0YXJ0Ij09YlswXS5ldmVudD9kLnB1c2goYlswXS5ub2RlKTpkLnBvcCgpLG8oYi5zcGxpY2UoMCwxKVswXSl9cmV0dXJuIHUrdChuLnN1YnN0cihsKSl9ZnVuY3Rpb24gbChlKXtmdW5jdGlvbiB0KGUpe3JldHVybiBlJiZlLnNvdXJjZXx8ZX1mdW5jdGlvbiByKHIsYSl7cmV0dXJuIG5ldyBSZWdFeHAodChyKSwibSIrKGUuY0k/ImkiOiIiKSsoYT8iZyI6IiIpKX1mdW5jdGlvbiBhKG4saSl7aWYoIW4uY29tcGlsZWQpe2lmKG4uY29tcGlsZWQ9ITAsbi5rPW4ua3x8bi5iSyxuLmspe3ZhciBjPXt9LG89ZnVuY3Rpb24odCxyKXtlLmNJJiYocj1yLnRvTG93ZXJDYXNlKCkpLHIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWUuc3BsaXQoInwiKTtjW3JbMF1dPVt0LHJbMV0/TnVtYmVyKHJbMV0pOjFdfSl9OyJzdHJpbmciPT10eXBlb2Ygbi5rP28oImtleXdvcmQiLG4uayk6T2JqZWN0LmtleXMobi5rKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe28oZSxuLmtbZV0pfSksbi5rPWN9bi5sUj1yKG4ubHx8L1xiXHcrXGIvLCEwKSxpJiYobi5iSyYmKG4uYj0iXFxiKCIrbi5iSy5zcGxpdCgiICIpLmpvaW4oInwiKSsiKVxcYiIpLG4uYnx8KG4uYj0vXEJ8XGIvKSxuLmJSPXIobi5iKSxuLmV8fG4uZVd8fChuLmU9L1xCfFxiLyksbi5lJiYobi5lUj1yKG4uZSkpLG4udEU9dChuLmUpfHwiIixuLmVXJiZpLnRFJiYobi50RSs9KG4uZT8ifCI6IiIpK2kudEUpKSxuLmkmJihuLmlSPXIobi5pKSksdm9pZCAwPT09bi5yJiYobi5yPTEpLG4uY3x8KG4uYz1bXSk7dmFyIGw9W107bi5jLmZvckVhY2goZnVuY3Rpb24oZSl7ZS52P2Uudi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2wucHVzaChzKGUsdCkpfSk6bC5wdXNoKCJzZWxmIj09ZT9uOmUpfSksbi5jPWwsbi5jLmZvckVhY2goZnVuY3Rpb24oZSl7YShlLG4pfSksbi5zdGFydHMmJmEobi5zdGFydHMsaSk7dmFyIHU9bi5jLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5iSz8iXFwuPygiK2UuYisiKVxcLj8iOmUuYn0pLmNvbmNhdChbbi50RSxuLmldKS5tYXAodCkuZmlsdGVyKEJvb2xlYW4pO24udD11Lmxlbmd0aD9yKHUuam9pbigifCIpLCEwKTp7ZXhlYzpmdW5jdGlvbigpe3JldHVybiBudWxsfX19fWEoZSl9ZnVuY3Rpb24gdShlLHIsbixpKXtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0LmMubGVuZ3RoO3IrKylpZihhKHQuY1tyXS5iUixlKSlyZXR1cm4gdC5jW3JdfWZ1bmN0aW9uIGMoZSx0KXtpZihhKGUuZVIsdCkpe2Zvcig7ZS5lbmRzUGFyZW50JiZlLnBhcmVudDspZT1lLnBhcmVudDtyZXR1cm4gZX1yZXR1cm4gZS5lVz9jKGUucGFyZW50LHQpOnZvaWQgMH1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIW4mJmEodC5pUixlKX1mdW5jdGlvbiBiKGUsdCl7dmFyIHI9di5jST90WzBdLnRvTG93ZXJDYXNlKCk6dFswXTtyZXR1cm4gZS5rLmhhc093blByb3BlcnR5KHIpJiZlLmtbcl19ZnVuY3Rpb24gcChlLHQscixhKXt2YXIgbj1hPyIiOncuY2xhc3NQcmVmaXgsaT0nPHNwYW4gY2xhc3M9IicrbixzPXI/IiI6Ijwvc3Bhbj4iO3JldHVybiBpKz1lKyciPicsaSt0K3N9ZnVuY3Rpb24gbSgpe2lmKCF4LmspcmV0dXJuIHQoRSk7dmFyIGU9IiIscj0wO3gubFIubGFzdEluZGV4PTA7Zm9yKHZhciBhPXgubFIuZXhlYyhFKTthOyl7ZSs9dChFLnN1YnN0cihyLGEuaW5kZXgtcikpO3ZhciBuPWIoeCxhKTtuPyhCKz1uWzFdLGUrPXAoblswXSx0KGFbMF0pKSk6ZSs9dChhWzBdKSxyPXgubFIubGFzdEluZGV4LGE9eC5sUi5leGVjKEUpfXJldHVybiBlK3QoRS5zdWJzdHIocikpfWZ1bmN0aW9uIGYoKXt2YXIgZT0ic3RyaW5nIj09dHlwZW9mIHguc0w7aWYoZSYmIU5beC5zTF0pcmV0dXJuIHQoRSk7dmFyIHI9ZT91KHguc0wsRSwhMCxDW3guc0xdKTpkKEUseC5zTC5sZW5ndGg/eC5zTDp2b2lkIDApO3JldHVybiB4LnI+MCYmKEIrPXIuciksZSYmKENbeC5zTF09ci50b3ApLHAoci5sYW5ndWFnZSxyLnZhbHVlLCExLCEwKX1mdW5jdGlvbiBnKCl7cmV0dXJuIHZvaWQgMCE9PXguc0w/ZigpOm0oKX1mdW5jdGlvbiBoKGUscil7dmFyIGE9ZS5jTj9wKGUuY04sIiIsITApOiIiO2UuckI/KE0rPWEsRT0iIik6ZS5lQj8oTSs9dChyKSthLEU9IiIpOihNKz1hLEU9cikseD1PYmplY3QuY3JlYXRlKGUse3BhcmVudDp7dmFsdWU6eH19KX1mdW5jdGlvbiBfKGUscil7aWYoRSs9ZSx2b2lkIDA9PT1yKXJldHVybiBNKz1nKCksMDt2YXIgYT1zKHIseCk7aWYoYSlyZXR1cm4gTSs9ZygpLGgoYSxyKSxhLnJCPzA6ci5sZW5ndGg7dmFyIG49Yyh4LHIpO2lmKG4pe3ZhciBpPXg7aS5yRXx8aS5lRXx8KEUrPXIpLE0rPWcoKTtkbyB4LmNOJiYoTSs9Ijwvc3Bhbj4iKSxCKz14LnIseD14LnBhcmVudDt3aGlsZSh4IT1uLnBhcmVudCk7cmV0dXJuIGkuZUUmJihNKz10KHIpKSxFPSIiLG4uc3RhcnRzJiZoKG4uc3RhcnRzLCIiKSxpLnJFPzA6ci5sZW5ndGh9aWYobyhyLHgpKXRocm93IG5ldyBFcnJvcignSWxsZWdhbCBsZXhlbWUgIicrcisnIiBmb3IgbW9kZSAiJysoeC5jTnx8Ijx1bm5hbWVkPiIpKyciJyk7cmV0dXJuIEUrPXIsci5sZW5ndGh8fDF9dmFyIHY9eShlKTtpZighdil0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbGFuZ3VhZ2U6ICInK2UrJyInKTtsKHYpO3ZhciBrLHg9aXx8dixDPXt9LE09IiI7Zm9yKGs9eDtrIT12O2s9ay5wYXJlbnQpay5jTiYmKE09cChrLmNOLCIiLCEwKStNKTt2YXIgRT0iIixCPTA7dHJ5e2Zvcih2YXIgJCx6LEw9MDs7KXtpZih4LnQubGFzdEluZGV4PUwsJD14LnQuZXhlYyhyKSwhJClicmVhazt6PV8oci5zdWJzdHIoTCwkLmluZGV4LUwpLCRbMF0pLEw9JC5pbmRleCt6fWZvcihfKHIuc3Vic3RyKEwpKSxrPXg7ay5wYXJlbnQ7az1rLnBhcmVudClrLmNOJiYoTSs9Ijwvc3Bhbj4iKTtyZXR1cm57cjpCLHZhbHVlOk0sbGFuZ3VhZ2U6ZSx0b3A6eH19Y2F0Y2gocSl7aWYoLTEhPXEubWVzc2FnZS5pbmRleE9mKCJJbGxlZ2FsIikpcmV0dXJue3I6MCx2YWx1ZTp0KHIpfTt0aHJvdyBxfX1mdW5jdGlvbiBkKGUscil7cj1yfHx3Lmxhbmd1YWdlc3x8T2JqZWN0LmtleXMoTik7dmFyIGE9e3I6MCx2YWx1ZTp0KGUpfSxuPWE7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbih0KXtpZih5KHQpKXt2YXIgcj11KHQsZSwhMSk7ci5sYW5ndWFnZT10LHIucj5uLnImJihuPXIpLHIucj5hLnImJihuPWEsYT1yKX19KSxuLmxhbmd1YWdlJiYoYS5zZWNvbmRfYmVzdD1uKSxhfWZ1bmN0aW9uIGIoZSl7cmV0dXJuIHcudGFiUmVwbGFjZSYmKGU9ZS5yZXBsYWNlKC9eKCg8W14+XSs+fFx0KSspL2dtLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQucmVwbGFjZSgvXHQvZyx3LnRhYlJlcGxhY2UpfSkpLHcudXNlQlImJihlPWUucmVwbGFjZSgvXG4vZywiPGJyPiIpKSxlfWZ1bmN0aW9uIHAoZSx0LHIpe3ZhciBhPXQ/a1t0XTpyLG49W2UudHJpbSgpXTtyZXR1cm4gZS5tYXRjaCgvXGJobGpzXGIvKXx8bi5wdXNoKCJobGpzIiksLTE9PT1lLmluZGV4T2YoYSkmJm4ucHVzaChhKSxuLmpvaW4oIiAiKS50cmltKCl9ZnVuY3Rpb24gbShlKXt2YXIgdD1pKGUpO2lmKCFuKHQpKXt2YXIgcjt3LnVzZUJSPyhyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImRpdiIpLHIuaW5uZXJIVE1MPWUuaW5uZXJIVE1MLnJlcGxhY2UoL1xuL2csIiIpLnJlcGxhY2UoLzxiclsgXC9dKj4vZywiXG4iKSk6cj1lO3ZhciBhPXIudGV4dENvbnRlbnQscz10P3UodCxhLCEwKTpkKGEpLGw9YyhyKTtpZihsLmxlbmd0aCl7dmFyIG09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iik7bS5pbm5lckhUTUw9cy52YWx1ZSxzLnZhbHVlPW8obCxjKG0pLGEpfXMudmFsdWU9YihzLnZhbHVlKSxlLmlubmVySFRNTD1zLnZhbHVlLGUuY2xhc3NOYW1lPXAoZS5jbGFzc05hbWUsdCxzLmxhbmd1YWdlKSxlLnJlc3VsdD17bGFuZ3VhZ2U6cy5sYW5ndWFnZSxyZTpzLnJ9LHMuc2Vjb25kX2Jlc3QmJihlLnNlY29uZF9iZXN0PXtsYW5ndWFnZTpzLnNlY29uZF9iZXN0Lmxhbmd1YWdlLHJlOnMuc2Vjb25kX2Jlc3Qucn0pfX1mdW5jdGlvbiBmKGUpe3c9cyh3LGUpfWZ1bmN0aW9uIGcoKXtpZighZy5jYWxsZWQpe2cuY2FsbGVkPSEwO3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInByZSBjb2RlIik7QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlLG0pfX1mdW5jdGlvbiBoKCl7YWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsZywhMSksYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZywhMSl9ZnVuY3Rpb24gXyh0LHIpe3ZhciBhPU5bdF09cihlKTthLmFsaWFzZXMmJmEuYWxpYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2tbZV09dH0pfWZ1bmN0aW9uIHYoKXtyZXR1cm4gT2JqZWN0LmtleXMoTil9ZnVuY3Rpb24geShlKXtyZXR1cm4gZT0oZXx8IiIpLnRvTG93ZXJDYXNlKCksTltlXXx8TltrW2VdXX12YXIgdz17Y2xhc3NQcmVmaXg6ImhsanMtIix0YWJSZXBsYWNlOm51bGwsdXNlQlI6ITEsbGFuZ3VhZ2VzOnZvaWQgMH0sTj17fSxrPXt9O3JldHVybiBlLmhpZ2hsaWdodD11LGUuaGlnaGxpZ2h0QXV0bz1kLGUuZml4TWFya3VwPWIsZS5oaWdobGlnaHRCbG9jaz1tLGUuY29uZmlndXJlPWYsZS5pbml0SGlnaGxpZ2h0aW5nPWcsZS5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkPWgsZS5yZWdpc3Rlckxhbmd1YWdlPV8sZS5saXN0TGFuZ3VhZ2VzPXYsZS5nZXRMYW5ndWFnZT15LGUuaW5oZXJpdD1zLGUuSVI9IlthLXpBLVpdXFx3KiIsZS5VSVI9IlthLXpBLVpfXVxcdyoiLGUuTlI9IlxcYlxcZCsoXFwuXFxkKyk/IixlLkNOUj0iKFxcYjBbeFhdW2EtZkEtRjAtOV0rfChcXGJcXGQrKFxcLlxcZCopP3xcXC5cXGQrKShbZUVdWy0rXT9cXGQrKT8pIixlLkJOUj0iXFxiKDBiWzAxXSspIixlLlJTUj0iIXwhPXwhPT18JXwlPXwmfCYmfCY9fFxcKnxcXCo9fFxcK3xcXCs9fCx8LXwtPXwvPXwvfDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXD98XFxbfFxce3xcXCh8XFxefFxcXj18XFx8fFxcfD18XFx8XFx8fH4iLGUuQkU9e2I6IlxcXFxbXFxzXFxTXSIscjowfSxlLkFTTT17Y046InN0cmluZyIsYjoiJyIsZToiJyIsaToiXFxuIixjOltlLkJFXX0sZS5RU009e2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGk6IlxcbiIsYzpbZS5CRV19LGUuUFdNPXtiOi9cYihhfGFufHRoZXxhcmV8SXxJJ218aXNuJ3R8ZG9uJ3R8ZG9lc24ndHx3b24ndHxidXR8anVzdHxzaG91bGR8cHJldHR5fHNpbXBseXxlbm91Z2h8Z29ubmF8Z29pbmd8d3RmfHNvfHN1Y2h8d2lsbHx5b3V8eW91cnxsaWtlKVxiL30sZS5DPWZ1bmN0aW9uKHQscixhKXt2YXIgbj1lLmluaGVyaXQoe2NOOiJjb21tZW50IixiOnQsZTpyLGM6W119LGF8fHt9KTtyZXR1cm4gbi5jLnB1c2goZS5QV00pLG4uYy5wdXNoKHtjTjoiZG9jdGFnIixiOiIoPzpUT0RPfEZJWE1FfE5PVEV8QlVHfFhYWCk6IixyOjB9KSxufSxlLkNMQ009ZS5DKCIvLyIsIiQiKSxlLkNCQ009ZS5DKCIvXFwqIiwiXFwqLyIpLGUuSENNPWUuQygiIyIsIiQiKSxlLk5NPXtjTjoibnVtYmVyIixiOmUuTlIscjowfSxlLkNOTT17Y046Im51bWJlciIsYjplLkNOUixyOjB9LGUuQk5NPXtjTjoibnVtYmVyIixiOmUuQk5SLHI6MH0sZS5DU1NOTT17Y046Im51bWJlciIsYjplLk5SKyIoJXxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjfHB4fGRlZ3xncmFkfHJhZHx0dXJufHN8bXN8SHp8a0h6fGRwaXxkcGNtfGRwcHgpPyIscjowfSxlLlJNPXtjTjoicmVnZXhwIixiOi9cLy8sZTovXC9bZ2ltdXldKi8saTovXG4vLGM6W2UuQkUse2I6L1xbLyxlOi9cXS8scjowLGM6W2UuQkVdfV19LGUuVE09e2NOOiJ0aXRsZSIsYjplLklSLHI6MH0sZS5VVE09e2NOOiJ0aXRsZSIsYjplLlVJUixyOjB9LGUucmVnaXN0ZXJMYW5ndWFnZSgiYXBhY2hlIixmdW5jdGlvbihlKXt2YXIgdD17Y046Im51bWJlciIsYjoiW1xcJCVdXFxkKyJ9O3JldHVybnthbGlhc2VzOlsiYXBhY2hlY29uZiJdLGNJOiEwLGM6W2UuSENNLHtjTjoidGFnIixiOiI8Lz8iLGU6Ij4ifSx7Y046ImtleXdvcmQiLGI6L1x3Ky8scjowLGs6e2NvbW1vbjoib3JkZXIgZGVueSBhbGxvdyBzZXRlbnYgcmV3cml0ZXJ1bGUgcmV3cml0ZWVuZ2luZSByZXdyaXRlY29uZCBkb2N1bWVudHJvb3Qgc2V0aGFuZGxlciBlcnJvcmRvY3VtZW50IGxvYWRtb2R1bGUgb3B0aW9ucyBoZWFkZXIgbGlzdGVuIHNlcnZlcnJvb3Qgc2VydmVybmFtZSJ9LHN0YXJ0czp7ZTovJC8scjowLGs6e2xpdGVyYWw6Im9uIG9mZiBhbGwifSxjOlt7Y046InNxYnJhY2tldCIsYjoiXFxzXFxbIixlOiJcXF0kIn0se2NOOiJjYnJhY2tldCIsYjoiW1xcJCVdXFx7IixlOiJcXH0iLGM6WyJzZWxmIix0XX0sdCxlLlFTTV19fV0saTovXFMvfX0pLGUucmVnaXN0ZXJMYW5ndWFnZSgiYmFzaCIsZnVuY3Rpb24oZSl7dmFyIHQ9e2NOOiJ2YXJpYWJsZSIsdjpbe2I6L1wkW1x3XGQjQF1bXHdcZF9dKi99LHtiOi9cJFx7KC4qPyl9L31dfSxyPXtjTjoic3RyaW5nIixiOi8iLyxlOi8iLyxjOltlLkJFLHQse2NOOiJ2YXJpYWJsZSIsYjovXCRcKC8sZTovXCkvLGM6W2UuQkVdfV19LGE9e2NOOiJzdHJpbmciLGI6LycvLGU6LycvfTtyZXR1cm57YWxpYXNlczpbInNoIiwienNoIl0sbDovLT9bYS16XC5dKy8sazp7a2V5d29yZDoiaWYgdGhlbiBlbHNlIGVsaWYgZmkgZm9yIHdoaWxlIGluIGRvIGRvbmUgY2FzZSBlc2FjIGZ1bmN0aW9uIixsaXRlcmFsOiJ0cnVlIGZhbHNlIixidWlsdF9pbjoiYnJlYWsgY2QgY29udGludWUgZXZhbCBleGVjIGV4aXQgZXhwb3J0IGdldG9wdHMgaGFzaCBwd2QgcmVhZG9ubHkgcmV0dXJuIHNoaWZ0IHRlc3QgdGltZXMgdHJhcCB1bWFzayB1bnNldCBhbGlhcyBiaW5kIGJ1aWx0aW4gY2FsbGVyIGNvbW1hbmQgZGVjbGFyZSBlY2hvIGVuYWJsZSBoZWxwIGxldCBsb2NhbCBsb2dvdXQgbWFwZmlsZSBwcmludGYgcmVhZCByZWFkYXJyYXkgc291cmNlIHR5cGUgdHlwZXNldCB1bGltaXQgdW5hbGlhcyBzZXQgc2hvcHQgYXV0b2xvYWQgYmcgYmluZGtleSBieWUgY2FwIGNoZGlyIGNsb25lIGNvbXBhcmd1bWVudHMgY29tcGNhbGwgY29tcGN0bCBjb21wZGVzY3JpYmUgY29tcGZpbGVzIGNvbXBncm91cHMgY29tcHF1b3RlIGNvbXB0YWdzIGNvbXB0cnkgY29tcHZhbHVlcyBkaXJzIGRpc2FibGUgZGlzb3duIGVjaG90YyBlY2hvdGkgZW11bGF0ZSBmYyBmZyBmbG9hdCBmdW5jdGlvbnMgZ2V0Y2FwIGdldGxuIGhpc3RvcnkgaW50ZWdlciBqb2JzIGtpbGwgbGltaXQgbG9nIG5vZ2xvYiBwb3BkIHByaW50IHB1c2hkIHB1c2hsbiByZWhhc2ggc2NoZWQgc2V0Y2FwIHNldG9wdCBzdGF0IHN1c3BlbmQgdHR5Y3RsIHVuZnVuY3Rpb24gdW5oYXNoIHVubGltaXQgdW5zZXRvcHQgdmFyZWQgd2FpdCB3aGVuY2Ugd2hlcmUgd2hpY2ggemNvbXBpbGUgemZvcm1hdCB6ZnRwIHpsZSB6bW9kbG9hZCB6cGFyc2VvcHRzIHpwcm9mIHpwdHkgenJlZ2V4cGFyc2UgenNvY2tldCB6c3R5bGUgenRjcCIsb3BlcmF0b3I6Ii1uZSAtZXEgLWx0IC1ndCAtZiAtZCAtZSAtcyAtbCAtYSJ9LGM6W3tjTjoic2hlYmFuZyIsYjovXiMhW15cbl0rc2hccyokLyxyOjEwfSx7Y046ImZ1bmN0aW9uIixiOi9cd1tcd1xkX10qXHMqXChccypcKVxzKlx7LyxyQjohMCxjOltlLmluaGVyaXQoZS5UTSx7YjovXHdbXHdcZF9dKi99KV0scjowfSxlLkhDTSxlLk5NLHIsYSx0XX19KSxlLnJlZ2lzdGVyTGFuZ3VhZ2UoImNvZmZlZXNjcmlwdCIsZnVuY3Rpb24oZSl7dmFyIHQ9e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IG5ldyBkbyByZXR1cm4gZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHRocm93IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGRlYnVnZ2VyIHN1cGVyIHRoZW4gdW5sZXNzIHVudGlsIGxvb3Agb2YgYnkgd2hlbiBhbmQgb3IgaXMgaXNudCBub3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgeWVzIG5vIG9uIG9mZiIsYnVpbHRfaW46Im5wbSByZXF1aXJlIGNvbnNvbGUgcHJpbnQgbW9kdWxlIGdsb2JhbCB3aW5kb3cgZG9jdW1lbnQifSxyPSJbQS1aYS16JF9dWzAtOUEtWmEteiRfXSoiLGE9e2NOOiJzdWJzdCIsYjovI1x7LyxlOi99LyxrOnR9LG49W2UuQk5NLGUuaW5oZXJpdChlLkNOTSx7c3RhcnRzOntlOiIoXFxzKi8pPyIscjowfX0pLHtjTjoic3RyaW5nIix2Olt7YjovJycnLyxlOi8nJycvLGM6W2UuQkVdfSx7YjovJy8sZTovJy8sYzpbZS5CRV19LHtiOi8iIiIvLGU6LyIiIi8sYzpbZS5CRSxhXX0se2I6LyIvLGU6LyIvLGM6W2UuQkUsYV19XX0se2NOOiJyZWdleHAiLHY6W3tiOiIvLy8iLGU6Ii8vLyIsYzpbYSxlLkhDTV19LHtiOiIvL1tnaW1dKiIscjowfSx7YjovXC8oPyFbICpdKShcXFwvfC4pKj9cL1tnaW1dKig/PVxXfCQpL31dfSx7Y046InByb3BlcnR5IixiOiJAIityfSx7YjoiYCIsZToiYCIsZUI6ITAsZUU6ITAsc0w6ImphdmFzY3JpcHQifV07YS5jPW47dmFyIGk9ZS5pbmhlcml0KGUuVE0se2I6cn0pLHM9IihcXCguKlxcKSk/XFxzKlxcQlstPV0+IixjPXtjTjoicGFyYW1zIixiOiJcXChbXlxcKF0iLHJCOiEwLGM6W3tiOi9cKC8sZTovXCkvLGs6dCxjOlsic2VsZiJdLmNvbmNhdChuKX1dfTtyZXR1cm57YWxpYXNlczpbImNvZmZlZSIsImNzb24iLCJpY2VkIl0sazp0LGk6L1wvXCovLGM6bi5jb25jYXQoW2UuQygiIyMjIiwiIyMjIiksZS5IQ00se2NOOiJmdW5jdGlvbiIsYjoiXlxccyoiK3IrIlxccyo9XFxzKiIrcyxlOiJbLT1dPiIsckI6ITAsYzpbaSxjXX0se2I6L1s6XCgsPV1ccyovLHI6MCxjOlt7Y046ImZ1bmN0aW9uIixiOnMsZToiWy09XT4iLHJCOiEwLGM6W2NdfV19LHtjTjoiY2xhc3MiLGJLOiJjbGFzcyIsZToiJCIsaTovWzo9IlxbXF1dLyxjOlt7Yks6ImV4dGVuZHMiLGVXOiEwLGk6L1s6PSJcW1xdXS8sYzpbaV19LGldfSx7Y046ImF0dHJpYnV0ZSIsYjpyKyI6IixlOiI6IixyQjohMCxyRTohMCxyOjB9XSl9fSksZS5yZWdpc3Rlckxhbmd1YWdlKCJjcHAiLGZ1bmN0aW9uKGUpe3ZhciB0PXtjTjoia2V5d29yZCIsYjoiXFxiW2EtelxcZF9dKl90XFxiIn0scj17Y046InN0cmluZyIsdjpbZS5pbmhlcml0KGUuUVNNLHtiOicoKHU4P3xVKXxMKT8iJ30pLHtiOicodTg/fFUpP1IiJyxlOiciJyxjOltlLkJFXX0se2I6IidcXFxcPy4iLGU6IiciLGk6Ii4ifV19LGE9e2NOOiJudW1iZXIiLHY6W3tiOiJcXGIoXFxkKyhcXC5cXGQqKT98XFwuXFxkKykodXxVfGx8THx1bHxVTHxmfEYpIn0se2I6ZS5DTlJ9XX0sbj17Y046InByZXByb2Nlc3NvciIsYjoiIyIsZToiJCIsazoiaWYgZWxzZSBlbGlmIGVuZGlmIGRlZmluZSB1bmRlZiB3YXJuaW5nIGVycm9yIGxpbmUgcHJhZ21hIGlmZGVmIGlmbmRlZiIsYzpbe2I6L1xcXG4vLHI6MH0se2JLOiJpbmNsdWRlIixlOiIkIixjOltyLHtjTjoic3RyaW5nIixiOiI8IixlOiI+IixpOiJcXG4ifV19LHIsYSxlLkNMQ00sZS5DQkNNXX0saT1lLklSKyJcXHMqXFwoIixzPXtrZXl3b3JkOiJpbnQgZmxvYXQgd2hpbGUgcHJpdmF0ZSBjaGFyIGNhdGNoIGV4cG9ydCB2aXJ0dWFsIG9wZXJhdG9yIHNpemVvZiBkeW5hbWljX2Nhc3R8MTAgdHlwZWRlZiBjb25zdF9jYXN0fDEwIGNvbnN0IHN0cnVjdCBmb3Igc3RhdGljX2Nhc3R8MTAgdW5pb24gbmFtZXNwYWNlIHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgc3RhdGljIHByb3RlY3RlZCBib29sIHRlbXBsYXRlIG11dGFibGUgaWYgcHVibGljIGZyaWVuZCBkbyBnb3RvIGF1dG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgZXh0ZXJuIHVzaW5nIGNsYXNzIGFzbSBjYXNlIHR5cGVpZCBzaG9ydCByZWludGVycHJldF9jYXN0fDEwIGRlZmF1bHQgZG91YmxlIHJlZ2lzdGVyIGV4cGxpY2l0IHNpZ25lZCB0eXBlbmFtZSB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgaW5saW5lIGRlbGV0ZSBhbGlnbm9mIGNvbnN0ZXhwciBkZWNsdHlwZSBub2V4Y2VwdCBzdGF0aWNfYXNzZXJ0IHRocmVhZF9sb2NhbCByZXN0cmljdCBfQm9vbCBjb21wbGV4IF9Db21wbGV4IF9JbWFnaW5hcnkgYXRvbWljX2Jvb2wgYXRvbWljX2NoYXIgYXRvbWljX3NjaGFyIGF0b21pY191Y2hhciBhdG9taWNfc2hvcnQgYXRvbWljX3VzaG9ydCBhdG9taWNfaW50IGF0b21pY191aW50IGF0b21pY19sb25nIGF0b21pY191bG9uZyBhdG9taWNfbGxvbmcgYXRvbWljX3VsbG9uZyIsYnVpbHRfaW46InN0ZCBzdHJpbmcgY2luIGNvdXQgY2VyciBjbG9nIHN0ZGluIHN0ZG91dCBzdGRlcnIgc3RyaW5nc3RyZWFtIGlzdHJpbmdzdHJlYW0gb3N0cmluZ3N0cmVhbSBhdXRvX3B0ciBkZXF1ZSBsaXN0IHF1ZXVlIHN0YWNrIHZlY3RvciBtYXAgc2V0IGJpdHNldCBtdWx0aXNldCBtdWx0aW1hcCB1bm9yZGVyZWRfc2V0IHVub3JkZXJlZF9tYXAgdW5vcmRlcmVkX211bHRpc2V0IHVub3JkZXJlZF9tdWx0aW1hcCBhcnJheSBzaGFyZWRfcHRyIGFib3J0IGFicyBhY29zIGFzaW4gYXRhbjIgYXRhbiBjYWxsb2MgY2VpbCBjb3NoIGNvcyBleGl0IGV4cCBmYWJzIGZsb29yIGZtb2QgZnByaW50ZiBmcHV0cyBmcmVlIGZyZXhwIGZzY2FuZiBpc2FsbnVtIGlzYWxwaGEgaXNjbnRybCBpc2RpZ2l0IGlzZ3JhcGggaXNsb3dlciBpc3ByaW50IGlzcHVuY3QgaXNzcGFjZSBpc3VwcGVyIGlzeGRpZ2l0IHRvbG93ZXIgdG91cHBlciBsYWJzIGxkZXhwIGxvZzEwIGxvZyBtYWxsb2MgcmVhbGxvYyBtZW1jaHIgbWVtY21wIG1lbWNweSBtZW1zZXQgbW9kZiBwb3cgcHJpbnRmIHB1dGNoYXIgcHV0cyBzY2FuZiBzaW5oIHNpbiBzbnByaW50ZiBzcHJpbnRmIHNxcnQgc3NjYW5mIHN0cmNhdCBzdHJjaHIgc3RyY21wIHN0cmNweSBzdHJjc3BuIHN0cmxlbiBzdHJuY2F0IHN0cm5jbXAgc3RybmNweSBzdHJwYnJrIHN0cnJjaHIgc3Ryc3BuIHN0cnN0ciB0YW5oIHRhbiB2ZnByaW50ZiB2cHJpbnRmIHZzcHJpbnRmIixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGxwdHIgTlVMTCJ9O3JldHVybnthbGlhc2VzOlsiYyIsImNjIiwiaCIsImMrKyIsImgrKyIsImhwcCJdLGs6cyxpOiI8LyIsYzpbdCxlLkNMQ00sZS5DQkNNLGEscixuLHtiOiJcXGIoZGVxdWV8bGlzdHxxdWV1ZXxzdGFja3x2ZWN0b3J8bWFwfHNldHxiaXRzZXR8bXVsdGlzZXR8bXVsdGltYXB8dW5vcmRlcmVkX21hcHx1bm9yZGVyZWRfc2V0fHVub3JkZXJlZF9tdWx0aXNldHx1bm9yZGVyZWRfbXVsdGltYXB8YXJyYXkpXFxzKjwiLGU6Ij4iLGs6cyxjOlsic2VsZiIsdF19LHtiOmUuSVIrIjo6IixrOnN9LHtiSzoibmV3IHRocm93IHJldHVybiBlbHNlIixyOjB9LHtjTjoiZnVuY3Rpb24iLGI6IigiK2UuSVIrIltcXComXFxzXSspKyIraSxyQjohMCxlOi9bezs9XS8sZUU6ITAsazpzLGk6L1teXHdcc1wqJl0vLGM6W3tiOmksckI6ITAsYzpbZS5UTV0scjowfSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxrOnMscjowLGM6W2UuQ0xDTSxlLkNCQ00scixhXX0sZS5DTENNLGUuQ0JDTSxuXX1dfX0pLGUucmVnaXN0ZXJMYW5ndWFnZSgiY3MiLGZ1bmN0aW9uKGUpe3ZhciB0PSJhYnN0cmFjdCBhcyBiYXNlIGJvb2wgYnJlYWsgYnl0ZSBjYXNlIGNhdGNoIGNoYXIgY2hlY2tlZCBjb25zdCBjb250aW51ZSBkZWNpbWFsIGR5bmFtaWMgZGVmYXVsdCBkZWxlZ2F0ZSBkbyBkb3VibGUgZWxzZSBlbnVtIGV2ZW50IGV4cGxpY2l0IGV4dGVybiBmYWxzZSBmaW5hbGx5IGZpeGVkIGZsb2F0IGZvciBmb3JlYWNoIGdvdG8gaWYgaW1wbGljaXQgaW4gaW50IGludGVyZmFjZSBpbnRlcm5hbCBpcyBsb2NrIGxvbmcgbnVsbCB3aGVuIG9iamVjdCBvcGVyYXRvciBvdXQgb3ZlcnJpZGUgcGFyYW1zIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFkb25seSByZWYgc2J5dGUgc2VhbGVkIHNob3J0IHNpemVvZiBzdGFja2FsbG9jIHN0YXRpYyBzdHJpbmcgc3RydWN0IHN3aXRjaCB0aGlzIHRydWUgdHJ5IHR5cGVvZiB1aW50IHVsb25nIHVuY2hlY2tlZCB1bnNhZmUgdXNob3J0IHVzaW5nIHZpcnR1YWwgdm9sYXRpbGUgdm9pZCB3aGlsZSBhc3luYyBwcm90ZWN0ZWQgcHVibGljIHByaXZhdGUgaW50ZXJuYWwgYXNjZW5kaW5nIGRlc2NlbmRpbmcgZnJvbSBnZXQgZ3JvdXAgaW50byBqb2luIGxldCBvcmRlcmJ5IHBhcnRpYWwgc2VsZWN0IHNldCB2YWx1ZSB2YXIgd2hlcmUgeWllbGQiLHI9ZS5JUisiKDwiK2UuSVIrIj4pPyI7cmV0dXJue2FsaWFzZXM6WyJjc2hhcnAiXSxrOnQsaTovOjovLGM6W2UuQygiLy8vIiwiJCIse3JCOiEwLGM6W3tjTjoieG1sRG9jVGFnIix2Olt7YjoiLy8vIixyOjB9LHtiOiI8IS0tfC0tPiJ9LHtiOiI8Lz8iLGU6Ij4ifV19XX0pLGUuQ0xDTSxlLkNCQ00se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGs6ImlmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHJlZ2lvbiBlbmRyZWdpb24gcHJhZ21hIGNoZWNrc3VtIn0se2NOOiJzdHJpbmciLGI6J0AiJyxlOiciJyxjOlt7YjonIiInfV19LGUuQVNNLGUuUVNNLGUuQ05NLHtiSzoiY2xhc3MgaW50ZXJmYWNlIixlOi9bezs9XS8saTovW15cczpdLyxjOltlLlRNLGUuQ0xDTSxlLkNCQ01dfSx7Yks6Im5hbWVzcGFjZSIsZTovW3s7PV0vLGk6L1teXHM6XS8sYzpbe2NOOiJ0aXRsZSIsYjoiW2EtekEtWl0oXFwuP1xcdykqIixyOjB9LGUuQ0xDTSxlLkNCQ01dfSx7Yks6Im5ldyByZXR1cm4gdGhyb3cgYXdhaXQiLHI6MH0se2NOOiJmdW5jdGlvbiIsYjoiKCIrcisiXFxzKykrIitlLklSKyJcXHMqXFwoIixyQjohMCxlOi9bezs9XS8sZUU6ITAsazp0LGM6W3tiOmUuSVIrIlxccypcXCgiLHJCOiEwLGM6W2UuVE1dLHI6MH0se2NOOiJwYXJhbXMiLGI6L1woLyxlOi9cKS8sZUI6ITAsZUU6ITAsazp0LHI6MCxjOltlLkFTTSxlLlFTTSxlLkNOTSxlLkNCQ01dfSxlLkNMQ00sZS5DQkNNXX1dfX0pLGUucmVnaXN0ZXJMYW5ndWFnZSgiY3NzIixmdW5jdGlvbihlKXt2YXIgdD0iW2EtekEtWi1dW2EtekEtWjAtOV8tXSoiLHI9e2NOOiJmdW5jdGlvbiIsYjp0KyJcXCgiLHJCOiEwLGVFOiEwLGU6IlxcKCJ9LGE9e2NOOiJydWxlIixiOi9bQS1aXF9cLlwtXStccyo6LyxyQjohMCxlOiI7IixlVzohMCxjOlt7Y046ImF0dHJpYnV0ZSIsYjovXFMvLGU6IjoiLGVFOiEwLHN0YXJ0czp7Y046InZhbHVlIixlVzohMCxlRTohMCxjOltyLGUuQ1NTTk0sZS5RU00sZS5BU00sZS5DQkNNLHtjTjoiaGV4Y29sb3IiLGI6IiNbMC05QS1GYS1mXSsifSx7Y046ImltcG9ydGFudCIsYjoiIWltcG9ydGFudCJ9XX19XX07cmV0dXJue2NJOiEwLGk6L1s9XC98J1wkXS8sYzpbZS5DQkNNLHtjTjoiaWQiLGI6L1wjW0EtWmEtejAtOV8tXSsvfSx7Y046ImNsYXNzIixiOi9cLltBLVphLXowLTlfLV0rL30se2NOOiJhdHRyX3NlbGVjdG9yIixiOi9cWy8sZTovXF0vLGk6IiQifSx7Y046InBzZXVkbyIsYjovOig6KT9bYS16QS1aMC05XF9cLVwrXChcKSInXSsvfSx7Y046ImF0X3J1bGUiLGI6IkAoZm9udC1mYWNlfHBhZ2UpIixsOiJbYS16LV0rIixrOiJmb250LWZhY2UgcGFnZSJ9LHtjTjoiYXRfcnVsZSIsYjoiQCIsZToiW3s7XSIsYzpbe2NOOiJrZXl3b3JkIixiOi9cUysvfSx7YjovXHMvLGVXOiEwLGVFOiEwLHI6MCxjOltyLGUuQVNNLGUuUVNNLGUuQ1NTTk1dfV19LHtjTjoidGFnIixiOnQscjowfSx7Y046InJ1bGVzIixiOiJ7IixlOiJ9IixpOi9cUy8sYzpbZS5DQkNNLGFdfV19fSksZS5yZWdpc3Rlckxhbmd1YWdlKCJkaWZmIixmdW5jdGlvbihlKXtyZXR1cm57YWxpYXNlczpbInBhdGNoIl0sYzpbe2NOOiJjaHVuayIscjoxMCx2Olt7YjovXkBAICtcLVxkKyxcZCsgK1wrXGQrLFxkKyArQEAkL30se2I6L15cKlwqXCogK1xkKyxcZCsgK1wqXCpcKlwqJC99LHtiOi9eXC1cLVwtICtcZCssXGQrICtcLVwtXC1cLSQvfV19LHtjTjoiaGVhZGVyIix2Olt7YjovSW5kZXg6IC8sZTovJC99LHtiOi89PT09PS8sZTovPT09PT0kL30se2I6L15cLVwtXC0vLGU6LyQvfSx7YjovXlwqezN9IC8sZTovJC99LHtiOi9eXCtcK1wrLyxlOi8kL30se2I6L1wqezV9LyxlOi9cKns1fSQvfV19LHtjTjoiYWRkaXRpb24iLGI6Il5cXCsiLGU6IiQifSx7Y046ImRlbGV0aW9uIixiOiJeXFwtIixlOiIkIn0se2NOOiJjaGFuZ2UiLGI6Il5cXCEiLGU6IiQifV19fSksZS5yZWdpc3Rlckxhbmd1YWdlKCJodHRwIixmdW5jdGlvbihlKXtyZXR1cm57YWxpYXNlczpbImh0dHBzIl0saToiXFxTIixjOlt7Y046InN0YXR1cyIsYjoiXkhUVFAvWzAtOVxcLl0rIixlOiIkIixjOlt7Y046Im51bWJlciIsYjoiXFxiXFxkezN9XFxiIn1dfSx7Y046InJlcXVlc3QiLGI6Il5bQS1aXSsgKC4qPykgSFRUUC9bMC05XFwuXSskIixyQjohMCxlOiIkIixjOlt7Y046InN0cmluZyIsYjoiICIsZToiICIsZUI6ITAsZUU6ITB9XX0se2NOOiJhdHRyaWJ1dGUiLGI6Il5cXHciLGU6IjogIixlRTohMCxpOiJcXG58XFxzfD0iLHN0YXJ0czp7Y046InN0cmluZyIsZToiJCJ9fSx7YjoiXFxuXFxuIixzdGFydHM6e3NMOltdLGVXOiEwfX1dfX0pLGUucmVnaXN0ZXJMYW5ndWFnZSgiaW5pIixmdW5jdGlvbihlKXt2YXIgdD17Y046InN0cmluZyIsYzpbZS5CRV0sdjpbe2I6IicnJyIsZToiJycnIixyOjEwfSx7YjonIiIiJyxlOiciIiInLHI6MTB9LHtiOiciJyxlOiciJ30se2I6IiciLGU6IicifV19O3JldHVybnthbGlhc2VzOlsidG9tbCJdLGNJOiEwLGk6L1xTLyxjOltlLkMoIjsiLCIkIiksZS5IQ00se2NOOiJ0aXRsZSIsYjovXlxzKlxbKy8sZTovXF0rL30se2NOOiJzZXR0aW5nIixiOi9eW2EtejAtOVxbXF1fLV0rXHMqPVxzKi8sZToiJCIsYzpbe2NOOiJ2YWx1ZSIsZVc6ITAsazoib24gb2ZmIHRydWUgZmFsc2UgeWVzIG5vIixjOlt7Y046InZhcmlhYmxlIix2Olt7YjovXCRbXHdcZCJdW1x3XGRfXSovfSx7YjovXCRceyguKj8pfS99XX0sdCx7Y046Im51bWJlciIsYjovKFtcK1wtXSspP1tcZF0rX1tcZF9dKy99LGUuTk1dLHI6MH1dfV19fSksZS5yZWdpc3Rlckxhbmd1YWdlKCJqYXZhIixmdW5jdGlvbihlKXt2YXIgdD1lLlVJUisiKDwiK2UuVUlSKyI+KT8iLHI9ImZhbHNlIHN5bmNocm9uaXplZCBpbnQgYWJzdHJhY3QgZmxvYXQgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgY29uc3QgZm9yIHRydWUgd2hpbGUgbG9uZyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHZvaWQgZW51bSBlbHNlIGJyZWFrIHRyYW5zaWVudCBjYXRjaCBpbnN0YW5jZW9mIGJ5dGUgc3VwZXIgdm9sYXRpbGUgY2FzZSBhc3NlcnQgc2hvcnQgcGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyBwcm90ZWN0ZWQgcHVibGljIHByaXZhdGUiLGE9IlxcYigwW2JCXShbMDFdK1swMV9dK1swMV0rfFswMV0rKXwwW3hYXShbYS1mQS1GMC05XStbYS1mQS1GMC05X10rW2EtZkEtRjAtOV0rfFthLWZBLUYwLTldKyl8KChbXFxkXStbXFxkX10rW1xcZF0rfFtcXGRdKykoXFwuKFtcXGRdK1tcXGRfXStbXFxkXSt8W1xcZF0rKSk/fFxcLihbXFxkXStbXFxkX10rW1xcZF0rfFtcXGRdKykpKFtlRV1bLStdP1xcZCspPylbbExmRl0/IixuPXtjTjoibnVtYmVyIixiOmEscjowfTtyZXR1cm57YWxpYXNlczpbImpzcCJdLGs6cixpOi88XC98Iy8sYzpbZS5DKCIvXFwqXFwqIiwiXFwqLyIse3I6MCxjOlt7Y046ImRvY3RhZyIsYjoiQFtBLVphLXpdKyJ9XX0pLGUuQ0xDTSxlLkNCQ00sZS5BU00sZS5RU00se2NOOiJjbGFzcyIsYks6ImNsYXNzIGludGVyZmFjZSIsZTovW3s7PV0vLGVFOiEwLGs6ImNsYXNzIGludGVyZmFjZSIsaTovWzoiXFtcXV0vLGM6W3tiSzoiZXh0ZW5kcyBpbXBsZW1lbnRzIn0sZS5VVE1dfSx7Yks6Im5ldyB0aHJvdyByZXR1cm4gZWxzZSIscjowfSx7Y046ImZ1bmN0aW9uIixiOiIoIit0KyJcXHMrKSsiK2UuVUlSKyJcXHMqXFwoIixyQjohMCxlOi9bezs9XS8sZUU6ITAsazpyLGM6W3tiOmUuVUlSKyJcXHMqXFwoIixyQjohMCxyOjAsYzpbZS5VVE1dfSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxrOnIscjowLGM6W2UuQVNNLGUuUVNNLGUuQ05NLGUuQ0JDTV19LGUuQ0xDTSxlLkNCQ01dfSxuLHtjTjoiYW5ub3RhdGlvbiIsYjoiQFtBLVphLXpdKyJ9XX19KSxlLnJlZ2lzdGVyTGFuZ3VhZ2UoImphdmFzY3JpcHQiLGZ1bmN0aW9uKGUpe3JldHVybnthbGlhc2VzOlsianMiXSxrOntrZXl3b3JkOiJpbiBvZiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBsZXQgeWllbGQgY29uc3QgZXhwb3J0IHN1cGVyIGRlYnVnZ2VyIGFzIGFzeW5jIGF3YWl0IixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIE5hTiBJbmZpbml0eSIsYnVpbHRfaW46ImV2YWwgaXNGaW5pdGUgaXNOYU4gcGFyc2VGbG9hdCBwYXJzZUludCBkZWNvZGVVUkkgZGVjb2RlVVJJQ29tcG9uZW50IGVuY29kZVVSSSBlbmNvZGVVUklDb21wb25lbnQgZXNjYXBlIHVuZXNjYXBlIE9iamVjdCBGdW5jdGlvbiBCb29sZWFuIEVycm9yIEV2YWxFcnJvciBJbnRlcm5hbEVycm9yIFJhbmdlRXJyb3IgUmVmZXJlbmNlRXJyb3IgU3RvcEl0ZXJhdGlvbiBTeW50YXhFcnJvciBUeXBlRXJyb3IgVVJJRXJyb3IgTnVtYmVyIE1hdGggRGF0ZSBTdHJpbmcgUmVnRXhwIEFycmF5IEZsb2F0MzJBcnJheSBGbG9hdDY0QXJyYXkgSW50MTZBcnJheSBJbnQzMkFycmF5IEludDhBcnJheSBVaW50MTZBcnJheSBVaW50MzJBcnJheSBVaW50OEFycmF5IFVpbnQ4Q2xhbXBlZEFycmF5IEFycmF5QnVmZmVyIERhdGFWaWV3IEpTT04gSW50bCBhcmd1bWVudHMgcmVxdWlyZSBtb2R1bGUgY29uc29sZSB3aW5kb3cgZG9jdW1lbnQgU3ltYm9sIFNldCBNYXAgV2Vha1NldCBXZWFrTWFwIFByb3h5IFJlZmxlY3QgUHJvbWlzZSJ9LGM6W3tjTjoicGkiLHI6MTAsYjovXlxzKlsnIl11c2UgKHN0cmljdHxhc20pWyciXS99LGUuQVNNLGUuUVNNLHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOltlLkJFLHtjTjoic3Vic3QiLGI6IlxcJFxceyIsZToiXFx9In1dfSxlLkNMQ00sZS5DQkNNLHtjTjoibnVtYmVyIix2Olt7YjoiXFxiKDBbYkJdWzAxXSspIn0se2I6IlxcYigwW29PXVswLTddKykifSx7YjplLkNOUn1dLHI6MH0se2I6IigiK2UuUlNSKyJ8XFxiKGNhc2V8cmV0dXJufHRocm93KVxcYilcXHMqIixrOiJyZXR1cm4gdGhyb3cgY2FzZSIsYzpbZS5DTENNLGUuQ0JDTSxlLlJNLHtiOi88LyxlOi8+XHMqWyk7XF1dLyxyOjAsc0w6InhtbCJ9XSxyOjB9LHtjTjoiZnVuY3Rpb24iLGJLOiJmdW5jdGlvbiIsZTovXHsvLGVFOiEwLGM6W2UuaW5oZXJpdChlLlRNLHtiOi9bQS1aYS16JF9dWzAtOUEtWmEteiRfXSovfSkse2NOOiJwYXJhbXMiLGI6L1woLyxlOi9cKS8sZUI6ITAsZUU6ITAsYzpbZS5DTENNLGUuQ0JDTV19XSxpOi9cW3wlL30se2I6L1wkWyguXS99LHtiOiJcXC4iK2UuSVIscjowfSx7Yks6ImltcG9ydCIsZToiWzskXSIsazoiaW1wb3J0IGZyb20gYXMiLGM6W2UuQVNNLGUuUVNNXX0se2NOOiJjbGFzcyIsYks6ImNsYXNzIixlOi9bezs9XS8sZUU6ITAsaTovWzoiXFtcXV0vLGM6W3tiSzoiZXh0ZW5kcyJ9LGUuVVRNXX1dLGk6LyMvfX0pLGUucmVnaXN0ZXJMYW5ndWFnZSgianNvbiIsZnVuY3Rpb24oZSl7dmFyIHQ9e2xpdGVyYWw6InRydWUgZmFsc2UgbnVsbCJ9LHI9W2UuUVNNLGUuQ05NXSxhPXtjTjoidmFsdWUiLGU6IiwiLGVXOiEwLGVFOiEwLGM6cixrOnR9LG49e2I6InsiLGU6In0iLGM6W3tjTjoiYXR0cmlidXRlIixiOidcXHMqIicsZTonIlxccyo6XFxzKicsZUI6ITAsZUU6ITAsYzpbZS5CRV0saToiXFxuIixzdGFydHM6YX1dLGk6IlxcUyJ9LGk9e2I6IlxcWyIsZToiXFxdIixjOltlLmluaGVyaXQoYSx7Y046bnVsbH0pXSxpOiJcXFMifTtyZXR1cm4gci5zcGxpY2Uoci5sZW5ndGgsMCxuLGkpLHtjOnIsazp0LGk6IlxcUyJ9fSksZS5yZWdpc3Rlckxhbmd1YWdlKCJtYWtlZmlsZSIsZnVuY3Rpb24oZSl7dmFyIHQ9e2NOOiJ2YXJpYWJsZSIsYjovXCRcKC8sZTovXCkvLGM6W2UuQkVdfTtyZXR1cm57YWxpYXNlczpbIm1rIiwibWFrIl0sYzpbZS5IQ00se2I6L15cdytccypcVyo9LyxyQjohMCxyOjAsc3RhcnRzOntjTjoiY29uc3RhbnQiLGU6L1xzKlxXKj0vLGVFOiEwLHN0YXJ0czp7ZTovJC8scjowLGM6W3RdfX19LHtjTjoidGl0bGUiLGI6L15bXHddKzpccyokL30se2NOOiJwaG9ueSIsYjovXlwuUEhPTlk6LyxlOi8kLyxrOiIuUEhPTlkiLGw6L1tcLlx3XSsvfSx7YjovXlx0Ky8sZTovJC8scjowLGM6W2UuUVNNLHRdfV19fSksZS5yZWdpc3Rlckxhbmd1YWdlKCJ4bWwiLGZ1bmN0aW9uKGUpe3ZhciB0PSJbQS1aYS16MC05XFwuXzotXSsiLHI9e2I6LzxcPyhwaHApPyg/IVx3KS8sZTovXD8+LyxzTDoicGhwIn0sYT17ZVc6ITAsaTovPC8scjowLGM6W3Ise2NOOiJhdHRyaWJ1dGUiLGI6dCxyOjB9LHtiOiI9IixyOjAsYzpbe2NOOiJ2YWx1ZSIsYzpbcl0sdjpbe2I6LyIvLGU6LyIvfSx7YjovJy8sZTovJy99LHtiOi9bXlxzXC8+XSsvfV19XX1dfTtyZXR1cm57YWxpYXNlczpbImh0bWwiLCJ4aHRtbCIsInJzcyIsImF0b20iLCJ4c2wiLCJwbGlzdCJdLGNJOiEwLGM6W3tjTjoiZG9jdHlwZSIsYjoiPCFET0NUWVBFIixlOiI+IixyOjEwLGM6W3tiOiJcXFsiLGU6IlxcXSJ9XX0sZS5DKCI8IS0tIiwiLS0+Iix7cjoxMH0pLHtjTjoiY2RhdGEiLGI6IjxcXCFcXFtDREFUQVxcWyIsZToiXFxdXFxdPiIscjoxMH0se2NOOiJ0YWciLGI6IjxzdHlsZSg/PVxcc3w+fCQpIixlOiI+IixrOnt0aXRsZToic3R5bGUifSxjOlthXSxzdGFydHM6e2U6Ijwvc3R5bGU+IixyRTohMCxzTDoiY3NzIn19LHtjTjoidGFnIixiOiI8c2NyaXB0KD89XFxzfD58JCkiLGU6Ij4iLGs6e3RpdGxlOiJzY3JpcHQifSxjOlthXSxzdGFydHM6e2U6Ijwvc2NyaXB0PiIsckU6ITAsc0w6WyJhY3Rpb25zY3JpcHQiLCJqYXZhc2NyaXB0IiwiaGFuZGxlYmFycyJdfX0scix7Y046InBpIixiOi88XD9cdysvLGU6L1w/Pi8scjoxMH0se2NOOiJ0YWciLGI6IjwvPyIsZToiLz8+IixjOlt7Y046InRpdGxlIixiOi9bXiBcLz48XG5cdF0rLyxyOjB9LGFdfV19fSksZS5yZWdpc3Rlckxhbmd1YWdlKCJtYXJrZG93biIsZnVuY3Rpb24oZSl7cmV0dXJue2FsaWFzZXM6WyJtZCIsIm1rZG93biIsIm1rZCJdLGM6W3tjTjoiaGVhZGVyIix2Olt7YjoiXiN7MSw2fSIsZToiJCJ9LHtiOiJeLis/XFxuWz0tXXsyLH0kIn1dfSx7YjoiPCIsZToiPiIsc0w6InhtbCIscjowfSx7Y046ImJ1bGxldCIsYjoiXihbKistXXwoXFxkK1xcLikpXFxzKyJ9LHtjTjoic3Ryb25nIixiOiJbKl9dezJ9Lis/WypfXXsyfSJ9LHtjTjoiZW1waGFzaXMiLHY6W3tiOiJcXCouKz9cXCoifSx7YjoiXy4rP18iLHI6MH1dfSx7Y046ImJsb2NrcXVvdGUiLGI6Il4+XFxzKyIsZToiJCJ9LHtjTjoiY29kZSIsdjpbe2I6ImAuKz9gIn0se2I6Il4oIHs0fXwJKSIsZToiJCIscjowfV19LHtjTjoiaG9yaXpvbnRhbF9ydWxlIixiOiJeWy1cXCpdezMsfSIsZToiJCJ9LHtiOiJcXFsuKz9cXF1bXFwoXFxbXS4qP1tcXClcXF1dIixyQjohMCxjOlt7Y046ImxpbmtfbGFiZWwiLGI6IlxcWyIsZToiXFxdIixlQjohMCxyRTohMCxyOjB9LHtjTjoibGlua191cmwiLGI6IlxcXVxcKCIsZToiXFwpIixlQjohMCxlRTohMH0se2NOOiJsaW5rX3JlZmVyZW5jZSIsYjoiXFxdXFxbIixlOiJcXF0iLGVCOiEwLGVFOiEwfV0scjoxMH0se2I6Il5cXFsuK1xcXToiLHJCOiEwLGM6W3tjTjoibGlua19yZWZlcmVuY2UiLGI6IlxcWyIsZToiXFxdOiIsZUI6ITAsZUU6ITAsc3RhcnRzOntjTjoibGlua191cmwiLGU6IiQifX1dfV19fSksZS5yZWdpc3Rlckxhbmd1YWdlKCJuZ2lueCIsZnVuY3Rpb24oZSl7dmFyIHQ9e2NOOiJ2YXJpYWJsZSIsdjpbe2I6L1wkXGQrL30se2I6L1wkXHsvLGU6L30vfSx7YjoiW1xcJFxcQF0iK2UuVUlSfV19LHI9e2VXOiEwLGw6IlthLXovX10rIixrOntidWlsdF9pbjoib24gb2ZmIHllcyBubyB0cnVlIGZhbHNlIG5vbmUgYmxvY2tlZCBkZWJ1ZyBpbmZvIG5vdGljZSB3YXJuIGVycm9yIGNyaXQgc2VsZWN0IGJyZWFrIGxhc3QgcGVybWFuZW50IHJlZGlyZWN0IGtxdWV1ZSBydHNpZyBlcG9sbCBwb2xsIC9kZXYvcG9sbCJ9LHI6MCxpOiI9PiIsYzpbZS5IQ00se2NOOiJzdHJpbmciLGM6W2UuQkUsdF0sdjpbe2I6LyIvLGU6LyIvfSx7YjovJy8sZTovJy99XX0se2NOOiJ1cmwiLGI6IihbYS16XSspOi8iLGU6IlxccyIsZVc6ITAsZUU6ITAsYzpbdF19LHtjTjoicmVnZXhwIixjOltlLkJFLHRdLHY6W3tiOiJcXHNcXF4iLGU6Ilxcc3x7fDsiLHJFOiEwfSx7YjoiflxcKj9cXHMrIixlOiJcXHN8e3w7IixyRTohMH0se2I6IlxcKihcXC5bYS16XFwtXSspKyJ9LHtiOiIoW2EtelxcLV0rXFwuKStcXCoifV19LHtjTjoibnVtYmVyIixiOiJcXGJcXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSg6XFxkezEsNX0pP1xcYiJ9LHtjTjoibnVtYmVyIixiOiJcXGJcXGQrW2tLbU1nR2RzaGR3eV0qXFxiIixyOjB9LHRdfTtyZXR1cm57YWxpYXNlczpbIm5naW54Y29uZiJdLGM6W2UuSENNLHtiOmUuVUlSKyJcXHMiLGU6Ijt8eyIsckI6ITAsYzpbe2NOOiJ0aXRsZSIsYjplLlVJUixzdGFydHM6cn1dLHI6MH1dLGk6IlteXFxzXFx9XSJ9fSksZS5yZWdpc3Rlckxhbmd1YWdlKCJvYmplY3RpdmVjIixmdW5jdGlvbihlKXt2YXIgdD17Y046ImJ1aWx0X2luIixiOiIoQVZ8Q0F8Q0Z8Q0d8Q0l8TUt8TVB8TlN8VUkpXFx3KyJ9LHI9e2tleXdvcmQ6ImludCBmbG9hdCB3aGlsZSBjaGFyIGV4cG9ydCBzaXplb2YgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgZm9yIHVuaW9uIHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgc3RhdGljIGJvb2wgbXV0YWJsZSBpZiBkbyByZXR1cm4gZ290byB2b2lkIGVudW0gZWxzZSBicmVhayBleHRlcm4gYXNtIGNhc2Ugc2hvcnQgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRoaXMgc3dpdGNoIGNvbnRpbnVlIHdjaGFyX3QgaW5saW5lIHJlYWRvbmx5IGFzc2lnbiByZWFkd3JpdGUgc2VsZiBAc3luY2hyb25pemVkIGlkIHR5cGVvZiBub25hdG9taWMgc3VwZXIgdW5pY2hhciBJQk91dGxldCBJQkFjdGlvbiBzdHJvbmcgd2VhayBjb3B5IGluIG91dCBpbm91dCBieWNvcHkgYnlyZWYgb25ld2F5IF9fc3Ryb25nIF9fd2VhayBfX2Jsb2NrIF9fYXV0b3JlbGVhc2luZyBAcHJpdmF0ZSBAcHJvdGVjdGVkIEBwdWJsaWMgQHRyeSBAcHJvcGVydHkgQGVuZCBAdGhyb3cgQGNhdGNoIEBmaW5hbGx5IEBhdXRvcmVsZWFzZXBvb2wgQHN5bnRoZXNpemUgQGR5bmFtaWMgQHNlbGVjdG9yIEBvcHRpb25hbCBAcmVxdWlyZWQiLGxpdGVyYWw6ImZhbHNlIHRydWUgRkFMU0UgVFJVRSBuaWwgWUVTIE5PIE5VTEwiLGJ1aWx0X2luOiJCT09MIGRpc3BhdGNoX29uY2VfdCBkaXNwYXRjaF9xdWV1ZV90IGRpc3BhdGNoX3N5bmMgZGlzcGF0Y2hfYXN5bmMgZGlzcGF0Y2hfb25jZSJ9LGE9L1thLXpBLVpAXVthLXpBLVowLTlfXSovLG49IkBpbnRlcmZhY2UgQGNsYXNzIEBwcm90b2NvbCBAaW1wbGVtZW50YXRpb24iO3JldHVybnthbGlhc2VzOlsibW0iLCJvYmpjIiwib2JqLWMiXSxrOnIsbDphLGk6IjwvIixjOlt0LGUuQ0xDTSxlLkNCQ00sZS5DTk0sZS5RU00se2NOOiJzdHJpbmciLHY6W3tiOidAIicsZTonIicsaToiXFxuIixjOltlLkJFXX0se2I6IiciLGU6IlteXFxcXF0nIixpOiJbXlxcXFxdW14nXSJ9XX0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGM6W3tjTjoidGl0bGUiLHY6W3tiOiciJyxlOiciJ30se2I6IjwiLGU6Ij4ifV19XX0se2NOOiJjbGFzcyIsYjoiKCIrbi5zcGxpdCgiICIpLmpvaW4oInwiKSsiKVxcYiIsZToiKHt8JCkiLGVFOiEwLGs6bixsOmEsYzpbZS5VVE1dfSx7Y046InZhcmlhYmxlIixiOiJcXC4iK2UuVUlSLHI6MH1dfX0pLGUucmVnaXN0ZXJMYW5ndWFnZSgicGVybCIsZnVuY3Rpb24oZSl7dmFyIHQ9ImdldHB3ZW50IGdldHNlcnZlbnQgcXVvdGVtZXRhIG1zZ3JjdiBzY2FsYXIga2lsbCBkYm1jbG9zZSB1bmRlZiBsYyBtYSBzeXN3cml0ZSB0ciBzZW5kIHVtYXNrIHN5c29wZW4gc2htd3JpdGUgdmVjIHF4IHV0aW1lIGxvY2FsIG9jdCBzZW1jdGwgbG9jYWx0aW1lIHJlYWRwaXBlIGRvIHJldHVybiBmb3JtYXQgcmVhZCBzcHJpbnRmIGRibW9wZW4gcG9wIGdldHBncnAgbm90IGdldHB3bmFtIHJld2luZGRpciBxcWZpbGVubyBxdyBlbmRwcm90b2VudCB3YWl0IHNldGhvc3RlbnQgYmxlc3Mgc3wwIG9wZW5kaXIgY29udGludWUgZWFjaCBzbGVlcCBlbmRncmVudCBzaHV0ZG93biBkdW1wIGNob21wIGNvbm5lY3QgZ2V0c29ja25hbWUgZGllIHNvY2tldHBhaXIgY2xvc2UgZmxvY2sgZXhpc3RzIGluZGV4IHNobWdldHN1YiBmb3IgZW5kcHdlbnQgcmVkbyBsc3RhdCBtc2djdGwgc2V0cGdycCBhYnMgZXhpdCBzZWxlY3QgcHJpbnQgcmVmIGdldGhvc3RieWFkZHIgdW5zaGlmdCBmY250bCBzeXNjYWxsIGdvdG8gZ2V0bmV0YnlhZGRyIGpvaW4gZ210aW1lIHN5bWxpbmsgc2VtZ2V0IHNwbGljZSB4fDAgZ2V0cGVlcm5hbWUgcmVjdiBsb2cgc2V0c29ja29wdCBjb3MgbGFzdCByZXZlcnNlIGdldGhvc3RieW5hbWUgZ2V0Z3JuYW0gc3R1ZHkgZm9ybWxpbmUgZW5kaG9zdGVudCB0aW1lcyBjaG9wIGxlbmd0aCBnZXRob3N0ZW50IGdldG5ldGVudCBwYWNrIGdldHByb3RvZW50IGdldHNlcnZieW5hbWUgcmFuZCBta2RpciBwb3MgY2htb2QgeXwwIHN1YnN0ciBlbmRuZXRlbnQgcHJpbnRmIG5leHQgb3BlbiBtc2dzbmQgcmVhZGRpciB1c2UgdW5saW5rIGdldHNvY2tvcHQgZ2V0cHJpb3JpdHkgcmluZGV4IHdhbnRhcnJheSBoZXggc3lzdGVtIGdldHNlcnZieXBvcnQgZW5kc2VydmVudCBpbnQgY2hyIHVudGllIHJtZGlyIHByb3RvdHlwZSB0ZWxsIGxpc3RlbiBmb3JrIHNobXJlYWQgdWNmaXJzdCBzZXRwcm90b2VudCBlbHNlIHN5c3NlZWsgbGluayBnZXRncmdpZCBzaG1jdGwgd2FpdHBpZCB1bnBhY2sgZ2V0bmV0YnluYW1lIHJlc2V0IGNoZGlyIGdyZXAgc3BsaXQgcmVxdWlyZSBjYWxsZXIgbGNmaXJzdCB1bnRpbCB3YXJuIHdoaWxlIHZhbHVlcyBzaGlmdCB0ZWxsZGlyIGdldHB3dWlkIG15IGdldHByb3RvYnludW1iZXIgZGVsZXRlIGFuZCBzb3J0IHVjIGRlZmluZWQgc3JhbmQgYWNjZXB0IHBhY2thZ2Ugc2Vla2RpciBnZXRwcm90b2J5bmFtZSBzZW1vcCBvdXIgcmVuYW1lIHNlZWsgaWYgcXwwIGNocm9vdCBzeXNyZWFkIHNldHB3ZW50IG5vIGNyeXB0IGdldGMgY2hvd24gc3FydCB3cml0ZSBzZXRuZXRlbnQgc2V0cHJpb3JpdHkgZm9yZWFjaCB0aWUgc2luIG1zZ2dldCBtYXAgc3RhdCBnZXRsb2dpbiB1bmxlc3MgZWxzaWYgdHJ1bmNhdGUgZXhlYyBrZXlzIGdsb2IgdGllZCBjbG9zZWRpcmlvY3RsIHNvY2tldCByZWFkbGluayBldmFsIHhvciByZWFkbGluZSBiaW5tb2RlIHNldHNlcnZlbnQgZW9mIG9yZCBiaW5kIGFsYXJtIHBpcGUgYXRhbjIgZ2V0Z3JlbnQgZXhwIHRpbWUgcHVzaCBzZXRncmVudCBndCBsdCBvciBuZSBtfDAgYnJlYWsgZ2l2ZW4gc2F5IHN0YXRlIHdoZW4iLHI9e2NOOiJzdWJzdCIsYjoiWyRAXVxceyIsZToiXFx9IixrOnR9LGE9e2I6Ii0+eyIsZToifSJ9LG49e2NOOiJ2YXJpYWJsZSIsdjpbe2I6L1wkXGQvfSx7YjovW1wkJUBdKFxeXHdcYnwjXHcrKDo6XHcrKSp8e1x3K318XHcrKDo6XHcqKSopL30se2I6L1tcJCVAXVteXHNcd3tdLyxyOjB9XX0saT1bZS5CRSxyLG5dLHM9W24sZS5IQ00sZS5DKCJeXFw9XFx3IiwiXFw9Y3V0Iix7ZVc6ITB9KSxhLHtjTjoic3RyaW5nIixjOmksdjpbe2I6InFbcXd4cl0/XFxzKlxcKCIsZToiXFwpIixyOjV9LHtiOiJxW3F3eHJdP1xccypcXFsiLGU6IlxcXSIscjo1fSx7YjoicVtxd3hyXT9cXHMqXFx7IixlOiJcXH0iLHI6NX0se2I6InFbcXd4cl0/XFxzKlxcfCIsZToiXFx8IixyOjV9LHtiOiJxW3F3eHJdP1xccypcXDwiLGU6IlxcPiIscjo1fSx7YjoicXdcXHMrcSIsZToicSIscjo1fSx7YjoiJyIsZToiJyIsYzpbZS5CRV19LHtiOiciJyxlOiciJ30se2I6ImAiLGU6ImAiLGM6W2UuQkVdfSx7Yjoie1xcdyt9IixjOltdLHI6MH0se2I6Ii0/XFx3K1xccypcXD1cXD4iLGM6W10scjowfV19LHtjTjoibnVtYmVyIixiOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIixyOjB9LHtiOiIoXFwvXFwvfCIrZS5SU1IrInxcXGIoc3BsaXR8cmV0dXJufHByaW50fHJldmVyc2V8Z3JlcClcXGIpXFxzKiIsazoic3BsaXQgcmV0dXJuIHByaW50IHJldmVyc2UgZ3JlcCIscjowLGM6W2UuSENNLHtjTjoicmVnZXhwIixiOiIoc3x0cnx5KS8oXFxcXC58W14vXSkqLyhcXFxcLnxbXi9dKSovW2Etel0qIixyOjEwfSx7Y046InJlZ2V4cCIsYjoiKG18cXIpPy8iLGU6Ii9bYS16XSoiLGM6W2UuQkVdLHI6MH1dfSx7Y046InN1YiIsYks6InN1YiIsZToiKFxccypcXCguKj9cXCkpP1s7e10iLHI6NX0se2NOOiJvcGVyYXRvciIsYjoiLVxcd1xcYiIscjowfSx7YjoiXl9fREFUQV9fJCIsZToiXl9fRU5EX18kIixzTDoibW9qb2xpY2lvdXMiLGM6W3tiOiJeQEAuKiIsZToiJCIsY046ImNvbW1lbnQifV19XTtyZXR1cm4gci5jPXMsYS5jPXMse2FsaWFzZXM6WyJwbCJdLGs6dCxjOnN9fSksZS5yZWdpc3Rlckxhbmd1YWdlKCJwaHAiLGZ1bmN0aW9uKGUpe3ZhciB0PXtjTjoidmFyaWFibGUiLGI6IlxcJCtbYS16QS1aX38tw79dW2EtekEtWjAtOV9/LcO/XSoifSxyPXtjTjoicHJlcHJvY2Vzc29yIixiOi88XD8ocGhwKT98XD8+L30sYT17Y046InN0cmluZyIsYzpbZS5CRSxyXSx2Olt7YjonYiInLGU6JyInfSx7YjoiYiciLGU6IicifSxlLmluaGVyaXQoZS5BU00se2k6bnVsbH0pLGUuaW5oZXJpdChlLlFTTSx7aTpudWxsfSldfSxuPXt2OltlLkJOTSxlLkNOTV19O3JldHVybnthbGlhc2VzOlsicGhwMyIsInBocDQiLCJwaHA1IiwicGhwNiJdLGNJOiEwLGs6ImFuZCBpbmNsdWRlX29uY2UgbGlzdCBhYnN0cmFjdCBnbG9iYWwgcHJpdmF0ZSBlY2hvIGludGVyZmFjZSBhcyBzdGF0aWMgZW5kc3dpdGNoIGFycmF5IG51bGwgaWYgZW5kd2hpbGUgb3IgY29uc3QgZm9yIGVuZGZvcmVhY2ggc2VsZiB2YXIgd2hpbGUgaXNzZXQgcHVibGljIHByb3RlY3RlZCBleGl0IGZvcmVhY2ggdGhyb3cgZWxzZWlmIGluY2x1ZGUgX19GSUxFX18gZW1wdHkgcmVxdWlyZV9vbmNlIGRvIHhvciByZXR1cm4gcGFyZW50IGNsb25lIHVzZSBfX0NMQVNTX18gX19MSU5FX18gZWxzZSBicmVhayBwcmludCBldmFsIG5ldyBjYXRjaCBfX01FVEhPRF9fIGNhc2UgZXhjZXB0aW9uIGRlZmF1bHQgZGllIHJlcXVpcmUgX19GVU5DVElPTl9fIGVuZGRlY2xhcmUgZmluYWwgdHJ5IHN3aXRjaCBjb250aW51ZSBlbmRmb3IgZW5kaWYgZGVjbGFyZSB1bnNldCB0cnVlIGZhbHNlIHRyYWl0IGdvdG8gaW5zdGFuY2VvZiBpbnN0ZWFkb2YgX19ESVJfXyBfX05BTUVTUEFDRV9fIHlpZWxkIGZpbmFsbHkiLGM6W2UuQ0xDTSxlLkhDTSxlLkMoIi9cXCoiLCJcXCovIix7Yzpbe2NOOiJkb2N0YWciLGI6IkBbQS1aYS16XSsifSxyXX0pLGUuQygiX19oYWx0X2NvbXBpbGVyLis/OyIsITEse2VXOiEwLGs6Il9faGFsdF9jb21waWxlciIsbDplLlVJUn0pLHtjTjoic3RyaW5nIixiOi88PDxbJyJdP1x3K1snIl0/JC8sZTovXlx3Kzs/JC8sYzpbZS5CRSx7Y046InN1YnN0Iix2Olt7YjovXCRcdysvfSx7YjovXHtcJC8sZTovXH0vfV19XX0scix0LHtiOi8oOjp8LT4pK1thLXpBLVpfXHg3Zi1ceGZmXVthLXpBLVowLTlfXHg3Zi1ceGZmXSovfSx7Y046ImZ1bmN0aW9uIixiSzoiZnVuY3Rpb24iLGU6L1s7e10vLGVFOiEwLGk6IlxcJHxcXFt8JSIsYzpbZS5VVE0se2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixjOlsic2VsZiIsdCxlLkNCQ00sYSxuXX1dfSx7Y046ImNsYXNzIixiSzoiY2xhc3MgaW50ZXJmYWNlIixlOiJ7IixlRTohMCxpOi9bOlwoXCQiXS8sYzpbe2JLOiJleHRlbmRzIGltcGxlbWVudHMifSxlLlVUTV19LHtiSzoibmFtZXNwYWNlIixlOiI7IixpOi9bXC4nXS8sYzpbZS5VVE1dfSx7Yks6InVzZSIsZToiOyIsYzpbZS5VVE1dfSx7YjoiPT4ifSxhLG5dfX0pLGUucmVnaXN0ZXJMYW5ndWFnZSgicHl0aG9uIixmdW5jdGlvbihlKXt2YXIgdD17Y046InByb21wdCIsYjovXig+Pj58XC5cLlwuKSAvfSxyPXtjTjoic3RyaW5nIixjOltlLkJFXSx2Olt7YjovKHV8Yik/cj8nJycvLGU6LycnJy8sYzpbdF0scjoxMH0se2I6Lyh1fGIpP3I/IiIiLyxlOi8iIiIvLGM6W3RdLHI6MTB9LHtiOi8odXxyfHVyKScvLGU6LycvLHI6MTB9LHtiOi8odXxyfHVyKSIvLGU6LyIvLHI6MTB9LHtiOi8oYnxiciknLyxlOi8nL30se2I6LyhifGJyKSIvLGU6LyIvfSxlLkFTTSxlLlFTTV19LGE9e2NOOiJudW1iZXIiLHI6MCx2Olt7YjplLkJOUisiW2xMakpdPyJ9LHtiOiJcXGIoMG9bMC03XSspW2xMakpdPyJ9LHtiOmUuQ05SKyJbbExqSl0/In1dfSxuPXtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6WyJzZWxmIix0LGEscl19O3JldHVybnthbGlhc2VzOlsicHkiLCJneXAiXSxrOntrZXl3b3JkOiJhbmQgZWxpZiBpcyBnbG9iYWwgYXMgaW4gaWYgZnJvbSByYWlzZSBmb3IgZXhjZXB0IGZpbmFsbHkgcHJpbnQgaW1wb3J0IHBhc3MgcmV0dXJuIGV4ZWMgZWxzZSBicmVhayBub3Qgd2l0aCBjbGFzcyBhc3NlcnQgeWllbGQgdHJ5IHdoaWxlIGNvbnRpbnVlIGRlbCBvciBkZWYgbGFtYmRhIGFzeW5jIGF3YWl0IG5vbmxvY2FsfDEwIE5vbmUgVHJ1ZSBGYWxzZSIsYnVpbHRfaW46IkVsbGlwc2lzIE5vdEltcGxlbWVudGVkIn0saTovKDxcL3wtPnxcPykvLGM6W3QsYSxyLGUuSENNLHt2Olt7Y046ImZ1bmN0aW9uIixiSzoiZGVmIixyOjEwfSx7Y046ImNsYXNzIixiSzoiY2xhc3MifV0sZTovOi8saTovWyR7PTtcbixdLyxjOltlLlVUTSxuXX0se2NOOiJkZWNvcmF0b3IiLGI6L15bXHQgXSpALyxlOi8kL30se2I6L1xiKHByaW50fGV4ZWMpXCgvfV19fSksZS5yZWdpc3Rlckxhbmd1YWdlKCJydWJ5IixmdW5jdGlvbihlKXt2YXIgdD0iW2EtekEtWl9dXFx3KlshPz1dP3xbLSt+XVxcQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFwqXFwqfFstLyslXiYqfmB8XXxcXFtcXF09PyIscj0iYW5kIGZhbHNlIHRoZW4gZGVmaW5lZCBtb2R1bGUgaW4gcmV0dXJuIHJlZG8gaWYgQkVHSU4gcmV0cnkgZW5kIGZvciB0cnVlIHNlbGYgd2hlbiBuZXh0IHVudGlsIGRvIGJlZ2luIHVubGVzcyBFTkQgcmVzY3VlIG5pbCBlbHNlIGJyZWFrIHVuZGVmIG5vdCBzdXBlciBjbGFzcyBjYXNlIHJlcXVpcmUgeWllbGQgYWxpYXMgd2hpbGUgZW5zdXJlIGVsc2lmIG9yIGluY2x1ZGUgYXR0cl9yZWFkZXIgYXR0cl93cml0ZXIgYXR0cl9hY2Nlc3NvciIsYT17Y046ImRvY3RhZyIsYjoiQFtBLVphLXpdKyJ9LG49e2NOOiJ2YWx1ZSIsYjoiIzwiLGU6Ij4ifSxpPVtlLkMoIiMiLCIkIix7YzpbYV19KSxlLkMoIl5cXD1iZWdpbiIsIl5cXD1lbmQiLHtjOlthXSxyOjEwfSksZS5DKCJeX19FTkRfXyIsIlxcbiQiKV0scz17Y046InN1YnN0IixiOiIjXFx7IixlOiJ9IixrOnJ9LGM9e2NOOiJzdHJpbmciLGM6W2UuQkUsc10sdjpbe2I6LycvLGU6LycvfSx7YjovIi8sZTovIi99LHtiOi9gLyxlOi9gL30se2I6IiVbcVF3V3hdP1xcKCIsZToiXFwpIn0se2I6IiVbcVF3V3hdP1xcWyIsZToiXFxdIn0se2I6IiVbcVF3V3hdP3siLGU6In0ifSx7YjoiJVtxUXdXeF0/PCIsZToiPiJ9LHtiOiIlW3FRd1d4XT8vIixlOiIvIn0se2I6IiVbcVF3V3hdPyUiLGU6IiUifSx7YjoiJVtxUXdXeF0/LSIsZToiLSJ9LHtiOiIlW3FRd1d4XT9cXHwiLGU6IlxcfCJ9LHtiOi9cQlw/KFxcXGR7MSwzfXxcXHhbQS1GYS1mMC05XXsxLDJ9fFxcdVtBLUZhLWYwLTldezR9fFxcP1xTKVxiL31dfSxvPXtjTjoicGFyYW1zIixiOiJcXCgiLGU6IlxcKSIsazpyfSxsPVtjLG4se2NOOiJjbGFzcyIsYks6ImNsYXNzIG1vZHVsZSIsZToiJHw7IixpOi89LyxjOltlLmluaGVyaXQoZS5UTSx7YjoiW0EtWmEtel9dXFx3Kig6OlxcdyspKihcXD98XFwhKT8ifSkse2NOOiJpbmhlcml0YW5jZSIsYjoiPFxccyoiLGM6W3tjTjoicGFyZW50IixiOiIoIitlLklSKyI6Oik/IitlLklSfV19XS5jb25jYXQoaSl9LHtjTjoiZnVuY3Rpb24iLGJLOiJkZWYiLGU6IiR8OyIsYzpbZS5pbmhlcml0KGUuVE0se2I6dH0pLG9dLmNvbmNhdChpKX0se2NOOiJjb25zdGFudCIsYjoiKDo6KT8oXFxiW0EtWl1cXHcqKDo6KT8pKyIscjowfSx7Y046InN5bWJvbCIsYjplLlVJUisiKFxcIXxcXD8pPzoiLHI6MH0se2NOOiJzeW1ib2wiLGI6IjoiLGM6W2Mse2I6dH1dLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2NOOiJ2YXJpYWJsZSIsYjoiKFxcJFxcVyl8KChcXCR8XFxAXFxAPykoXFx3KykpIn0se2I6IigiK2UuUlNSKyIpXFxzKiIsYzpbbix7Y046InJlZ2V4cCIsYzpbZS5CRSxzXSxpOi9cbi8sdjpbe2I6Ii8iLGU6Ii9bYS16XSoifSx7YjoiJXJ7IixlOiJ9W2Etel0qIn0se2I6IiVyXFwoIixlOiJcXClbYS16XSoifSx7YjoiJXIhIixlOiIhW2Etel0qIn0se2I6IiVyXFxbIixlOiJcXF1bYS16XSoifV19XS5jb25jYXQoaSkscjowfV0uY29uY2F0KGkpO3MuYz1sLG8uYz1sO3ZhciB1PSJbPj9dPiIsZD0iW1xcdyNdK1xcKFxcdytcXCk6XFxkKzpcXGQrPiIsYj0iKFxcdystKT9cXGQrXFwuXFxkK1xcLlxcZChwXFxkKyk/W14+XSs+IixwPVt7YjovXlxzKj0+LyxjTjoic3RhdHVzIixzdGFydHM6e2U6IiQiLGM6bH19LHtjTjoicHJvbXB0IixiOiJeKCIrdSsifCIrZCsifCIrYisiKSIsc3RhcnRzOntlOiIkIixjOmx9fV07cmV0dXJue2FsaWFzZXM6WyJyYiIsImdlbXNwZWMiLCJwb2RzcGVjIiwidGhvciIsImlyYiJdLGs6cixpOi9cL1wqLyxjOmkuY29uY2F0KHApLmNvbmNhdChsKX19KSxlLnJlZ2lzdGVyTGFuZ3VhZ2UoInNxbCIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5DKCItLSIsIiQiKTtyZXR1cm57Y0k6ITAsaTovWzw+e30qXS8sYzpbe2NOOiJvcGVyYXRvciIsYks6ImJlZ2luIGVuZCBzdGFydCBjb21taXQgcm9sbGJhY2sgc2F2ZXBvaW50IGxvY2sgYWx0ZXIgY3JlYXRlIGRyb3AgcmVuYW1lIGNhbGwgZGVsZXRlIGRvIGhhbmRsZXIgaW5zZXJ0IGxvYWQgcmVwbGFjZSBzZWxlY3QgdHJ1bmNhdGUgdXBkYXRlIHNldCBzaG93IHByYWdtYSBncmFudCBtZXJnZSBkZXNjcmliZSB1c2UgZXhwbGFpbiBoZWxwIGRlY2xhcmUgcHJlcGFyZSBleGVjdXRlIGRlYWxsb2NhdGUgcmVsZWFzZSB1bmxvY2sgcHVyZ2UgcmVzZXQgY2hhbmdlIHN0b3AgYW5hbHl6ZSBjYWNoZSBmbHVzaCBvcHRpbWl6ZSByZXBhaXIga2lsbCBpbnN0YWxsIHVuaW5zdGFsbCBjaGVja3N1bSByZXN0b3JlIGNoZWNrIGJhY2t1cCByZXZva2UiLGU6LzsvLGVXOiEwLGs6e2tleXdvcmQ6ImFib3J0IGFicyBhYnNvbHV0ZSBhY2MgYWNjZSBhY2NlcCBhY2NlcHQgYWNjZXNzIGFjY2Vzc2VkIGFjY2Vzc2libGUgYWNjb3VudCBhY29zIGFjdGlvbiBhY3RpdmF0ZSBhZGQgYWRkdGltZSBhZG1pbiBhZG1pbmlzdGVyIGFkdmFuY2VkIGFkdmlzZSBhZXNfZGVjcnlwdCBhZXNfZW5jcnlwdCBhZnRlciBhZ2VudCBhZ2dyZWdhdGUgYWxpIGFsaWEgYWxpYXMgYWxsb2NhdGUgYWxsb3cgYWx0ZXIgYWx3YXlzIGFuYWx5emUgYW5jaWxsYXJ5IGFuZCBhbnkgYW55ZGF0YSBhbnlkYXRhc2V0IGFueXNjaGVtYSBhbnl0eXBlIGFwcGx5IGFyY2hpdmUgYXJjaGl2ZWQgYXJjaGl2ZWxvZyBhcmUgYXMgYXNjIGFzY2lpIGFzaW4gYXNzZW1ibHkgYXNzZXJ0aW9uIGFzc29jaWF0ZSBhc3luY2hyb25vdXMgYXQgYXRhbiBhdG4yIGF0dHIgYXR0cmkgYXR0cmliIGF0dHJpYnUgYXR0cmlidXQgYXR0cmlidXRlIGF0dHJpYnV0ZXMgYXVkaXQgYXV0aGVudGljYXRlZCBhdXRoZW50aWNhdGlvbiBhdXRoaWQgYXV0aG9ycyBhdXRvIGF1dG9hbGxvY2F0ZSBhdXRvZGJsaW5rIGF1dG9leHRlbmQgYXV0b21hdGljIGF2YWlsYWJpbGl0eSBhdmcgYmFja3VwIGJhZGZpbGUgYmFzaWNmaWxlIGJlZm9yZSBiZWdpbiBiZWdpbm5pbmcgYmVuY2htYXJrIGJldHdlZW4gYmZpbGUgYmZpbGVfYmFzZSBiaWcgYmlnZmlsZSBiaW4gYmluYXJ5X2RvdWJsZSBiaW5hcnlfZmxvYXQgYmlubG9nIGJpdF9hbmQgYml0X2NvdW50IGJpdF9sZW5ndGggYml0X29yIGJpdF94b3IgYml0bWFwIGJsb2JfYmFzZSBibG9jayBibG9ja3NpemUgYm9keSBib3RoIGJvdW5kIGJ1ZmZlcl9jYWNoZSBidWZmZXJfcG9vbCBidWlsZCBidWxrIGJ5IGJ5dGUgYnl0ZW9yZGVybWFyayBieXRlcyBjIGNhY2hlIGNhY2hpbmcgY2FsbCBjYWxsaW5nIGNhbmNlbCBjYXBhY2l0eSBjYXNjYWRlIGNhc2NhZGVkIGNhc2UgY2FzdCBjYXRhbG9nIGNhdGVnb3J5IGNlaWwgY2VpbGluZyBjaGFpbiBjaGFuZ2UgY2hhbmdlZCBjaGFyX2Jhc2UgY2hhcl9sZW5ndGggY2hhcmFjdGVyX2xlbmd0aCBjaGFyYWN0ZXJzIGNoYXJhY3RlcnNldCBjaGFyaW5kZXggY2hhcnNldCBjaGFyc2V0Zm9ybSBjaGFyc2V0aWQgY2hlY2sgY2hlY2tzdW0gY2hlY2tzdW1fYWdnIGNoaWxkIGNob29zZSBjaHIgY2h1bmsgY2xhc3MgY2xlYW51cCBjbGVhciBjbGllbnQgY2xvYiBjbG9iX2Jhc2UgY2xvbmUgY2xvc2UgY2x1c3Rlcl9pZCBjbHVzdGVyX3Byb2JhYmlsaXR5IGNsdXN0ZXJfc2V0IGNsdXN0ZXJpbmcgY29hbGVzY2UgY29lcmNpYmlsaXR5IGNvbCBjb2xsYXRlIGNvbGxhdGlvbiBjb2xsZWN0IGNvbHUgY29sdW0gY29sdW1uIGNvbHVtbl92YWx1ZSBjb2x1bW5zIGNvbHVtbnNfdXBkYXRlZCBjb21tZW50IGNvbW1pdCBjb21wYWN0IGNvbXBhdGliaWxpdHkgY29tcGlsZWQgY29tcGxldGUgY29tcG9zaXRlX2xpbWl0IGNvbXBvdW5kIGNvbXByZXNzIGNvbXB1dGUgY29uY2F0IGNvbmNhdF93cyBjb25jdXJyZW50IGNvbmZpcm0gY29ubiBjb25uZWMgY29ubmVjdCBjb25uZWN0X2J5X2lzY3ljbGUgY29ubmVjdF9ieV9pc2xlYWYgY29ubmVjdF9ieV9yb290IGNvbm5lY3RfdGltZSBjb25uZWN0aW9uIGNvbnNpZGVyIGNvbnNpc3RlbnQgY29uc3RhbnQgY29uc3RyYWludCBjb25zdHJhaW50cyBjb25zdHJ1Y3RvciBjb250YWluZXIgY29udGVudCBjb250ZW50cyBjb250ZXh0IGNvbnRyaWJ1dG9ycyBjb250cm9sZmlsZSBjb252IGNvbnZlcnQgY29udmVydF90eiBjb3JyIGNvcnJfayBjb3JyX3MgY29ycmVzcG9uZGluZyBjb3JydXB0aW9uIGNvcyBjb3N0IGNvdW50IGNvdW50X2JpZyBjb3VudGVkIGNvdmFyX3BvcCBjb3Zhcl9zYW1wIGNwdV9wZXJfY2FsbCBjcHVfcGVyX3Nlc3Npb24gY3JjMzIgY3JlYXRlIGNyZWF0aW9uIGNyaXRpY2FsIGNyb3NzIGN1YmUgY3VtZV9kaXN0IGN1cmRhdGUgY3VycmVudCBjdXJyZW50X2RhdGUgY3VycmVudF90aW1lIGN1cnJlbnRfdGltZXN0YW1wIGN1cnJlbnRfdXNlciBjdXJzb3IgY3VydGltZSBjdXN0b21kYXR1bSBjeWNsZSBkIGRhdGEgZGF0YWJhc2UgZGF0YWJhc2VzIGRhdGFmaWxlIGRhdGFmaWxlcyBkYXRhbGVuZ3RoIGRhdGVfYWRkIGRhdGVfY2FjaGUgZGF0ZV9mb3JtYXQgZGF0ZV9zdWIgZGF0ZWFkZCBkYXRlZGlmZiBkYXRlZnJvbXBhcnRzIGRhdGVuYW1lIGRhdGVwYXJ0IGRhdGV0aW1lMmZyb21wYXJ0cyBkYXkgZGF5X3RvX3NlY29uZCBkYXluYW1lIGRheW9mbW9udGggZGF5b2Z3ZWVrIGRheW9meWVhciBkYXlzIGRiX3JvbGVfY2hhbmdlIGRidGltZXpvbmUgZGRsIGRlYWxsb2NhdGUgZGVjbGFyZSBkZWNvZGUgZGVjb21wb3NlIGRlY3JlbWVudCBkZWNyeXB0IGRlZHVwbGljYXRlIGRlZiBkZWZhIGRlZmF1IGRlZmF1bCBkZWZhdWx0IGRlZmF1bHRzIGRlZmVycmVkIGRlZmkgZGVmaW4gZGVmaW5lIGRlZ3JlZXMgZGVsYXllZCBkZWxlZ2F0ZSBkZWxldGUgZGVsZXRlX2FsbCBkZWxpbWl0ZWQgZGVtYW5kIGRlbnNlX3JhbmsgZGVwdGggZGVxdWV1ZSBkZXNfZGVjcnlwdCBkZXNfZW5jcnlwdCBkZXNfa2V5X2ZpbGUgZGVzYyBkZXNjciBkZXNjcmkgZGVzY3JpYiBkZXNjcmliZSBkZXNjcmlwdG9yIGRldGVybWluaXN0aWMgZGlhZ25vc3RpY3MgZGlmZmVyZW5jZSBkaW1lbnNpb24gZGlyZWN0X2xvYWQgZGlyZWN0b3J5IGRpc2FibGUgZGlzYWJsZV9hbGwgZGlzYWxsb3cgZGlzYXNzb2NpYXRlIGRpc2NhcmRmaWxlIGRpc2Nvbm5lY3QgZGlza2dyb3VwIGRpc3RpbmN0IGRpc3RpbmN0cm93IGRpc3RyaWJ1dGUgZGlzdHJpYnV0ZWQgZGl2IGRvIGRvY3VtZW50IGRvbWFpbiBkb3RuZXQgZG91YmxlIGRvd25ncmFkZSBkcm9wIGR1bXBmaWxlIGR1cGxpY2F0ZSBkdXJhdGlvbiBlIGVhY2ggZWRpdGlvbiBlZGl0aW9uYWJsZSBlZGl0aW9ucyBlbGVtZW50IGVsbGlwc2lzIGVsc2UgZWxzaWYgZWx0IGVtcHR5IGVuYWJsZSBlbmFibGVfYWxsIGVuY2xvc2VkIGVuY29kZSBlbmNvZGluZyBlbmNyeXB0IGVuZCBlbmQtZXhlYyBlbmRpYW4gZW5mb3JjZWQgZW5naW5lIGVuZ2luZXMgZW5xdWV1ZSBlbnRlcnByaXNlIGVudGl0eWVzY2FwaW5nIGVvbW9udGggZXJyb3IgZXJyb3JzIGVzY2FwZWQgZXZhbG5hbWUgZXZhbHVhdGUgZXZlbnQgZXZlbnRkYXRhIGV2ZW50cyBleGNlcHQgZXhjZXB0aW9uIGV4Y2VwdGlvbnMgZXhjaGFuZ2UgZXhjbHVkZSBleGNsdWRpbmcgZXhlY3UgZXhlY3V0IGV4ZWN1dGUgZXhlbXB0IGV4aXN0cyBleGl0IGV4cCBleHBpcmUgZXhwbGFpbiBleHBvcnQgZXhwb3J0X3NldCBleHRlbmRlZCBleHRlbnQgZXh0ZXJuYWwgZXh0ZXJuYWxfMSBleHRlcm5hbF8yIGV4dGVybmFsbHkgZXh0cmFjdCBmIGZhaWxlZCBmYWlsZWRfbG9naW5fYXR0ZW1wdHMgZmFpbG92ZXIgZmFpbHVyZSBmYXIgZmFzdCBmZWF0dXJlX3NldCBmZWF0dXJlX3ZhbHVlIGZldGNoIGZpZWxkIGZpZWxkcyBmaWxlIGZpbGVfbmFtZV9jb252ZXJ0IGZpbGVzeXN0ZW1fbGlrZV9sb2dnaW5nIGZpbmFsIGZpbmlzaCBmaXJzdCBmaXJzdF92YWx1ZSBmaXhlZCBmbGFzaF9jYWNoZSBmbGFzaGJhY2sgZmxvb3IgZmx1c2ggZm9sbG93aW5nIGZvbGxvd3MgZm9yIGZvcmFsbCBmb3JjZSBmb3JtIGZvcm1hIGZvcm1hdCBmb3VuZCBmb3VuZF9yb3dzIGZyZWVsaXN0IGZyZWVsaXN0cyBmcmVlcG9vbHMgZnJlc2ggZnJvbSBmcm9tX2Jhc2U2NCBmcm9tX2RheXMgZnRwIGZ1bGwgZnVuY3Rpb24gZyBnZW5lcmFsIGdlbmVyYXRlZCBnZXQgZ2V0X2Zvcm1hdCBnZXRfbG9jayBnZXRkYXRlIGdldHV0Y2RhdGUgZ2xvYmFsIGdsb2JhbF9uYW1lIGdsb2JhbGx5IGdvIGdvdG8gZ3JhbnQgZ3JhbnRzIGdyZWF0ZXN0IGdyb3VwIGdyb3VwX2NvbmNhdCBncm91cF9pZCBncm91cGluZyBncm91cGluZ19pZCBncm91cHMgZ3RpZF9zdWJ0cmFjdCBndWFyYW50ZWUgZ3VhcmQgaGFuZGxlciBoYXNoIGhhc2hrZXlzIGhhdmluZyBoZWEgaGVhZCBoZWFkaSBoZWFkaW4gaGVhZGluZyBoZWFwIGhlbHAgaGV4IGhpZXJhcmNoeSBoaWdoIGhpZ2hfcHJpb3JpdHkgaG9zdHMgaG91ciBodHRwIGkgaWQgaWRlbnRfY3VycmVudCBpZGVudF9pbmNyIGlkZW50X3NlZWQgaWRlbnRpZmllZCBpZGVudGl0eSBpZGxlX3RpbWUgaWYgaWZudWxsIGlnbm9yZSBpaWYgaWxpa2UgaWxtIGltbWVkaWF0ZSBpbXBvcnQgaW4gaW5jbHVkZSBpbmNsdWRpbmcgaW5jcmVtZW50IGluZGV4IGluZGV4ZXMgaW5kZXhpbmcgaW5kZXh0eXBlIGluZGljYXRvciBpbmRpY2VzIGluZXQ2X2F0b24gaW5ldDZfbnRvYSBpbmV0X2F0b24gaW5ldF9udG9hIGluZmlsZSBpbml0aWFsIGluaXRpYWxpemVkIGluaXRpYWxseSBpbml0cmFucyBpbm1lbW9yeSBpbm5lciBpbm5vZGIgaW5wdXQgaW5zZXJ0IGluc3RhbGwgaW5zdGFuY2UgaW5zdGFudGlhYmxlIGluc3RyIGludGVyZmFjZSBpbnRlcmxlYXZlZCBpbnRlcnNlY3QgaW50byBpbnZhbGlkYXRlIGludmlzaWJsZSBpcyBpc19mcmVlX2xvY2sgaXNfaXB2NCBpc19pcHY0X2NvbXBhdCBpc19ub3QgaXNfbm90X251bGwgaXNfdXNlZF9sb2NrIGlzZGF0ZSBpc251bGwgaXNvbGF0aW9uIGl0ZXJhdGUgamF2YSBqb2luIGpzb24ganNvbl9leGlzdHMgayBrZWVwIGtlZXBfZHVwbGljYXRlcyBrZXkga2V5cyBraWxsIGwgbGFuZ3VhZ2UgbGFyZ2UgbGFzdCBsYXN0X2RheSBsYXN0X2luc2VydF9pZCBsYXN0X3ZhbHVlIGxheCBsY2FzZSBsZWFkIGxlYWRpbmcgbGVhc3QgbGVhdmVzIGxlZnQgbGVuIGxlbmdodCBsZW5ndGggbGVzcyBsZXZlbCBsZXZlbHMgbGlicmFyeSBsaWtlIGxpa2UyIGxpa2U0IGxpa2VjIGxpbWl0IGxpbmVzIGxpbmsgbGlzdCBsaXN0YWdnIGxpdHRsZSBsbiBsb2FkIGxvYWRfZmlsZSBsb2IgbG9icyBsb2NhbCBsb2NhbHRpbWUgbG9jYWx0aW1lc3RhbXAgbG9jYXRlIGxvY2F0b3IgbG9jayBsb2NrZWQgbG9nIGxvZzEwIGxvZzIgbG9nZmlsZSBsb2dmaWxlcyBsb2dnaW5nIGxvZ2ljYWwgbG9naWNhbF9yZWFkc19wZXJfY2FsbCBsb2dvZmYgbG9nb24gbG9ncyBsb25nIGxvb3AgbG93IGxvd19wcmlvcml0eSBsb3dlciBscGFkIGxydHJpbSBsdHJpbSBtIG1haW4gbWFrZV9zZXQgbWFrZWRhdGUgbWFrZXRpbWUgbWFuYWdlZCBtYW5hZ2VtZW50IG1hbnVhbCBtYXAgbWFwcGluZyBtYXNrIG1hc3RlciBtYXN0ZXJfcG9zX3dhaXQgbWF0Y2ggbWF0Y2hlZCBtYXRlcmlhbGl6ZWQgbWF4IG1heGV4dGVudHMgbWF4aW1pemUgbWF4aW5zdGFuY2VzIG1heGxlbiBtYXhsb2dmaWxlcyBtYXhsb2doaXN0b3J5IG1heGxvZ21lbWJlcnMgbWF4c2l6ZSBtYXh0cmFucyBtZDUgbWVhc3VyZXMgbWVkaWFuIG1lZGl1bSBtZW1iZXIgbWVtY29tcHJlc3MgbWVtb3J5IG1lcmdlIG1pY3Jvc2Vjb25kIG1pZCBtaWdyYXRpb24gbWluIG1pbmV4dGVudHMgbWluaW11bSBtaW5pbmcgbWludXMgbWludXRlIG1pbnZhbHVlIG1pc3NpbmcgbW9kIG1vZGUgbW9kZWwgbW9kaWZpY2F0aW9uIG1vZGlmeSBtb2R1bGUgbW9uaXRvcmluZyBtb250aCBtb250aHMgbW91bnQgbW92ZSBtb3ZlbWVudCBtdWx0aXNldCBtdXRleCBuIG5hbWUgbmFtZV9jb25zdCBuYW1lcyBuYW4gbmF0aW9uYWwgbmF0aXZlIG5hdHVyYWwgbmF2IG5jaGFyIG5jbG9iIG5lc3RlZCBuZXZlciBuZXcgbmV3bGluZSBuZXh0IG5leHR2YWwgbm8gbm9fd3JpdGVfdG9fYmlubG9nIG5vYXJjaGl2ZWxvZyBub2F1ZGl0IG5vYmFkZmlsZSBub2NoZWNrIG5vY29tcHJlc3Mgbm9jb3B5IG5vY3ljbGUgbm9kZWxheSBub2Rpc2NhcmRmaWxlIG5vZW50aXR5ZXNjYXBpbmcgbm9ndWFyYW50ZWUgbm9rZWVwIG5vbG9nZmlsZSBub21hcHBpbmcgbm9tYXh2YWx1ZSBub21pbmltaXplIG5vbWludmFsdWUgbm9tb25pdG9yaW5nIG5vbmUgbm9uZWRpdGlvbmFibGUgbm9uc2NoZW1hIG5vb3JkZXIgbm9wciBub3BybyBub3Byb20gbm9wcm9tcCBub3Byb21wdCBub3JlbHkgbm9yZXNldGxvZ3Mgbm9yZXZlcnNlIG5vcm1hbCBub3Jvd2RlcGVuZGVuY2llcyBub3NjaGVtYWNoZWNrIG5vc3dpdGNoIG5vdCBub3RoaW5nIG5vdGljZSBub3RyaW0gbm92YWxpZGF0ZSBub3cgbm93YWl0IG50aF92YWx1ZSBudWxsaWYgbnVsbHMgbnVtIG51bWIgbnVtYmUgbnZhcmNoYXIgbnZhcmNoYXIyIG9iamVjdCBvY2ljb2xsIG9jaWRhdGUgb2NpZGF0ZXRpbWUgb2NpZHVyYXRpb24gb2NpaW50ZXJ2YWwgb2NpbG9ibG9jYXRvciBvY2ludW1iZXIgb2NpcmVmIG9jaXJlZmN1cnNvciBvY2lyb3dpZCBvY2lzdHJpbmcgb2NpdHlwZSBvY3Qgb2N0ZXRfbGVuZ3RoIG9mIG9mZiBvZmZsaW5lIG9mZnNldCBvaWQgb2lkaW5kZXggb2xkIG9uIG9ubGluZSBvbmx5IG9wYXF1ZSBvcGVuIG9wZXJhdGlvbnMgb3BlcmF0b3Igb3B0aW1hbCBvcHRpbWl6ZSBvcHRpb24gb3B0aW9uYWxseSBvciBvcmFjbGUgb3JhY2xlX2RhdGUgb3JhZGF0YSBvcmQgb3JkYXVkaW8gb3JkZGljb20gb3JkZG9jIG9yZGVyIG9yZGltYWdlIG9yZGluYWxpdHkgb3JkdmlkZW8gb3JnYW5pemF0aW9uIG9ybGFueSBvcmx2YXJ5IG91dCBvdXRlciBvdXRmaWxlIG91dGxpbmUgb3V0cHV0IG92ZXIgb3ZlcmZsb3cgb3ZlcnJpZGluZyBwIHBhY2thZ2UgcGFkIHBhcmFsbGVsIHBhcmFsbGVsX2VuYWJsZSBwYXJhbWV0ZXJzIHBhcmVudCBwYXJzZSBwYXJ0aWFsIHBhcnRpdGlvbiBwYXJ0aXRpb25zIHBhc2NhbCBwYXNzaW5nIHBhc3N3b3JkIHBhc3N3b3JkX2dyYWNlX3RpbWUgcGFzc3dvcmRfbG9ja190aW1lIHBhc3N3b3JkX3JldXNlX21heCBwYXNzd29yZF9yZXVzZV90aW1lIHBhc3N3b3JkX3ZlcmlmeV9mdW5jdGlvbiBwYXRjaCBwYXRoIHBhdGluZGV4IHBjdGluY3JlYXNlIHBjdHRocmVzaG9sZCBwY3R1c2VkIHBjdHZlcnNpb24gcGVyY2VudCBwZXJjZW50X3JhbmsgcGVyY2VudGlsZV9jb250IHBlcmNlbnRpbGVfZGlzYyBwZXJmb3JtYW5jZSBwZXJpb2QgcGVyaW9kX2FkZCBwZXJpb2RfZGlmZiBwZXJtYW5lbnQgcGh5c2ljYWwgcGkgcGlwZSBwaXBlbGluZWQgcGl2b3QgcGx1Z2dhYmxlIHBsdWdpbiBwb2xpY3kgcG9zaXRpb24gcG9zdF90cmFuc2FjdGlvbiBwb3cgcG93ZXIgcHJhZ21hIHByZWJ1aWx0IHByZWNlZGVzIHByZWNlZGluZyBwcmVjaXNpb24gcHJlZGljdGlvbiBwcmVkaWN0aW9uX2Nvc3QgcHJlZGljdGlvbl9kZXRhaWxzIHByZWRpY3Rpb25fcHJvYmFiaWxpdHkgcHJlZGljdGlvbl9zZXQgcHJlcGFyZSBwcmVzZW50IHByZXNlcnZlIHByaW9yIHByaW9yaXR5IHByaXZhdGUgcHJpdmF0ZV9zZ2EgcHJpdmlsZWdlcyBwcm9jZWR1cmFsIHByb2NlZHVyZSBwcm9jZWR1cmVfYW5hbHl6ZSBwcm9jZXNzbGlzdCBwcm9maWxlcyBwcm9qZWN0IHByb21wdCBwcm90ZWN0aW9uIHB1YmxpYyBwdWJsaXNoaW5nc2VydmVybmFtZSBwdXJnZSBxdWFydGVyIHF1ZXJ5IHF1aWNrIHF1aWVzY2UgcXVvdGEgcXVvdGVuYW1lIHJhZGlhbnMgcmFpc2UgcmFuZCByYW5nZSByYW5rIHJhdyByZWFkIHJlYWRzIHJlYWRzaXplIHJlYnVpbGQgcmVjb3JkIHJlY29yZHMgcmVjb3ZlciByZWNvdmVyeSByZWN1cnNpdmUgcmVjeWNsZSByZWRvIHJlZHVjZWQgcmVmIHJlZmVyZW5jZSByZWZlcmVuY2VkIHJlZmVyZW5jZXMgcmVmZXJlbmNpbmcgcmVmcmVzaCByZWdleHBfbGlrZSByZWdpc3RlciByZWdyX2F2Z3ggcmVncl9hdmd5IHJlZ3JfY291bnQgcmVncl9pbnRlcmNlcHQgcmVncl9yMiByZWdyX3Nsb3BlIHJlZ3Jfc3h4IHJlZ3Jfc3h5IHJlamVjdCByZWtleSByZWxhdGlvbmFsIHJlbGF0aXZlIHJlbGF5bG9nIHJlbGVhc2UgcmVsZWFzZV9sb2NrIHJlbGllc19vbiByZWxvY2F0ZSByZWx5IHJlbSByZW1haW5kZXIgcmVuYW1lIHJlcGFpciByZXBlYXQgcmVwbGFjZSByZXBsaWNhdGUgcmVwbGljYXRpb24gcmVxdWlyZWQgcmVzZXQgcmVzZXRsb2dzIHJlc2l6ZSByZXNvdXJjZSByZXNwZWN0IHJlc3RvcmUgcmVzdHJpY3RlZCByZXN1bHQgcmVzdWx0X2NhY2hlIHJlc3VtYWJsZSByZXN1bWUgcmV0ZW50aW9uIHJldHVybiByZXR1cm5pbmcgcmV0dXJucyByZXVzZSByZXZlcnNlIHJldm9rZSByaWdodCBybGlrZSByb2xlIHJvbGVzIHJvbGxiYWNrIHJvbGxpbmcgcm9sbHVwIHJvdW5kIHJvdyByb3dfY291bnQgcm93ZGVwZW5kZW5jaWVzIHJvd2lkIHJvd251bSByb3dzIHJ0cmltIHJ1bGVzIHNhZmUgc2FsdCBzYW1wbGUgc2F2ZSBzYXZlcG9pbnQgc2IxIHNiMiBzYjQgc2NhbiBzY2hlbWEgc2NoZW1hY2hlY2sgc2NuIHNjb3BlIHNjcm9sbCBzZG9fZ2VvcmFzdGVyIHNkb190b3BvX2dlb21ldHJ5IHNlYXJjaCBzZWNfdG9fdGltZSBzZWNvbmQgc2VjdGlvbiBzZWN1cmVmaWxlIHNlY3VyaXR5IHNlZWQgc2VnbWVudCBzZWxlY3Qgc2VsZiBzZXF1ZW5jZSBzZXF1ZW50aWFsIHNlcmlhbGl6YWJsZSBzZXJ2ZXIgc2VydmVyZXJyb3Igc2Vzc2lvbiBzZXNzaW9uX3VzZXIgc2Vzc2lvbnNfcGVyX3VzZXIgc2V0IHNldHMgc2V0dGluZ3Mgc2hhIHNoYTEgc2hhMiBzaGFyZSBzaGFyZWQgc2hhcmVkX3Bvb2wgc2hvcnQgc2hvdyBzaHJpbmsgc2h1dGRvd24gc2lfYXZlcmFnZWNvbG9yIHNpX2NvbG9yaGlzdG9ncmFtIHNpX2ZlYXR1cmVsaXN0IHNpX3Bvc2l0aW9uYWxjb2xvciBzaV9zdGlsbGltYWdlIHNpX3RleHR1cmUgc2libGluZ3Mgc2lkIHNpZ24gc2luIHNpemUgc2l6ZV90IHNpemVzIHNraXAgc2xhdmUgc2xlZXAgc21hbGxkYXRldGltZWZyb21wYXJ0cyBzbWFsbGZpbGUgc25hcHNob3Qgc29tZSBzb25hbWUgc29ydCBzb3VuZGV4IHNvdXJjZSBzcGFjZSBzcGFyc2Ugc3BmaWxlIHNwbGl0IHNxbCBzcWxfYmlnX3Jlc3VsdCBzcWxfYnVmZmVyX3Jlc3VsdCBzcWxfY2FjaGUgc3FsX2NhbGNfZm91bmRfcm93cyBzcWxfc21hbGxfcmVzdWx0IHNxbF92YXJpYW50X3Byb3BlcnR5IHNxbGNvZGUgc3FsZGF0YSBzcWxlcnJvciBzcWxuYW1lIHNxbHN0YXRlIHNxcnQgc3F1YXJlIHN0YW5kYWxvbmUgc3RhbmRieSBzdGFydCBzdGFydGluZyBzdGFydHVwIHN0YXRlbWVudCBzdGF0aWMgc3RhdGlzdGljcyBzdGF0c19iaW5vbWlhbF90ZXN0IHN0YXRzX2Nyb3NzdGFiIHN0YXRzX2tzX3Rlc3Qgc3RhdHNfbW9kZSBzdGF0c19td190ZXN0IHN0YXRzX29uZV93YXlfYW5vdmEgc3RhdHNfdF90ZXN0XyBzdGF0c190X3Rlc3RfaW5kZXAgc3RhdHNfdF90ZXN0X29uZSBzdGF0c190X3Rlc3RfcGFpcmVkIHN0YXRzX3dzcl90ZXN0IHN0YXR1cyBzdGQgc3RkZGV2IHN0ZGRldl9wb3Agc3RkZGV2X3NhbXAgc3RkZXYgc3RvcCBzdG9yYWdlIHN0b3JlIHN0b3JlZCBzdHIgc3RyX3RvX2RhdGUgc3RyYWlnaHRfam9pbiBzdHJjbXAgc3RyaWN0IHN0cmluZyBzdHJ1Y3Qgc3R1ZmYgc3R5bGUgc3ViZGF0ZSBzdWJwYXJ0aXRpb24gc3VicGFydGl0aW9ucyBzdWJzdGl0dXRhYmxlIHN1YnN0ciBzdWJzdHJpbmcgc3VidGltZSBzdWJ0cmluZ19pbmRleCBzdWJ0eXBlIHN1Y2Nlc3Mgc3VtIHN1c3BlbmQgc3dpdGNoIHN3aXRjaG9mZnNldCBzd2l0Y2hvdmVyIHN5bmMgc3luY2hyb25vdXMgc3lub255bSBzeXMgc3lzX3htbGFnZyBzeXNhc20gc3lzYXV4IHN5c2RhdGUgc3lzZGF0ZXRpbWVvZmZzZXQgc3lzZGJhIHN5c29wZXIgc3lzdGVtIHN5c3RlbV91c2VyIHN5c3V0Y2RhdGV0aW1lIHQgdGFibGUgdGFibGVzIHRhYmxlc3BhY2UgdGFuIHRkbyB0ZW1wbGF0ZSB0ZW1wb3JhcnkgdGVybWluYXRlZCB0ZXJ0aWFyeV93ZWlnaHRzIHRlc3QgdGhhbiB0aGVuIHRocmVhZCB0aHJvdWdoIHRpZXIgdGllcyB0aW1lIHRpbWVfZm9ybWF0IHRpbWVfem9uZSB0aW1lZGlmZiB0aW1lZnJvbXBhcnRzIHRpbWVvdXQgdGltZXN0YW1wIHRpbWVzdGFtcGFkZCB0aW1lc3RhbXBkaWZmIHRpbWV6b25lX2FiYnIgdGltZXpvbmVfbWludXRlIHRpbWV6b25lX3JlZ2lvbiB0byB0b19iYXNlNjQgdG9fZGF0ZSB0b19kYXlzIHRvX3NlY29uZHMgdG9kYXRldGltZW9mZnNldCB0cmFjZSB0cmFja2luZyB0cmFuc2FjdGlvbiB0cmFuc2FjdGlvbmFsIHRyYW5zbGF0ZSB0cmFuc2xhdGlvbiB0cmVhdCB0cmlnZ2VyIHRyaWdnZXJfbmVzdGxldmVsIHRyaWdnZXJzIHRyaW0gdHJ1bmNhdGUgdHJ5X2Nhc3QgdHJ5X2NvbnZlcnQgdHJ5X3BhcnNlIHR5cGUgdWIxIHViMiB1YjQgdWNhc2UgdW5hcmNoaXZlZCB1bmJvdW5kZWQgdW5jb21wcmVzcyB1bmRlciB1bmRvIHVuaGV4IHVuaWNvZGUgdW5pZm9ybSB1bmluc3RhbGwgdW5pb24gdW5pcXVlIHVuaXhfdGltZXN0YW1wIHVua25vd24gdW5saW1pdGVkIHVubG9jayB1bnBpdm90IHVucmVjb3ZlcmFibGUgdW5zYWZlIHVuc2lnbmVkIHVudGlsIHVudHJ1c3RlZCB1bnVzYWJsZSB1bnVzZWQgdXBkYXRlIHVwZGF0ZWQgdXBncmFkZSB1cHBlZCB1cHBlciB1cHNlcnQgdXJsIHVyb3dpZCB1c2FibGUgdXNhZ2UgdXNlIHVzZV9zdG9yZWRfb3V0bGluZXMgdXNlciB1c2VyX2RhdGEgdXNlcl9yZXNvdXJjZXMgdXNlcnMgdXNpbmcgdXRjX2RhdGUgdXRjX3RpbWVzdGFtcCB1dWlkIHV1aWRfc2hvcnQgdmFsaWRhdGUgdmFsaWRhdGVfcGFzc3dvcmRfc3RyZW5ndGggdmFsaWRhdGlvbiB2YWxpc3QgdmFsdWUgdmFsdWVzIHZhciB2YXJfc2FtcCB2YXJjaGFyYyB2YXJpIHZhcmlhIHZhcmlhYiB2YXJpYWJsIHZhcmlhYmxlIHZhcmlhYmxlcyB2YXJpYW5jZSB2YXJwIHZhcnJhdyB2YXJyYXdjIHZhcnJheSB2ZXJpZnkgdmVyc2lvbiB2ZXJzaW9ucyB2aWV3IHZpcnR1YWwgdmlzaWJsZSB2b2lkIHdhaXQgd2FsbGV0IHdhcm5pbmcgd2FybmluZ3Mgd2VlayB3ZWVrZGF5IHdlZWtvZnllYXIgd2VsbGZvcm1lZCB3aGVuIHdoZW5lIHdoZW5ldiB3aGVuZXZlIHdoZW5ldmVyIHdoZXJlIHdoaWxlIHdoaXRlc3BhY2Ugd2l0aCB3aXRoaW4gd2l0aG91dCB3b3JrIHdyYXBwZWQgeGRiIHhtbCB4bWxhZ2cgeG1sYXR0cmlidXRlcyB4bWxjYXN0IHhtbGNvbGF0dHZhbCB4bWxlbGVtZW50IHhtbGV4aXN0cyB4bWxmb3Jlc3QgeG1saW5kZXggeG1sbmFtZXNwYWNlcyB4bWxwaSB4bWxxdWVyeSB4bWxyb290IHhtbHNjaGVtYSB4bWxzZXJpYWxpemUgeG1sdGFibGUgeG1sdHlwZSB4b3IgeWVhciB5ZWFyX3RvX21vbnRoIHllYXJzIHllYXJ3ZWVrIiwKbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIixidWlsdF9pbjoiYXJyYXkgYmlnaW50IGJpbmFyeSBiaXQgYmxvYiBib29sZWFuIGNoYXIgY2hhcmFjdGVyIGRhdGUgZGVjIGRlY2ltYWwgZmxvYXQgaW50IGludDggaW50ZWdlciBpbnRlcnZhbCBudW1iZXIgbnVtZXJpYyByZWFsIHJlY29yZCBzZXJpYWwgc2VyaWFsOCBzbWFsbGludCB0ZXh0IHZhcmNoYXIgdmFyeWluZyB2b2lkIn0sYzpbe2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2UuQkUse2I6IicnIn1dfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbZS5CRSx7YjonIiInfV19LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOltlLkJFXX0sZS5DTk0sZS5DQkNNLHRdfSxlLkNCQ00sdF19fSksZX0pOw==\"></script>\n",
"<script title=\"difflib\" src=\"data:application/javascript;base64,LyoqKgpUaGlzIGlzIHBhcnQgb2YganNkaWZmbGliIHYxLjAuIDxodHRwOi8vc25vd3RpZGUuY29tL2pzZGlmZmxpYj4KCkNvcHlyaWdodCAoYykgMjAwNywgU25vd3RpZGUgSW5mb3JtYXRpY3MgU3lzdGVtcywgSW5jLgpBbGwgcmlnaHRzIHJlc2VydmVkLgoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgoKCSogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCgkJbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCgkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKCQl0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCgkJYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCgkqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFNub3d0aWRlIEluZm9ybWF0aWNzIFN5c3RlbXMgbm9yIHRoZSBuYW1lcyBvZiBpdHMKCQljb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCgkJc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQpFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQKU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEClRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgpBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSApEQU1BR0UuCioqKi8KLyogQXV0aG9yOiBDaGFzIEVtZXJpY2sgPGNlbWVyaWNrQHNub3d0aWRlLmNvbT4gKi8KdmFyIF9fd2hpdGVzcGFjZSA9IHsiICI6dHJ1ZSwgIlx0Ijp0cnVlLCAiXG4iOnRydWUsICJcZiI6dHJ1ZSwgIlxyIjp0cnVlfTsKCnZhciBkaWZmbGliID0gewoJZGVmYXVsdEp1bmtGdW5jdGlvbjogZnVuY3Rpb24gKGMpIHsKCQlyZXR1cm4gX193aGl0ZXNwYWNlLmhhc093blByb3BlcnR5KGMpOwoJfSwKCQoJc3RyaXBMaW5lYnJlYWtzOiBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBzdHIucmVwbGFjZSgvXltcblxyXSp8W1xuXHJdKiQvZywgIiIpOyB9LAoJCglzdHJpbmdBc0xpbmVzOiBmdW5jdGlvbiAoc3RyKSB7CgkJdmFyIGxmcG9zID0gc3RyLmluZGV4T2YoIlxuIik7CgkJdmFyIGNycG9zID0gc3RyLmluZGV4T2YoIlxyIik7CgkJdmFyIGxpbmVicmVhayA9ICgobGZwb3MgPiAtMSAmJiBjcnBvcyA+IC0xKSB8fCBjcnBvcyA8IDApID8gIlxuIiA6ICJcciI7CgkJCgkJdmFyIGxpbmVzID0gc3RyLnNwbGl0KGxpbmVicmVhayk7CgkJZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykgewoJCQlsaW5lc1tpXSA9IGRpZmZsaWIuc3RyaXBMaW5lYnJlYWtzKGxpbmVzW2ldKTsKCQl9CgkJCgkJcmV0dXJuIGxpbmVzOwoJfSwKCQoJLy8gaXRlcmF0aW9uLWJhc2VkIHJlZHVjZSBpbXBsZW1lbnRhdGlvbgoJX19yZWR1Y2U6IGZ1bmN0aW9uIChmdW5jLCBsaXN0LCBpbml0aWFsKSB7CgkJaWYgKGluaXRpYWwgIT0gbnVsbCkgewoJCQl2YXIgdmFsdWUgPSBpbml0aWFsOwoJCQl2YXIgaWR4ID0gMDsKCQl9IGVsc2UgaWYgKGxpc3QpIHsKCQkJdmFyIHZhbHVlID0gbGlzdFswXTsKCQkJdmFyIGlkeCA9IDE7CgkJfSBlbHNlIHsKCQkJcmV0dXJuIG51bGw7CgkJfQoJCQoJCWZvciAoOyBpZHggPCBsaXN0Lmxlbmd0aDsgaWR4KyspIHsKCQkJdmFsdWUgPSBmdW5jKHZhbHVlLCBsaXN0W2lkeF0pOwoJCX0KCQkKCQlyZXR1cm4gdmFsdWU7Cgl9LAoJCgkvLyBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBzb3J0aW5nIGxpc3RzIG9mIG51bWVyaWMgdHVwbGVzCglfX250dXBsZWNvbXA6IGZ1bmN0aW9uIChhLCBiKSB7CgkJdmFyIG1sZW4gPSBNYXRoLm1heChhLmxlbmd0aCwgYi5sZW5ndGgpOwoJCWZvciAodmFyIGkgPSAwOyBpIDwgbWxlbjsgaSsrKSB7CgkJCWlmIChhW2ldIDwgYltpXSkgcmV0dXJuIC0xOwoJCQlpZiAoYVtpXSA+IGJbaV0pIHJldHVybiAxOwoJCX0KCQkKCQlyZXR1cm4gYS5sZW5ndGggPT0gYi5sZW5ndGggPyAwIDogKGEubGVuZ3RoIDwgYi5sZW5ndGggPyAtMSA6IDEpOwoJfSwKCQoJX19jYWxjdWxhdGVfcmF0aW86IGZ1bmN0aW9uIChtYXRjaGVzLCBsZW5ndGgpIHsKCQlyZXR1cm4gbGVuZ3RoID8gMi4wICogbWF0Y2hlcyAvIGxlbmd0aCA6IDEuMDsKCX0sCgkKCS8vIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiBhIGtleSBwYXNzZWQgdG8gdGhlIHJldHVybmVkIGZ1bmN0aW9uCgkvLyBpcyBpbiB0aGUgZGljdCAoanMgb2JqZWN0KSBwcm92aWRlZCB0byB0aGlzIGZ1bmN0aW9uOyByZXBsYWNlcyBiZWluZyBhYmxlIHRvCgkvLyBjYXJyeSBhcm91bmQgZGljdC5oYXNfa2V5IGluIHB5dGhvbi4uLgoJX19pc2luZGljdDogZnVuY3Rpb24gKGRpY3QpIHsKCQlyZXR1cm4gZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZGljdC5oYXNPd25Qcm9wZXJ0eShrZXkpOyB9OwoJfSwKCQoJLy8gcmVwbGFjZW1lbnQgZm9yIHB5dGhvbidzIGRpY3QuZ2V0IGZ1bmN0aW9uIC0tIG5lZWQgZWFzeSBkZWZhdWx0IHZhbHVlcwoJX19kaWN0Z2V0OiBmdW5jdGlvbiAoZGljdCwga2V5LCBkZWZhdWx0VmFsdWUpIHsKCQlyZXR1cm4gZGljdC5oYXNPd25Qcm9wZXJ0eShrZXkpID8gZGljdFtrZXldIDogZGVmYXVsdFZhbHVlOwoJfSwJCgkKCVNlcXVlbmNlTWF0Y2hlcjogZnVuY3Rpb24gKGEsIGIsIGlzanVuaykgewoJCXRoaXMuc2V0X3NlcXMgPSBmdW5jdGlvbiAoYSwgYikgewoJCQl0aGlzLnNldF9zZXExKGEpOwoJCQl0aGlzLnNldF9zZXEyKGIpOwoJCX0KCQkKCQl0aGlzLnNldF9zZXExID0gZnVuY3Rpb24gKGEpIHsKCQkJaWYgKGEgPT0gdGhpcy5hKSByZXR1cm47CgkJCXRoaXMuYSA9IGE7CgkJCXRoaXMubWF0Y2hpbmdfYmxvY2tzID0gdGhpcy5vcGNvZGVzID0gbnVsbDsKCQl9CgkJCgkJdGhpcy5zZXRfc2VxMiA9IGZ1bmN0aW9uIChiKSB7CgkJCWlmIChiID09IHRoaXMuYikgcmV0dXJuOwoJCQl0aGlzLmIgPSBiOwoJCQl0aGlzLm1hdGNoaW5nX2Jsb2NrcyA9IHRoaXMub3Bjb2RlcyA9IHRoaXMuZnVsbGJjb3VudCA9IG51bGw7CgkJCXRoaXMuX19jaGFpbl9iKCk7CgkJfQoJCQoJCXRoaXMuX19jaGFpbl9iID0gZnVuY3Rpb24gKCkgewoJCQl2YXIgYiA9IHRoaXMuYjsKCQkJdmFyIG4gPSBiLmxlbmd0aDsKCQkJdmFyIGIyaiA9IHRoaXMuYjJqID0ge307CgkJCXZhciBwb3B1bGFyZGljdCA9IHt9OwoJCQlmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHsKCQkJCXZhciBlbHQgPSBiW2ldOwoJCQkJaWYgKGIyai5oYXNPd25Qcm9wZXJ0eShlbHQpKSB7CgkJCQkJdmFyIGluZGljZXMgPSBiMmpbZWx0XTsKCQkJCQlpZiAobiA+PSAyMDAgJiYgaW5kaWNlcy5sZW5ndGggKiAxMDAgPiBuKSB7CgkJCQkJCXBvcHVsYXJkaWN0W2VsdF0gPSAxOwoJCQkJCQlkZWxldGUgYjJqW2VsdF07CgkJCQkJfSBlbHNlIHsKCQkJCQkJaW5kaWNlcy5wdXNoKGkpOwoJCQkJCX0KCQkJCX0gZWxzZSB7CgkJCQkJYjJqW2VsdF0gPSBbaV07CgkJCQl9CgkJCX0KCQoJCQlmb3IgKHZhciBlbHQgaW4gcG9wdWxhcmRpY3QpIHsKCQkJCWlmIChwb3B1bGFyZGljdC5oYXNPd25Qcm9wZXJ0eShlbHQpKSB7CgkJCQkJZGVsZXRlIGIyaltlbHRdOwoJCQkJfQoJCQl9CgkJCQoJCQl2YXIgaXNqdW5rID0gdGhpcy5pc2p1bms7CgkJCXZhciBqdW5rZGljdCA9IHt9OwoJCQlpZiAoaXNqdW5rKSB7CgkJCQlmb3IgKHZhciBlbHQgaW4gcG9wdWxhcmRpY3QpIHsKCQkJCQlpZiAocG9wdWxhcmRpY3QuaGFzT3duUHJvcGVydHkoZWx0KSAmJiBpc2p1bmsoZWx0KSkgewoJCQkJCQlqdW5rZGljdFtlbHRdID0gMTsKCQkJCQkJZGVsZXRlIHBvcHVsYXJkaWN0W2VsdF07CgkJCQkJfQoJCQkJfQoJCQkJZm9yICh2YXIgZWx0IGluIGIyaikgewoJCQkJCWlmIChiMmouaGFzT3duUHJvcGVydHkoZWx0KSAmJiBpc2p1bmsoZWx0KSkgewoJCQkJCQlqdW5rZGljdFtlbHRdID0gMTsKCQkJCQkJZGVsZXRlIGIyaltlbHRdOwoJCQkJCX0KCQkJCX0KCQkJfQoJCgkJCXRoaXMuaXNianVuayA9IGRpZmZsaWIuX19pc2luZGljdChqdW5rZGljdCk7CgkJCXRoaXMuaXNicG9wdWxhciA9IGRpZmZsaWIuX19pc2luZGljdChwb3B1bGFyZGljdCk7CgkJfQoJCQoJCXRoaXMuZmluZF9sb25nZXN0X21hdGNoID0gZnVuY3Rpb24gKGFsbywgYWhpLCBibG8sIGJoaSkgewoJCQl2YXIgYSA9IHRoaXMuYTsKCQkJdmFyIGIgPSB0aGlzLmI7CgkJCXZhciBiMmogPSB0aGlzLmIyajsKCQkJdmFyIGlzYmp1bmsgPSB0aGlzLmlzYmp1bms7CgkJCXZhciBiZXN0aSA9IGFsbzsKCQkJdmFyIGJlc3RqID0gYmxvOwoJCQl2YXIgYmVzdHNpemUgPSAwOwoJCQl2YXIgaiA9IG51bGw7CgkJCXZhciBrOwoJCgkJCXZhciBqMmxlbiA9IHt9OwoJCQl2YXIgbm90aGluZyA9IFtdOwoJCQlmb3IgKHZhciBpID0gYWxvOyBpIDwgYWhpOyBpKyspIHsKCQkJCXZhciBuZXdqMmxlbiA9IHt9OwoJCQkJdmFyIGpkaWN0ID0gZGlmZmxpYi5fX2RpY3RnZXQoYjJqLCBhW2ldLCBub3RoaW5nKTsKCQkJCWZvciAodmFyIGprZXkgaW4gamRpY3QpIHsKCQkJCQlpZiAoamRpY3QuaGFzT3duUHJvcGVydHkoamtleSkpIHsKCQkJCQkJaiA9IGpkaWN0W2prZXldOwoJCQkJCQlpZiAoaiA8IGJsbykgY29udGludWU7CgkJCQkJCWlmIChqID49IGJoaSkgYnJlYWs7CgkJCQkJCW5ld2oybGVuW2pdID0gayA9IGRpZmZsaWIuX19kaWN0Z2V0KGoybGVuLCBqIC0gMSwgMCkgKyAxOwoJCQkJCQlpZiAoayA+IGJlc3RzaXplKSB7CgkJCQkJCQliZXN0aSA9IGkgLSBrICsgMTsKCQkJCQkJCWJlc3RqID0gaiAtIGsgKyAxOwoJCQkJCQkJYmVzdHNpemUgPSBrOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJajJsZW4gPSBuZXdqMmxlbjsKCQkJfQoJCgkJCXdoaWxlIChiZXN0aSA+IGFsbyAmJiBiZXN0aiA+IGJsbyAmJiAhaXNianVuayhiW2Jlc3RqIC0gMV0pICYmIGFbYmVzdGkgLSAxXSA9PSBiW2Jlc3RqIC0gMV0pIHsKCQkJCWJlc3RpLS07CgkJCQliZXN0ai0tOwoJCQkJYmVzdHNpemUrKzsKCQkJfQoJCQkJCgkJCXdoaWxlIChiZXN0aSArIGJlc3RzaXplIDwgYWhpICYmIGJlc3RqICsgYmVzdHNpemUgPCBiaGkgJiYKCQkJCQkhaXNianVuayhiW2Jlc3RqICsgYmVzdHNpemVdKSAmJgoJCQkJCWFbYmVzdGkgKyBiZXN0c2l6ZV0gPT0gYltiZXN0aiArIGJlc3RzaXplXSkgewoJCQkJYmVzdHNpemUrKzsKCQkJfQoJCgkJCXdoaWxlIChiZXN0aSA+IGFsbyAmJiBiZXN0aiA+IGJsbyAmJiBpc2JqdW5rKGJbYmVzdGogLSAxXSkgJiYgYVtiZXN0aSAtIDFdID09IGJbYmVzdGogLSAxXSkgewoJCQkJYmVzdGktLTsKCQkJCWJlc3RqLS07CgkJCQliZXN0c2l6ZSsrOwoJCQl9CgkJCQoJCQl3aGlsZSAoYmVzdGkgKyBiZXN0c2l6ZSA8IGFoaSAmJiBiZXN0aiArIGJlc3RzaXplIDwgYmhpICYmIGlzYmp1bmsoYltiZXN0aiArIGJlc3RzaXplXSkgJiYKCQkJCQlhW2Jlc3RpICsgYmVzdHNpemVdID09IGJbYmVzdGogKyBiZXN0c2l6ZV0pIHsKCQkJCWJlc3RzaXplKys7CgkJCX0KCQoJCQlyZXR1cm4gW2Jlc3RpLCBiZXN0aiwgYmVzdHNpemVdOwoJCX0KCQkKCQl0aGlzLmdldF9tYXRjaGluZ19ibG9ja3MgPSBmdW5jdGlvbiAoKSB7CgkJCWlmICh0aGlzLm1hdGNoaW5nX2Jsb2NrcyAhPSBudWxsKSByZXR1cm4gdGhpcy5tYXRjaGluZ19ibG9ja3M7CgkJCXZhciBsYSA9IHRoaXMuYS5sZW5ndGg7CgkJCXZhciBsYiA9IHRoaXMuYi5sZW5ndGg7CgkKCQkJdmFyIHF1ZXVlID0gW1swLCBsYSwgMCwgbGJdXTsKCQkJdmFyIG1hdGNoaW5nX2Jsb2NrcyA9IFtdOwoJCQl2YXIgYWxvLCBhaGksIGJsbywgYmhpLCBxaSwgaSwgaiwgaywgeDsKCQkJd2hpbGUgKHF1ZXVlLmxlbmd0aCkgewoJCQkJcWkgPSBxdWV1ZS5wb3AoKTsKCQkJCWFsbyA9IHFpWzBdOwoJCQkJYWhpID0gcWlbMV07CgkJCQlibG8gPSBxaVsyXTsKCQkJCWJoaSA9IHFpWzNdOwoJCQkJeCA9IHRoaXMuZmluZF9sb25nZXN0X21hdGNoKGFsbywgYWhpLCBibG8sIGJoaSk7CgkJCQlpID0geFswXTsKCQkJCWogPSB4WzFdOwoJCQkJayA9IHhbMl07CgkKCQkJCWlmIChrKSB7CgkJCQkJbWF0Y2hpbmdfYmxvY2tzLnB1c2goeCk7CgkJCQkJaWYgKGFsbyA8IGkgJiYgYmxvIDwgaikKCQkJCQkJcXVldWUucHVzaChbYWxvLCBpLCBibG8sIGpdKTsKCQkJCQlpZiAoaStrIDwgYWhpICYmIGorayA8IGJoaSkKCQkJCQkJcXVldWUucHVzaChbaSArIGssIGFoaSwgaiArIGssIGJoaV0pOwoJCQkJfQoJCQl9CgkJCQoJCQltYXRjaGluZ19ibG9ja3Muc29ydChkaWZmbGliLl9fbnR1cGxlY29tcCk7CgkKCQkJdmFyIGkxID0gMCwgajEgPSAwLCBrMSA9IDAsIGJsb2NrID0gMDsKCQkJdmFyIGkyLCBqMiwgazI7CgkJCXZhciBub25fYWRqYWNlbnQgPSBbXTsKCQkJZm9yICh2YXIgaWR4IGluIG1hdGNoaW5nX2Jsb2NrcykgewoJCQkJaWYgKG1hdGNoaW5nX2Jsb2Nrcy5oYXNPd25Qcm9wZXJ0eShpZHgpKSB7CgkJCQkJYmxvY2sgPSBtYXRjaGluZ19ibG9ja3NbaWR4XTsKCQkJCQlpMiA9IGJsb2NrWzBdOwoJCQkJCWoyID0gYmxvY2tbMV07CgkJCQkJazIgPSBibG9ja1syXTsKCQkJCQlpZiAoaTEgKyBrMSA9PSBpMiAmJiBqMSArIGsxID09IGoyKSB7CgkJCQkJCWsxICs9IGsyOwoJCQkJCX0gZWxzZSB7CgkJCQkJCWlmIChrMSkgbm9uX2FkamFjZW50LnB1c2goW2kxLCBqMSwgazFdKTsKCQkJCQkJaTEgPSBpMjsKCQkJCQkJajEgPSBqMjsKCQkJCQkJazEgPSBrMjsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJCgkJCWlmIChrMSkgbm9uX2FkamFjZW50LnB1c2goW2kxLCBqMSwgazFdKTsKCQoJCQlub25fYWRqYWNlbnQucHVzaChbbGEsIGxiLCAwXSk7CgkJCXRoaXMubWF0Y2hpbmdfYmxvY2tzID0gbm9uX2FkamFjZW50OwoJCQlyZXR1cm4gdGhpcy5tYXRjaGluZ19ibG9ja3M7CgkJfQoJCQoJCXRoaXMuZ2V0X29wY29kZXMgPSBmdW5jdGlvbiAoKSB7CgkJCWlmICh0aGlzLm9wY29kZXMgIT0gbnVsbCkgcmV0dXJuIHRoaXMub3Bjb2RlczsKCQkJdmFyIGkgPSAwOwoJCQl2YXIgaiA9IDA7CgkJCXZhciBhbnN3ZXIgPSBbXTsKCQkJdGhpcy5vcGNvZGVzID0gYW5zd2VyOwoJCQl2YXIgYmxvY2ssIGFpLCBiaiwgc2l6ZSwgdGFnOwoJCQl2YXIgYmxvY2tzID0gdGhpcy5nZXRfbWF0Y2hpbmdfYmxvY2tzKCk7CgkJCWZvciAodmFyIGlkeCBpbiBibG9ja3MpIHsKCQkJCWlmIChibG9ja3MuaGFzT3duUHJvcGVydHkoaWR4KSkgewoJCQkJCWJsb2NrID0gYmxvY2tzW2lkeF07CgkJCQkJYWkgPSBibG9ja1swXTsKCQkJCQliaiA9IGJsb2NrWzFdOwoJCQkJCXNpemUgPSBibG9ja1syXTsKCQkJCQl0YWcgPSAnJzsKCQkJCQlpZiAoaSA8IGFpICYmIGogPCBiaikgewoJCQkJCQl0YWcgPSAncmVwbGFjZSc7CgkJCQkJfSBlbHNlIGlmIChpIDwgYWkpIHsKCQkJCQkJdGFnID0gJ2RlbGV0ZSc7CgkJCQkJfSBlbHNlIGlmIChqIDwgYmopIHsKCQkJCQkJdGFnID0gJ2luc2VydCc7CgkJCQkJfQoJCQkJCWlmICh0YWcpIGFuc3dlci5wdXNoKFt0YWcsIGksIGFpLCBqLCBial0pOwoJCQkJCWkgPSBhaSArIHNpemU7CgkJCQkJaiA9IGJqICsgc2l6ZTsKCQkJCQkKCQkJCQlpZiAoc2l6ZSkgYW5zd2VyLnB1c2goWydlcXVhbCcsIGFpLCBpLCBiaiwgal0pOwoJCQkJfQoJCQl9CgkJCQoJCQlyZXR1cm4gYW5zd2VyOwoJCX0KCQkKCQkvLyB0aGlzIGlzIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uIGluIHRoZSBweXRob24gbGliLCB3aGljaCBvZiBjb3Vyc2UgaXMgbm90IHN1cHBvcnRlZCBpbiBqYXZhc2NyaXB0CgkJLy8gdGhlIHJlaW1wbGVtZW50YXRpb24gYnVpbGRzIHVwIHRoZSBncm91cGVkIG9wY29kZXMgaW50byBhIGxpc3QgaW4gdGhlaXIgZW50aXJldHkgYW5kIHJldHVybnMgdGhhdC4KCQl0aGlzLmdldF9ncm91cGVkX29wY29kZXMgPSBmdW5jdGlvbiAobikgewoJCQlpZiAoIW4pIG4gPSAzOwoJCQl2YXIgY29kZXMgPSB0aGlzLmdldF9vcGNvZGVzKCk7CgkJCWlmICghY29kZXMpIGNvZGVzID0gW1siZXF1YWwiLCAwLCAxLCAwLCAxXV07CgkJCXZhciBjb2RlLCB0YWcsIGkxLCBpMiwgajEsIGoyOwoJCQlpZiAoY29kZXNbMF1bMF0gPT0gJ2VxdWFsJykgewoJCQkJY29kZSA9IGNvZGVzWzBdOwoJCQkJdGFnID0gY29kZVswXTsKCQkJCWkxID0gY29kZVsxXTsKCQkJCWkyID0gY29kZVsyXTsKCQkJCWoxID0gY29kZVszXTsKCQkJCWoyID0gY29kZVs0XTsKCQkJCWNvZGVzWzBdID0gW3RhZywgTWF0aC5tYXgoaTEsIGkyIC0gbiksIGkyLCBNYXRoLm1heChqMSwgajIgLSBuKSwgajJdOwoJCQl9CgkJCWlmIChjb2Rlc1tjb2Rlcy5sZW5ndGggLSAxXVswXSA9PSAnZXF1YWwnKSB7CgkJCQljb2RlID0gY29kZXNbY29kZXMubGVuZ3RoIC0gMV07CgkJCQl0YWcgPSBjb2RlWzBdOwoJCQkJaTEgPSBjb2RlWzFdOwoJCQkJaTIgPSBjb2RlWzJdOwoJCQkJajEgPSBjb2RlWzNdOwoJCQkJajIgPSBjb2RlWzRdOwoJCQkJY29kZXNbY29kZXMubGVuZ3RoIC0gMV0gPSBbdGFnLCBpMSwgTWF0aC5taW4oaTIsIGkxICsgbiksIGoxLCBNYXRoLm1pbihqMiwgajEgKyBuKV07CgkJCX0KCQoJCQl2YXIgbm4gPSBuICsgbjsKCQkJdmFyIGdyb3VwID0gW107CgkJCXZhciBncm91cHMgPSBbXTsKCQkJZm9yICh2YXIgaWR4IGluIGNvZGVzKSB7CgkJCQlpZiAoY29kZXMuaGFzT3duUHJvcGVydHkoaWR4KSkgewoJCQkJCWNvZGUgPSBjb2Rlc1tpZHhdOwoJCQkJCXRhZyA9IGNvZGVbMF07CgkJCQkJaTEgPSBjb2RlWzFdOwoJCQkJCWkyID0gY29kZVsyXTsKCQkJCQlqMSA9IGNvZGVbM107CgkJCQkJajIgPSBjb2RlWzRdOwoJCQkJCWlmICh0YWcgPT0gJ2VxdWFsJyAmJiBpMiAtIGkxID4gbm4pIHsKCQkJCQkJZ3JvdXAucHVzaChbdGFnLCBpMSwgTWF0aC5taW4oaTIsIGkxICsgbiksIGoxLCBNYXRoLm1pbihqMiwgajEgKyBuKV0pOwoJCQkJCQlncm91cHMucHVzaChncm91cCk7CgkJCQkJCWdyb3VwID0gW107CgkJCQkJCWkxID0gTWF0aC5tYXgoaTEsIGkyLW4pOwoJCQkJCQlqMSA9IE1hdGgubWF4KGoxLCBqMi1uKTsKCQkJCQl9CgkJCQkJCgkJCQkJZ3JvdXAucHVzaChbdGFnLCBpMSwgaTIsIGoxLCBqMl0pOwoJCQkJfQoJCQl9CgkJCQoJCQlpZiAoZ3JvdXAgJiYgIShncm91cC5sZW5ndGggPT0gMSAmJiBncm91cFswXVswXSA9PSAnZXF1YWwnKSkgZ3JvdXBzLnB1c2goZ3JvdXApCgkJCQoJCQlyZXR1cm4gZ3JvdXBzOwoJCX0KCQkKCQl0aGlzLnJhdGlvID0gZnVuY3Rpb24gKCkgewoJCQltYXRjaGVzID0gZGlmZmxpYi5fX3JlZHVjZSgKCQkJCQkJCWZ1bmN0aW9uIChzdW0sIHRyaXBsZSkgeyByZXR1cm4gc3VtICsgdHJpcGxlW3RyaXBsZS5sZW5ndGggLSAxXTsgfSwKCQkJCQkJCXRoaXMuZ2V0X21hdGNoaW5nX2Jsb2NrcygpLCAwKTsKCQkJcmV0dXJuIGRpZmZsaWIuX19jYWxjdWxhdGVfcmF0aW8obWF0Y2hlcywgdGhpcy5hLmxlbmd0aCArIHRoaXMuYi5sZW5ndGgpOwoJCX0KCQkKCQl0aGlzLnF1aWNrX3JhdGlvID0gZnVuY3Rpb24gKCkgewoJCQl2YXIgZnVsbGJjb3VudCwgZWx0OwoJCQlpZiAodGhpcy5mdWxsYmNvdW50ID09IG51bGwpIHsKCQkJCXRoaXMuZnVsbGJjb3VudCA9IGZ1bGxiY291bnQgPSB7fTsKCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5iLmxlbmd0aDsgaSsrKSB7CgkJCQkJZWx0ID0gdGhpcy5iW2ldOwoJCQkJCWZ1bGxiY291bnRbZWx0XSA9IGRpZmZsaWIuX19kaWN0Z2V0KGZ1bGxiY291bnQsIGVsdCwgMCkgKyAxOwoJCQkJfQoJCQl9CgkJCWZ1bGxiY291bnQgPSB0aGlzLmZ1bGxiY291bnQ7CgkKCQkJdmFyIGF2YWlsID0ge307CgkJCXZhciBhdmFpbGhhcyA9IGRpZmZsaWIuX19pc2luZGljdChhdmFpbCk7CgkJCXZhciBtYXRjaGVzID0gbnVtYiA9IDA7CgkJCWZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hLmxlbmd0aDsgaSsrKSB7CgkJCQllbHQgPSB0aGlzLmFbaV07CgkJCQlpZiAoYXZhaWxoYXMoZWx0KSkgewoJCQkJCW51bWIgPSBhdmFpbFtlbHRdOwoJCQkJfSBlbHNlIHsKCQkJCQludW1iID0gZGlmZmxpYi5fX2RpY3RnZXQoZnVsbGJjb3VudCwgZWx0LCAwKTsKCQkJCX0KCQkJCWF2YWlsW2VsdF0gPSBudW1iIC0gMTsKCQkJCWlmIChudW1iID4gMCkgbWF0Y2hlcysrOwoJCQl9CgkJCQoJCQlyZXR1cm4gZGlmZmxpYi5fX2NhbGN1bGF0ZV9yYXRpbyhtYXRjaGVzLCB0aGlzLmEubGVuZ3RoICsgdGhpcy5iLmxlbmd0aCk7CgkJfQoJCQoJCXRoaXMucmVhbF9xdWlja19yYXRpbyA9IGZ1bmN0aW9uICgpIHsKCQkJdmFyIGxhID0gdGhpcy5hLmxlbmd0aDsKCQkJdmFyIGxiID0gdGhpcy5iLmxlbmd0aDsKCQkJcmV0dXJuIF9jYWxjdWxhdGVfcmF0aW8oTWF0aC5taW4obGEsIGxiKSwgbGEgKyBsYik7CgkJfQoJCQoJCXRoaXMuaXNqdW5rID0gaXNqdW5rID8gaXNqdW5rIDogZGlmZmxpYi5kZWZhdWx0SnVua0Z1bmN0aW9uOwoJCXRoaXMuYSA9IHRoaXMuYiA9IG51bGw7CgkJdGhpcy5zZXRfc2VxcyhhLCBiKTsKCX0KfTsKCg==\"></script>\n",
"<script title=\"codediff\" src=\"data:application/javascript;base64,dmFyIGNvZGVkaWZmID0gKGZ1bmN0aW9uKCkgewoKdmFyIGRpZmZlciA9IGZ1bmN0aW9uKGJlZm9yZVRleHQsIGFmdGVyVGV4dCwgdXNlclBhcmFtcykgewogIHZhciBkZWZhdWx0UGFyYW1zID0gewogICAgY29udGV4dFNpemU6IDMsCiAgICBtaW5KdW1wU2l6ZTogMTAsCiAgICBsYW5ndWFnZTogbnVsbCwKICAgIGJlZm9yZU5hbWU6ICJCZWZvcmUiLAogICAgYWZ0ZXJOYW1lOiAiQWZ0ZXIiCiAgfTsKCiAgdGhpcy5wYXJhbXMgPSAkLmV4dGVuZCh7fSwgZGVmYXVsdFBhcmFtcywgdXNlclBhcmFtcyk7CgogIHRoaXMuYmVmb3JlTGluZXMgPSBiZWZvcmVUZXh0ID8gZGlmZmxpYi5zdHJpbmdBc0xpbmVzKGJlZm9yZVRleHQpIDogW107CiAgdGhpcy5hZnRlckxpbmVzID0gYWZ0ZXJUZXh0ID8gZGlmZmxpYi5zdHJpbmdBc0xpbmVzKGFmdGVyVGV4dCkgOiBbXTsKICB2YXIgc20gPSBuZXcgZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIodGhpcy5iZWZvcmVMaW5lcywgdGhpcy5hZnRlckxpbmVzKTsKICB2YXIgb3Bjb2RlcyA9IHNtLmdldF9vcGNvZGVzKCk7CgogIC8vIFRPRE86IGRvbid0IHN0b3JlIHRoZSBkaWZmIHJhbmdlcyAtLSB0aGV5J3JlIG9ubHkgdXNlZCBvbmNlIGluIGJ1aWxkVmlldy4KICB0aGlzLmRpZmZSYW5nZXMgPSBkaWZmZXIub3Bjb2Rlc1RvRGlmZlJhbmdlcygKICAgICAgb3Bjb2RlcywgdGhpcy5wYXJhbXMuY29udGV4dFNpemUsIHRoaXMucGFyYW1zLm1pbkp1bXBTaXplKTsKCiAgaWYgKHRoaXMucGFyYW1zLmxhbmd1YWdlKSB7CiAgICB2YXIgbGFuZyA9IHRoaXMucGFyYW1zLmxhbmd1YWdlOwogICAgdGhpcy5iZWZvcmVMaW5lc0hpZ2hsaWdodGVkID0gZGlmZmVyLmhpZ2hsaWdodFRleHRfKGJlZm9yZVRleHQsIGxhbmcpOwogICAgdGhpcy5hZnRlckxpbmVzSGlnaGxpZ2h0ZWQgPSBkaWZmZXIuaGlnaGxpZ2h0VGV4dF8oYWZ0ZXJUZXh0LCBsYW5nKTsKICB9CiAgLy8gVE9ETzogZnJvbSB0aGlzIHBvaW50IG9uIGxhbmd1YWdlIHNob3VsZG4ndCBuZWVkIHRvIGJlIHVzZWQuCn07CgpkaWZmZXIucHJvdG90eXBlLm1heExpbmVOdW1iZXIgPSBmdW5jdGlvbigpIHsKICByZXR1cm4gTWF0aC5tYXgodGhpcy5iZWZvcmVMaW5lcy5sZW5ndGgsIHRoaXMuYWZ0ZXJMaW5lcy5sZW5ndGgpOwp9OwoKLyoqCiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFBvc3NpYmx5IG11bHRpbGluZSB0ZXh0IGNvbnRhaW5pbmcgc3BhbnMgdGhhdCBjcm9zcwogKiAgICAgbGluZSBicmVha3MuCiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fSBBbiBhcnJheSBvZiBpbmRpdmlkdWFsIGxpbmVzLCBlYWNoIG9mIHdoaWNoIGhhcwogKiAgICAgZW50aXJlbHkgYmFsYW5jZWQgPHNwYW4+IHRhZ3MuCiAqLwpkaWZmZXIuZGlzdHJpYnV0ZVNwYW5zXyA9IGZ1bmN0aW9uKHRleHQpIHsKICB2YXIgbGluZXMgPSBkaWZmbGliLnN0cmluZ0FzTGluZXModGV4dCk7CiAgdmFyIHNwYW5SZSA9IC8oPHNwYW5bXj5dKj4pfCg8XC9zcGFuPikvOwoKICB2YXIgb3V0TGluZXMgPSBbXTsKICB2YXIgbGl2ZVNwYW5zID0gW107CiAgbGluZXMuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7CiAgICB2YXIgZ3JvdXBzID0gbGluZS5zcGxpdChzcGFuUmUpOwogICAgdmFyIGkgPSAwOwogICAgdmFyIG91dExpbmUgPSBsaXZlU3BhbnMuam9pbignJyk7CiAgICB3aGlsZSAoaSA8IGdyb3Vwcy5sZW5ndGgpIHsKICAgICAgdmFyIGcgPSBncm91cHNbaV07CiAgICAgIGlmIChnID09PSB1bmRlZmluZWQpIHsKICAgICAgICAvLyBjbG9zZSBzcGFuCiAgICAgICAgb3V0TGluZSArPSBncm91cHNbaSArIDFdOwogICAgICAgIGxpdmVTcGFucy5wb3AoKTsKICAgICAgICBpICs9IDI7CiAgICAgIH0gZWxzZSBpZiAoZy5zdWJzdHIoMCwgNSkgPT0gJzxzcGFuJykgewogICAgICAgIC8vIG9wZW4gc3BhbgogICAgICAgIGkgKz0gMjsKICAgICAgICBvdXRMaW5lICs9IGc7CiAgICAgICAgbGl2ZVNwYW5zLnB1c2goZyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gcGxhaW4gdGV4dAogICAgICAgIG91dExpbmUgKz0gZzsKICAgICAgICBpKys7CiAgICAgIH0KICAgIH0KICAgIGxpdmVTcGFucy5mb3JFYWNoKGZ1bmN0aW9uKCkgeyBvdXRMaW5lICs9ICc8L3NwYW4+JzsgfSk7CiAgICBvdXRMaW5lcy5wdXNoKG91dExpbmUpOwogIH0pOwogIGlmIChsaXZlU3BhbnMubGVuZ3RoKSB0aHJvdyAiVW5iYWxhbmNlZCA8c3Bhbj5zIGluICIgKyB0ZXh0OwogIHJldHVybiBvdXRMaW5lczsKfTsKCi8qKgogKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUaGUgbGluZXMgdG8gaGlnaGxpZ2h0LgogKiBAcGFyYW0gez9zdHJpbmd9IG9wdF9sYW5ndWFnZSBMYW5ndWFnZSB0byBwYXNzIHRvIGhpZ2hsaWdodC5qcy4gSWYgbm90CiAqICAgICBzcGVjaWZpZWQsIHRoZW4gdGhlIGxhbmd1YWdlIHdpbGwgYmUgYXV0by1kZXRlY3RlZC4KICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59IExpbmVzIG1hcmtlZCB1cCB3aXRoIHN5bnRheCA8c3Bhbj5zLiBUaGUgPHNwYW4+CiAqICAgICB0YWdzIHdpbGwgYmUgYmFsYW5jZWQgd2l0aGluIGVhY2ggbGluZS4KICovCmRpZmZlci5oaWdobGlnaHRUZXh0XyA9IGZ1bmN0aW9uKHRleHQsIG9wdF9sYW5ndWFnZSkgewogIGlmICh0ZXh0ID09PSBudWxsKSByZXR1cm4gW107CgogIC8vIFRPRE8oZGFudmspOiBsb29rIGludG8gc3VwcHJlc3NpbmcgaGlnaGxpZ2h0aW5nIGlmIC5yZWxldmFuY2UgaXMgbG93LgogIHZhciBodG1sOwogIGlmIChvcHRfbGFuZ3VhZ2UpIHsKICAgIGh0bWwgPSBobGpzLmhpZ2hsaWdodChvcHRfbGFuZ3VhZ2UsIHRleHQsIHRydWUpLnZhbHVlOwogIH0gZWxzZSB7CiAgICByZXR1cm4gbnVsbDsKICAgIC8vIFRoaXMgcHJvZHVjZXMgYSBsb3Qgb2YgZmFsc2UgcG9zaXRpdmVzOgogICAgLy8gaHRtbCA9IGhsanMuaGlnaGxpZ2h0QXV0byh0ZXh0KS52YWx1ZTsKICAgIC8vIFRoZXJlIGlzIGEgcmVsZXZhbmNlIG51bWJlciBidXQgaXQncyBoYXJkIHRvIHRocmVzaG9sZC4gVGhlIGZpbGUKICAgIC8vIGV4dGVuc2lvbiBpcyBwcm9iYWJseSBhIGdvb2QgZW5vdWdoIGhldXJpc3RpYy4KICB9CgogIC8vIFNvbWUgb2YgdGhlIDxzcGFuPnMgbWlnaHQgY3Jvc3MgbGluZXMsIHdoaWNoIHdvbid0IHdvcmsgZm9yIG91ciBkaWZmCiAgLy8gc3RydWN0dXJlLiBXZSBjb252ZXJ0IHRoZW0gdG8gc2luZ2xlLWxpbmUgb25seSA8c3BhbnM+IGhlcmUuCiAgcmV0dXJuIGRpZmZlci5kaXN0cmlidXRlU3BhbnNfKGh0bWwpOwp9CgovKioKICogQXR0YWNoIGV2ZW50IGxpc3RlbmVycywgbm90YWJseSBmb3IgdGhlICJzaG93IG1vcmUiIGxpbmtzLgogKi8KZGlmZmVyLnByb3RvdHlwZS5hdHRhY2hIYW5kbGVyc18gPSBmdW5jdGlvbihlbCkgewogIC8vIFRPRE86IGdyb3NzIGR1cGxpY2F0aW9uIHdpdGggYnVpbGRWaWV3XwogIHZhciBsYW5ndWFnZSA9IHRoaXMucGFyYW1zLmxhbmd1YWdlLAogICAgICBiZWZvcmVMaW5lcyA9IGxhbmd1YWdlID8gdGhpcy5iZWZvcmVMaW5lc0hpZ2hsaWdodGVkIDogdGhpcy5iZWZvcmVMaW5lcywKICAgICAgYWZ0ZXJMaW5lcyA9IGxhbmd1YWdlID8gdGhpcy5hZnRlckxpbmVzSGlnaGxpZ2h0ZWQgOiB0aGlzLmFmdGVyTGluZXM7CiAgJChlbCkub24oJ2NsaWNrJywgJy5za2lwIGEnLCBmdW5jdGlvbihlKSB7CiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICB2YXIgc2tpcERhdGEgPSAkKHRoaXMpLmNsb3Nlc3QoJy5za2lwJykuZGF0YSgpOwogICAgdmFyIGJlZm9yZUlkeCA9IHNraXBEYXRhLmJlZm9yZVN0YXJ0SW5kZXg7CiAgICB2YXIgYWZ0ZXJJZHggPSBza2lwRGF0YS5hZnRlclN0YXJ0SW5kZXg7CiAgICB2YXIganVtcCA9IHNraXBEYXRhLmp1bXBMZW5ndGg7CiAgICB2YXIgY2hhbmdlID0gImVxdWFsIjsKICAgIHZhciBuZXdUcnMgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwganVtcDsgaSsrKSB7CiAgICAgIG5ld1Rycy5wdXNoKGRpZmZlci5idWlsZFJvd1RyXygKICAgICAgICAnZXF1YWwnLAogICAgICAgIGJlZm9yZUlkeCArIGkgKyAxLAogICAgICAgIGJlZm9yZUxpbmVzW2JlZm9yZUlkeCArIGldLAogICAgICAgIGFmdGVySWR4ICsgaSArIDEsCiAgICAgICAgYWZ0ZXJMaW5lc1thZnRlcklkeCArIGldLAogICAgICAgIGxhbmd1YWdlKSk7CiAgICB9CgogICAgLy8gUmVwbGFjZSB0aGUgInNraXAiIHJvd3Mgd2l0aCByZWFsIGNvZGUuCiAgICB2YXIgJHNraXBUciA9ICQodGhpcykuY2xvc2VzdCgndHInKTsKICAgICRza2lwVHIucmVwbGFjZVdpdGgobmV3VHJzKTsKICB9KTsKCiAgLy8gSG9va3MgZm9yIHNpbmdsZS1jb2x1bW4gdGV4dCBzZWxlY3Rpb24uCiAgLy8gU2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI3NTMwNjI3LzM4ODk1MSBmb3IgZGV0YWlscy4KICAkKGVsKS5vbignbW91c2Vkb3duJywgZnVuY3Rpb24oZSkgewogICAgdmFyICR0ZCA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoJ3RkJyksCiAgICAgICAgaXNMZWZ0ID0gJHRkLmlzKCcuYmVmb3JlJyksCiAgICAgICAgaXNSaWdodCA9ICR0ZC5pcygnLmFmdGVyJyk7CiAgICBpZiAoIWlzTGVmdCAmJiAhaXNSaWdodCkgcmV0dXJuOwoKICAgIGVsLnJlbW92ZUNsYXNzKCdzZWxlY3RpbmctbGVmdCBzZWxlY3RpbmctcmlnaHQnKQogICAgICAuYWRkQ2xhc3MoJ3NlbGVjdGluZy0nICsgKGlzTGVmdCA/ICdsZWZ0JyA6ICdyaWdodCcpKTsKICB9KS5vbignY29weScsIGZ1bmN0aW9uKGUpIHsKICAgIHZhciBpc0xlZnQgPSBlbC5pcygnLnNlbGVjdGluZy1sZWZ0JyksCiAgICAgICAgaWR4ID0gaXNMZWZ0ID8gMSA6IDI7ICAvLyBpbmRleCBvZiA8dGQ+IHdpdGhpbiA8dHI+CgogICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKSwKICAgICAgICByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApLAogICAgICAgIGRvYyA9IHJhbmdlLmNsb25lQ29udGVudHMoKSwKICAgICAgICBub2RlcyA9IGRvYy5xdWVyeVNlbGVjdG9yQWxsKCd0ZC4nICsgKGlzTGVmdCA/ICdiZWZvcmUnIDogJ2FmdGVyJykpLAogICAgICAgIHRleHQgPSAnJzsKCiAgICBpZiAobm9kZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHRleHQgPSBkb2MudGV4dENvbnRlbnQ7CiAgICB9IGVsc2UgewogICAgICBbXS5mb3JFYWNoLmNhbGwobm9kZXMsIGZ1bmN0aW9uKHRkLCBpKSB7CiAgICAgICAgdGV4dCArPSAoaSA/ICdcbicgOiAnJykgKyB0ZC50ZXh0Q29udGVudDsKICAgICAgfSk7CiAgICB9CiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cdTIwMEIvZywgJycpOyAgLy8gcmVtb3ZlIHNvZnQgYnJlYWtzCgogICAgdmFyIGNsaXBib2FyZERhdGEgPSBlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YTsKICAgIGNsaXBib2FyZERhdGEuc2V0RGF0YSgndGV4dCcsIHRleHQpOwogICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogIH0pOwp9OwoKLyoqCiAqIENyZWF0ZSBhIHNpbmdsZSByb3cgaW4gdGhlIHRhYmxlLiBBZGRzIGNoYXJhY3RlciBkaWZmcyBpZiByZXF1aXJlZC4KICovCmRpZmZlci5idWlsZFJvd1RyXyA9IGZ1bmN0aW9uKHR5cGUsIGJlZm9yZUxpbmVOdW0sIGJlZm9yZVRleHRPckh0bWwsIGFmdGVyTGluZU51bSwgYWZ0ZXJUZXh0T3JIdG1sLCBsYW5ndWFnZSkgewogIHZhciAkbWFrZUNvZGVUZCA9IGZ1bmN0aW9uKHRleHRPckh0bWwpIHsKICAgIGlmICh0ZXh0T3JIdG1sID09IG51bGwpIHsKICAgICAgcmV0dXJuICQoJzx0ZCBjbGFzcz0iZW1wdHkgY29kZSI+Jyk7CiAgICB9CiAgICB0ZXh0T3JIdG1sID0gdGV4dE9ySHRtbC5yZXBsYWNlKC9cdC9nLCAiXHUwMGEwXHUwMGEwXHUwMGEwXHUwMGEwIik7CiAgICB2YXIgJHRkID0gJCgnPHRkIGNsYXNzPSJjb2RlIj4nKS5hZGRDbGFzcyh0eXBlKTsKICAgIGlmIChsYW5ndWFnZSkgewogICAgICAkdGQuaHRtbCh0ZXh0T3JIdG1sKTsKICAgIH0gZWxzZSB7CiAgICAgICR0ZC50ZXh0KHRleHRPckh0bWwpOwogICAgfQogICAgcmV0dXJuICR0ZDsKICB9OwoKICB2YXIgY2VsbHMgPSBbCiAgICAkKCc8dGQgY2xhc3M9bGluZS1ubz4nKS50ZXh0KGJlZm9yZUxpbmVOdW0gfHwgJycpLmdldCgwKSwKICAgICRtYWtlQ29kZVRkKGJlZm9yZVRleHRPckh0bWwpLmFkZENsYXNzKCdiZWZvcmUnKS5nZXQoMCksCiAgICAkbWFrZUNvZGVUZChhZnRlclRleHRPckh0bWwpLmFkZENsYXNzKCdhZnRlcicpLmdldCgwKSwKICAgICQoJzx0ZCBjbGFzcz1saW5lLW5vPicpLnRleHQoYWZ0ZXJMaW5lTnVtIHx8ICcnKS5nZXQoMCkKICBdOwogIGlmICh0eXBlID09ICdyZXBsYWNlJykgewogICAgZGlmZmVyLmFkZENoYXJhY3RlckRpZmZzXyhjZWxsc1sxXSwgY2VsbHNbMl0sIGxhbmd1YWdlKTsKICB9CgogIHJldHVybiAkKCc8dHI+JykuYXBwZW5kKGNlbGxzKS5nZXQoMCk7Cn07CgovKioKICogQ3JlYXRlIGEgInNraXAiIHJvdyB3aXRoIGEgbGluayB0byBleHBhbmQuCiAqIGJlZm9yZUlkeCBhbmQgYWZ0ZXJJZHggYXJlIHRoZSBpbmRpY2VzIG9mIHRoZSBmaXJzdCBsaW5lcyBza2lwcGVkLgogKi8KZGlmZmVyLmJ1aWxkU2tpcFRyXyA9IGZ1bmN0aW9uKGJlZm9yZUlkeCwgYWZ0ZXJJZHgsIG51bVJvd3NTa2lwcGVkKSB7CiAgdmFyICR0ciA9ICQoCiAgICAnPHRyPicgKwogICAgICAnPHRkIGNsYXNzPSJsaW5lLW5vIj4maGVsbGlwOzwvdGQ+JyArCiAgICAgICc8dGQgY29sc3Bhbj0iMiIgY2xhc3M9InNraXAgY29kZSI+JyArCiAgICAgICAgJzxhIGhyZWY9IiMiPlNob3cgJyArIG51bVJvd3NTa2lwcGVkICsgJyBtb3JlIGxpbmVzPC9hPicgKwogICAgICAnPC90ZD4nICsKICAgICAgJzx0ZCBjbGFzcz0ibGluZS1ubyI+JmhlbGxpcDs8L3RkPicgKwogICAgJzwvdHI+Jyk7CiAgJHRyLmZpbmQoJy5za2lwJykuZGF0YSh7CiAgICAnYmVmb3JlU3RhcnRJbmRleCc6IGJlZm9yZUlkeCwKICAgICdhZnRlclN0YXJ0SW5kZXgnOiBhZnRlcklkeCwKICAgICdqdW1wTGVuZ3RoJzogbnVtUm93c1NraXBwZWQKICB9KTsKICByZXR1cm4gJHRyLmdldCgwKTsKfTsKCmRpZmZlci5wcm90b3R5cGUuYnVpbGRWaWV3XyA9IGZ1bmN0aW9uKCkgewogIC8vIFRPRE86IGlzIHRoaXMgZGlzdGluY3Rpb24gbmVjZXNzYXJ5PwogIHZhciBsYW5ndWFnZSA9IHRoaXMucGFyYW1zLmxhbmd1YWdlLAogICAgICBiZWZvcmVMaW5lcyA9IGxhbmd1YWdlID8gdGhpcy5iZWZvcmVMaW5lc0hpZ2hsaWdodGVkIDogdGhpcy5iZWZvcmVMaW5lcywKICAgICAgYWZ0ZXJMaW5lcyA9IGxhbmd1YWdlID8gdGhpcy5hZnRlckxpbmVzSGlnaGxpZ2h0ZWQgOiB0aGlzLmFmdGVyTGluZXM7CgogIHZhciAkdGFibGUgPSAkKCc8dGFibGUgY2xhc3M9ImRpZmYiPicpOwogICR0YWJsZS5hcHBlbmQoJCgnPHRyPicpLmFwcGVuZCgKICAgICAgJCgnPHRoIGNsYXNzPSJkaWZmLWhlYWRlciIgY29sc3Bhbj0yPicpLnRleHQodGhpcy5wYXJhbXMuYmVmb3JlTmFtZSksCiAgICAgICQoJzx0aCBjbGFzcz0iZGlmZi1oZWFkZXIiIGNvbHNwYW49Mj4nKS50ZXh0KHRoaXMucGFyYW1zLmFmdGVyTmFtZSkpKTsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpZmZSYW5nZXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciByYW5nZSA9IHRoaXMuZGlmZlJhbmdlc1tpXSwKICAgICAgICB0eXBlID0gcmFuZ2UudHlwZSwKICAgICAgICBudW1CZWZvcmVSb3dzID0gcmFuZ2UuYmVmb3JlWzFdIC0gcmFuZ2UuYmVmb3JlWzBdLAogICAgICAgIG51bUFmdGVyUm93cyA9IHJhbmdlLmFmdGVyWzFdIC0gcmFuZ2UuYWZ0ZXJbMF0sCiAgICAgICAgbnVtUm93cyA9IE1hdGgubWF4KG51bUJlZm9yZVJvd3MsIG51bUFmdGVyUm93cyk7CgogICAgaWYgKHR5cGUgPT0gJ3NraXAnKSB7CiAgICAgICR0YWJsZS5hcHBlbmQoCiAgICAgICAgICBkaWZmZXIuYnVpbGRTa2lwVHJfKHJhbmdlLmJlZm9yZVswXSwgcmFuZ2UuYWZ0ZXJbMF0sIG51bVJvd3MpKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtUm93czsgaisrKSB7CiAgICAgICAgdmFyIGJlZm9yZUlkeCA9IChqIDwgbnVtQmVmb3JlUm93cykgPyByYW5nZS5iZWZvcmVbMF0gKyBqIDogbnVsbCwKICAgICAgICAgICAgYWZ0ZXJJZHggPSAoaiA8IG51bUFmdGVyUm93cykgPyByYW5nZS5hZnRlclswXSArIGogOiBudWxsOwogICAgICAgICR0YWJsZS5hcHBlbmQoZGlmZmVyLmJ1aWxkUm93VHJfKAogICAgICAgICAgICB0eXBlLAogICAgICAgICAgICAoYmVmb3JlSWR4ICE9IG51bGwpICYmIDEgKyBiZWZvcmVJZHgsCiAgICAgICAgICAgIGJlZm9yZUxpbmVzW2JlZm9yZUlkeF0sCiAgICAgICAgICAgIChhZnRlcklkeCAhPSBudWxsKSAmJiAxICsgYWZ0ZXJJZHgsCiAgICAgICAgICAgIGFmdGVyTGluZXNbYWZ0ZXJJZHhdLAogICAgICAgICAgICBsYW5ndWFnZSkpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBUT0RPOiBtb3ZlIGludG8gYnVpbGRSb3dUcl8/CiAgaWYgKCF0aGlzLnBhcmFtcy53b3JkV3JhcCkgewogICAgJHRhYmxlLmZpbmQoJy5jb2RlJykuZWFjaChmdW5jdGlvbihfLCBlbCkgewogICAgICBkaWZmZXIuYWRkU29mdEJyZWFrcyhlbCk7CiAgICB9KTsKICB9CgogIHZhciAkY29udGFpbmVyID0gJCgnPGRpdiBjbGFzcz0iZGlmZiI+Jyk7CiAgJGNvbnRhaW5lci5hcHBlbmQoJHRhYmxlKTsKICAvLyBBdHRhY2ggZXZlbnQgaGFuZGxlcnMgJiBhcHBseSBjaGFyIGRpZmZzLgogIHRoaXMuYXR0YWNoSGFuZGxlcnNfKCRjb250YWluZXIpOwogIHJldHVybiAkY29udGFpbmVyLmdldCgwKTsKfTsKCi8vIElucHV0IGlzIGEgbGlzdCBvZiBvcGNvZGVzLCBhcyBvdXRwdXQgYnkgZGlmZmxpYiAoZS5nLiAnZXF1YWwnLCAncmVwbGFjZScsCi8vICdkZWxldGUnLCAnaW5zZXJ0JykuCi8vIE91dHB1dCBpcyBhIGxpc3Qgb2YgZGlmZiByYW5nZXMgd2hpY2ggY29ycmVzcG9uZHMgcHJlY2lzZWx5IHRvIHRoZSB2aWV3LCBlLmcuCi8vICdza2lwJywgJ2luc2VydCcsICdyZXBsYWNlJywgJ2RlbGV0ZScgYW5kICdlcXVhbCcuCi8vIE91dHB1dHMgYXJlIHt0eXBlLCBiZWZvcmU6W3N0YXJ0LGxpbWl0XSwgYWZ0ZXI6W3N0YXJ0LGxpbWl0XX0gdHVwbGVzLgpkaWZmZXIub3Bjb2Rlc1RvRGlmZlJhbmdlcyA9IGZ1bmN0aW9uKG9wY29kZXMsIGNvbnRleHRTaXplLCBtaW5KdW1wU2l6ZSkgewogIHZhciByYW5nZXMgPSBbXTsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcGNvZGVzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgb3Bjb2RlID0gb3Bjb2Rlc1tpXTsKICAgIHZhciBjaGFuZ2UgPSBvcGNvZGVbMF07ICAvLyAiZXF1YWwiLCAicmVwbGFjZSIsICJkZWxldGUiLCAiaW5zZXJ0IgogICAgdmFyIGJlZm9yZUlkeCA9IG9wY29kZVsxXTsKICAgIHZhciBiZWZvcmVFbmQgPSBvcGNvZGVbMl07CiAgICB2YXIgYWZ0ZXJJZHggPSBvcGNvZGVbM107CiAgICB2YXIgYWZ0ZXJFbmQgPSBvcGNvZGVbNF07CiAgICB2YXIgcmFuZ2UgPSB7CiAgICAgICAgICB0eXBlOiBjaGFuZ2UsCiAgICAgICAgICBiZWZvcmU6IFtiZWZvcmVJZHgsIGJlZm9yZUVuZF0sCiAgICAgICAgICBhZnRlcjogW2FmdGVySWR4LCBhZnRlckVuZF0KICAgICAgICB9OwogICAgaWYgKGNoYW5nZSAhPSAnZXF1YWwnKSB7CiAgICAgIHJhbmdlcy5wdXNoKHJhbmdlKTsKICAgICAgY29udGludWU7CiAgICB9CgogICAgLy8gU2hvdWxkIHRoaXMgImVxdWFsIiByYW5nZSBoYXZlIGEganVtcCBpbnNlcnRlZD8KICAgIC8vIEZpcnN0IHJlbW92ZSBgY29udGV4dFNpemVgIGxpbmVzIGZyb20gZWl0aGVyIGVuZC4KICAgIC8vIElmIHRoaXMgbGVhdmVzIG1vcmUgdGhhbiBtaW5KdW1wU2l6ZSByb3dzLCB0aGVuIHNwbGljZSBpbiBhIGp1bXAuCiAgICB2YXIgcm93Q291bnQgPSBiZWZvcmVFbmQgLSBiZWZvcmVJZHgsICAvLyB3b3VsZCBiZSBzYW1lIGZvciBhZnRlcntFbmQsSWR4fQogICAgICAgIGlzU3RhcnQgPSAoaSA9PSAwKSwKICAgICAgICBpc0VuZCA9IChpID09IG9wY29kZXMubGVuZ3RoIC0gMSksCiAgICAgICAgZmlyc3RTa2lwT2Zmc2V0ID0gaXNTdGFydCA/IDAgOiBjb250ZXh0U2l6ZSwKICAgICAgICBsYXN0U2tpcE9mZnNldCA9IHJvd0NvdW50IC0gKGlzRW5kID8gMCA6IGNvbnRleHRTaXplKSwKICAgICAgICBza2lwTGVuZ3RoID0gbGFzdFNraXBPZmZzZXQgLSBmaXJzdFNraXBPZmZzZXQ7CgogICAgaWYgKHNraXBMZW5ndGggPT0gMCB8fCBza2lwTGVuZ3RoIDwgbWluSnVtcFNpemUpIHsKICAgICAgcmFuZ2VzLnB1c2gocmFuZ2UpOwogICAgICBjb250aW51ZTsKICAgIH0KCiAgICAvLyBDb252ZXJ0IHRoZSAnZXF1YWwnIGJsb2NrIHRvIGFuIGVxdWFsLXNraXAtZXF1YWwgc2VxdWVuY2UuCiAgICBpZiAoZmlyc3RTa2lwT2Zmc2V0ID4gMCkgewogICAgICByYW5nZXMucHVzaCh7CiAgICAgICAgdHlwZTogJ2VxdWFsJywKICAgICAgICBiZWZvcmU6IFtiZWZvcmVJZHgsIGJlZm9yZUlkeCArIGZpcnN0U2tpcE9mZnNldF0sCiAgICAgICAgYWZ0ZXI6IFthZnRlcklkeCwgYWZ0ZXJJZHggKyBmaXJzdFNraXBPZmZzZXRdCiAgICAgIH0pOwogICAgfQogICAgcmFuZ2VzLnB1c2goewogICAgICB0eXBlOiAnc2tpcCcsCiAgICAgIGJlZm9yZTogW2JlZm9yZUlkeCArIGZpcnN0U2tpcE9mZnNldCwgYmVmb3JlSWR4ICsgbGFzdFNraXBPZmZzZXRdLAogICAgICBhZnRlcjogW2FmdGVySWR4ICsgZmlyc3RTa2lwT2Zmc2V0LCBhZnRlcklkeCArIGxhc3RTa2lwT2Zmc2V0XQogICAgfSk7CiAgICBpZiAobGFzdFNraXBPZmZzZXQgPCByb3dDb3VudCkgewogICAgICByYW5nZXMucHVzaCh7CiAgICAgICAgdHlwZTogJ2VxdWFsJywKICAgICAgICBiZWZvcmU6IFtiZWZvcmVJZHggKyBsYXN0U2tpcE9mZnNldCwgYmVmb3JlRW5kXSwKICAgICAgICBhZnRlcjogW2FmdGVySWR4ICsgbGFzdFNraXBPZmZzZXQsIGFmdGVyRW5kXQogICAgICB9KTsKICAgIH0KICB9CgogIHJldHVybiByYW5nZXM7Cn0KCmZ1bmN0aW9uIHdhbGtUaGVET00obm9kZSwgZnVuYykgewogIGZ1bmMobm9kZSk7CiAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDsKICB3aGlsZSAobm9kZSkgewogICAgd2Fsa1RoZURPTShub2RlLCBmdW5jKTsKICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nOwogIH0KfQoKLyoqCiAqIEFkZHMgc29mdCB3cmFwIG1hcmtlcnMgYmV0d2VlbiBhbGwgY2hhcmFjdGVycyBpbiBhIERPTSBlbGVtZW50LgogKi8KZGlmZmVyLmFkZFNvZnRCcmVha3MgPSBmdW5jdGlvbihlbCkgewogIHZhciBzb2Z0QnJlYWsgPSAnXHUyMDBCJzsKICB3YWxrVGhlRE9NKGVsLCBmdW5jdGlvbihub2RlKSB7CiAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gMykgcmV0dXJuOwogICAgdmFyIHRleHQgPSBub2RlLmRhdGE7CiAgICB0ZXh0ID0gdGV4dC5zcGxpdCgnJykuam9pbihzb2Z0QnJlYWspOwogICAgbm9kZS5ub2RlVmFsdWUgPSB0ZXh0OwogIH0pOwp9OwoKZGlmZmVyLmh0bWxUZXh0TWFwcGVyID0gZnVuY3Rpb24odGV4dCwgaHRtbCkgewogIHRoaXMudGV4dF8gPSB0ZXh0OwogIHRoaXMuaHRtbF8gPSBodG1sOwp9OwoKLy8gR2V0IHRoZSBzdWJzdHJpbmcgb2YgSFRNTCBjb3JyZXNwb25kaW5nIHRvIHRleHQuc3Vic3RyKHN0YXJ0LCBsZW4pLgovLyBMZWFkaW5nIG1hcmt1cCBpcyBpbmNsdWRlZCB3aXRoIGluZGV4IDAsIHRyYWlsaW5nIHdpdGggdGhlIGxhc3QgY2hhci4KZGlmZmVyLmh0bWxUZXh0TWFwcGVyLnByb3RvdHlwZS5nZXRIdG1sU3Vic3RyaW5nID0gZnVuY3Rpb24oc3RhcnQsIGxpbWl0KSB7CiAgdmFyIGNvdW50ID0gbGltaXQgLSBzdGFydDsKICByZXR1cm4gaHRtbF9zdWJzdHIodGhpcy5odG1sXywgc3RhcnQsIGNvdW50KTsKfTsKCi8vIFJldHVybnMgdGhlIEhUTUwgY29ycmVzcG9uZGluZyB0byB0ZXh0IGluIHBvc2l0aW9ucyBbc3RhcnQsIHN0YXJ0K2NvdW50KS4KLy8gVGhpcyBpbmNsdWRlcyBhbnkgSFRNTCBpbiB0aGF0IGNoYXJhY3RlciByYW5nZSwgb3IgZW5jbG9zaW5nIGl0LgovLyBjb2JibGVkIHRvZ2V0aGVyIGZyb206Ci8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAwMzI3MS9zdWJzdHJpbmctdGV4dC13aXRoLWh0bWwtdGFncy1pbi1qYXZhc2NyaXB0P3JxPTEKLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNjg1NjkyOC9zdWJzdHJpbmctdGV4dC13aXRoLWphdmFzY3JpcHQtaW5jbHVkaW5nLWh0bWwtdGFncwpmdW5jdGlvbiBodG1sX3N1YnN0cihodG1sLCBzdGFydCwgY291bnQpIHsKICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgZGl2LmlubmVySFRNTCA9IGh0bWw7CiAgdmFyIGNvbnN1bWVkID0gMDsKCiAgd2FsayhkaXYsIHRyYWNrKTsKCiAgZnVuY3Rpb24gdHJhY2soZWwpIHsKICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgdmFyIGxlbiA9IGVsLmRhdGEubGVuZ3RoOwogICAgICBpZiAoc3RhcnQgPD0gbGVuKSB7CiAgICAgICAgZWwuZGF0YSA9IGVsLnN1YnN0cmluZ0RhdGEoc3RhcnQsIGxlbik7CiAgICAgICAgc3RhcnQgPSAwOwogICAgICB9IGVsc2UgewogICAgICAgIHN0YXJ0IC09IGxlbjsKICAgICAgICBlbC5kYXRhID0gJyc7CiAgICAgIH0KICAgICAgbGVuID0gZWwuZGF0YS5sZW5ndGg7CiAgICAgIGNvdW50IC09IGxlbjsKICAgICAgY29uc3VtZWQgKz0gbGVuOwogICAgICBpZiAoY291bnQgPD0gMCkgewogICAgICAgIGVsLmRhdGEgPSBlbC5zdWJzdHJpbmdEYXRhKDAsIGVsLmRhdGEubGVuZ3RoICsgY291bnQpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBlbC5kYXRhID0gJyc7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB3YWxrKGVsLCBmbikgewogICAgdmFyIG5vZGUgPSBlbC5maXJzdENoaWxkLCBvbGROb2RlOwogICAgdmFyIGVsc1RvUmVtb3ZlID0gW107CiAgICBkbyB7CiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAzKSB7CiAgICAgICAgZm4obm9kZSk7CiAgICAgIH0gZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBub2RlLmNoaWxkTm9kZXMgJiYgbm9kZS5jaGlsZE5vZGVzWzBdKSB7CiAgICAgICAgd2Fsayggbm9kZSwgZm4gKTsKICAgICAgfQogICAgICBpZiAoY29uc3VtZWQgPT0gMCAmJiBub2RlLm5vZGVUeXBlID09IDEpIHsKICAgICAgICBlbHNUb1JlbW92ZS5wdXNoKG5vZGUpOwogICAgICB9CiAgICB9IHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpICYmIChjb3VudCA+IDApKTsKCiAgICAvLyByZW1vdmUgcmVtYWluaW5nIG5vZGVzCiAgICB3aGlsZSAobm9kZSl7CiAgICAgIG9sZE5vZGUgPSBub2RlOwogICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZzsKICAgICAgZWwucmVtb3ZlQ2hpbGQob2xkTm9kZSk7CiAgICB9CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHNUb1JlbW92ZS5sZW5ndGg7IGkrKykgewogICAgICB2YXIgZWwgPSBlbHNUb1JlbW92ZVtpXTsKICAgICAgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIHsKICAgICAgICBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTsKICAgICAgfQogICAgfQogIH0KCiAgcmV0dXJuIGRpdi5pbm5lckhUTUw7Cn0KCi8qKgogKiBAcGFyYW0ge3N0cmluZ30gbGluZSBUaGUgbGluZSB0byBiZSBzcGxpdAogKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn0gQ29tcG9uZW50IHdvcmRzIGluIHRoZSBsaW5lLiBBbiBpbnZhcmlhbnQgaXMgdGhhdAogKiAgICAgc3BsaXRJbnRvV29yZHNfKGxpbmUpLmpvaW4oJycpID09IGxpbmUuCiAqLwpkaWZmZXIuc3BsaXRJbnRvV29yZHNfID0gZnVuY3Rpb24obGluZSkgewogIHZhciBMQyA9IDAsIFVDID0gMiwgTlVNID0gMywgV1MgPSA0LCBTWU0gPSA1OwogIHZhciBjaGFyVHlwZSA9IGZ1bmN0aW9uKGMpIHsKICAgIGlmIChjLm1hdGNoKC9bYS16XS8pKSByZXR1cm4gTEM7CiAgICBpZiAoYy5tYXRjaCgvW0EtWl0vKSkgcmV0dXJuIFVDOwogICAgaWYgKGMubWF0Y2goL1swLTldLykpIHJldHVybiBOVU07CiAgICBpZiAoYy5tYXRjaCgvXHMvKSkgcmV0dXJuIFdTOwogICAgcmV0dXJuIFNZTTsKICB9OwoKICAvLyBTaW5nbGUgd29yZHMgY2FuIGJlIFtBLVpdW2Etel0rLCBbQS1aXSssIFthLXpdKywgWzAtOV0rIG9yIFxzKy4KICB2YXIgd29yZHMgPSBbXTsKICB2YXIgbGFzdFR5cGUgPSAtMTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUubGVuZ3RoOyBpKyspIHsKICAgIHZhciBjID0gbGluZS5jaGFyQXQoaSk7CiAgICB2YXIgY3QgPSBjaGFyVHlwZShjKTsKICAgIGlmIChjdCA9PSBsYXN0VHlwZSAmJiBjdCAhPSBTWU0gJiYgY3QgIT0gV1MgfHwKICAgICAgICBjdCA9PSBMQyAmJiBsYXN0VHlwZSA9PSBVQyAmJiB3b3Jkc1t3b3Jkcy5sZW5ndGggLSAxXS5sZW5ndGggPT0gMSkgewogICAgICB3b3Jkc1t3b3Jkcy5sZW5ndGggLSAxXSArPSBjOwogICAgfSBlbHNlIHsKICAgICAgd29yZHMucHVzaChjKTsKICAgIH0KICAgIGxhc3RUeXBlID0gY3Q7CiAgfQogIHJldHVybiB3b3JkczsKfTsKCi8qKgogKiBDb21wdXRlIGFuIGludHJhLWxpbmUgZGlmZi4KICogQHBhcmFtIHtzdHJpbmd9IGJlZm9yZVRleHQKICogQHBhcmFtIHtzdHJpbmd9IGFmdGVyVGV4dAogKiBAcmV0dXJuIHs/QXJyYXkuPEFycmF5Pn0gW2JlZm9yZSBjb2RlcywgYWZ0ZXIgY29kZXNdLCB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgYQogKiAgICAgbGlzdCBvZiAoJ2NoYW5nZSB0eXBlJywgc3RhcnQgaWR4LCBzdG9wIGlkeCkgdHJpcGxlcy4gUmV0dXJucyBudWxsIGlmCiAqICAgICBjaGFyYWN0ZXIgZGlmZmVyZW5jZXMgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgdGhpcyBsaW5lIHBhaXJpbmcuCiAqLwpkaWZmZXIuY29tcHV0ZUNoYXJhY3RlckRpZmZzXyA9IGZ1bmN0aW9uKGJlZm9yZVRleHQsIGFmdGVyVGV4dCkgewogIHZhciBiZWZvcmVXb3JkcyA9IGRpZmZlci5zcGxpdEludG9Xb3Jkc18oYmVmb3JlVGV4dCksCiAgICAgIGFmdGVyV29yZHMgPSBkaWZmZXIuc3BsaXRJbnRvV29yZHNfKGFmdGVyVGV4dCk7CgogIC8vIFRPRE86IHByZWNvbXB1dGUgdHdvIGFycmF5czsgdGhpcyBkb2VzIHRvbyBtdWNoIHdvcmsuCiAgdmFyIHdvcmRUb0lkeCA9IGZ1bmN0aW9uKGlzQmVmb3JlLCBpZHgpIHsKICAgIHZhciB3b3JkcyA9IGlzQmVmb3JlID8gYmVmb3JlV29yZHMgOiBhZnRlcldvcmRzOwogICAgdmFyIGNoYXJJZHggPSAwOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHg7IGkrKykgewogICAgICBjaGFySWR4ICs9IHdvcmRzW2ldLmxlbmd0aDsKICAgIH0KICAgIHJldHVybiBjaGFySWR4OwogIH07CgogIHZhciBzbSA9IG5ldyBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcihiZWZvcmVXb3JkcywgYWZ0ZXJXb3Jkcyk7CiAgdmFyIG9wY29kZXMgPSBzbS5nZXRfb3Bjb2RlcygpOwoKICAvLyBTdXBwcmVzcyBjaGFyLWJ5LWNoYXIgZGlmZnMgaWYgdGhlcmUncyBsZXNzIHRoYW4gNTAlIGNoYXJhY3RlciBvdmVybGFwLgogIC8vIFRoZSBvbmUgZXhjZXB0aW9uIGlzIHB1cmUgd2hpdGVzcGFjZSBkaWZmcywgd2hpY2ggc2hvdWxkIGFsd2F5cyBiZSBzaG93bi4KICB2YXIgbWluRXF1YWxGcmFjID0gMC41OwogIHZhciBlcXVhbENvdW50ID0gMCwgY2hhckNvdW50ID0gMDsKICB2YXIgYmVmb3JlRGlmZiA9ICcnLCBhZnRlckRpZmYgPSAnJzsKICBvcGNvZGVzLmZvckVhY2goZnVuY3Rpb24ob3Bjb2RlKSB7CiAgICB2YXIgY2hhbmdlID0gb3Bjb2RlWzBdOwogICAgdmFyIGJlZm9yZUlkeCA9IHdvcmRUb0lkeCh0cnVlLCBvcGNvZGVbMV0pOwogICAgdmFyIGJlZm9yZUVuZCA9IHdvcmRUb0lkeCh0cnVlLCBvcGNvZGVbMl0pOwogICAgdmFyIGFmdGVySWR4ID0gd29yZFRvSWR4KGZhbHNlLCBvcGNvZGVbM10pOwogICAgdmFyIGFmdGVyRW5kID0gd29yZFRvSWR4KGZhbHNlLCBvcGNvZGVbNF0pOwogICAgdmFyIGJlZm9yZUxlbiA9IGJlZm9yZUVuZCAtIGJlZm9yZUlkeDsKICAgIHZhciBhZnRlckxlbiA9IGFmdGVyRW5kIC0gYWZ0ZXJJZHg7CiAgICB2YXIgY291bnQgPSBiZWZvcmVMZW4gKyBhZnRlckxlbjsKICAgIGlmIChjaGFuZ2UgPT0gJ2VxdWFsJykgewogICAgICBlcXVhbENvdW50ICs9IGNvdW50OwogICAgfSBlbHNlIHsKICAgICAgYmVmb3JlRGlmZiArPSBiZWZvcmVUZXh0LnN1YnN0cmluZyhiZWZvcmVJZHgsIGJlZm9yZUVuZCk7CiAgICAgIGFmdGVyRGlmZiArPSBhZnRlclRleHQuc3Vic3RyaW5nKGFmdGVySWR4LCBhZnRlckVuZCk7CiAgICB9CiAgICBjaGFyQ291bnQgKz0gY291bnQ7CiAgfSk7CiAgaWYgKGVxdWFsQ291bnQgPCBtaW5FcXVhbEZyYWMgKiBjaGFyQ291bnQgJiYKICAgICAgIShiZWZvcmVEaWZmLm1hdGNoKC9eXHMqJC8pICYmIGFmdGVyRGlmZi5tYXRjaCgvXlxzKiQvKSkpIHsKICAgIHJldHVybiBudWxsOwogIH0KCiAgdmFyIGJlZm9yZU91dCA9IFtdLCBhZnRlck91dCA9IFtdOyAgLy8gKHNwYW4gY2xhc3MsIHN0YXJ0LCBlbmQpIHRyaXBsZXMKICBvcGNvZGVzLmZvckVhY2goZnVuY3Rpb24ob3Bjb2RlKSB7CiAgICB2YXIgY2hhbmdlID0gb3Bjb2RlWzBdOwogICAgdmFyIGJlZm9yZUlkeCA9IHdvcmRUb0lkeCh0cnVlLCBvcGNvZGVbMV0pOwogICAgdmFyIGJlZm9yZUVuZCA9IHdvcmRUb0lkeCh0cnVlLCBvcGNvZGVbMl0pOwogICAgdmFyIGFmdGVySWR4ID0gd29yZFRvSWR4KGZhbHNlLCBvcGNvZGVbM10pOwogICAgdmFyIGFmdGVyRW5kID0gd29yZFRvSWR4KGZhbHNlLCBvcGNvZGVbNF0pOwogICAgaWYgKGNoYW5nZSA9PSAnZXF1YWwnKSB7CiAgICAgIGJlZm9yZU91dC5wdXNoKFtudWxsLCBiZWZvcmVJZHgsIGJlZm9yZUVuZF0pOwogICAgICBhZnRlck91dC5wdXNoKFtudWxsLCBhZnRlcklkeCwgYWZ0ZXJFbmRdKTsKICAgIH0gZWxzZSBpZiAoY2hhbmdlID09ICdkZWxldGUnKSB7CiAgICAgIGJlZm9yZU91dC5wdXNoKFsnZGVsZXRlJywgYmVmb3JlSWR4LCBiZWZvcmVFbmRdKTsKICAgIH0gZWxzZSBpZiAoY2hhbmdlID09ICdpbnNlcnQnKSB7CiAgICAgIGFmdGVyT3V0LnB1c2goWydpbnNlcnQnLCBhZnRlcklkeCwgYWZ0ZXJFbmRdKTsKICAgIH0gZWxzZSBpZiAoY2hhbmdlID09ICdyZXBsYWNlJykgewogICAgICBiZWZvcmVPdXQucHVzaChbJ2RlbGV0ZScsIGJlZm9yZUlkeCwgYmVmb3JlRW5kXSk7CiAgICAgIGFmdGVyT3V0LnB1c2goWydpbnNlcnQnLCBhZnRlcklkeCwgYWZ0ZXJFbmRdKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93ICJJbnZhbGlkIG9wY29kZTogIiArIG9wY29kZVswXTsKICAgIH0KICB9KTsKICBiZWZvcmVPdXQgPSBkaWZmZXIuc2ltcGxpZnlDb2Rlc18oYmVmb3JlT3V0KTsKICBhZnRlck91dCA9IGRpZmZlci5zaW1wbGlmeUNvZGVzXyhhZnRlck91dCk7CgogIHJldHVybiBbYmVmb3JlT3V0LCBhZnRlck91dF07Cn07CgoKLy8gQWRkIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIgZGlmZnMgdG8gYSByb3cgKGlmIGFwcHJvcHJpYXRlKS4KZGlmZmVyLmFkZENoYXJhY3RlckRpZmZzXyA9IGZ1bmN0aW9uKGJlZm9yZUNlbGwsIGFmdGVyQ2VsbCkgewogIHZhciBiZWZvcmVUZXh0ID0gJChiZWZvcmVDZWxsKS50ZXh0KCksCiAgICAgIGFmdGVyVGV4dCA9ICQoYWZ0ZXJDZWxsKS50ZXh0KCk7CiAgdmFyIGNvZGVzID0gZGlmZmVyLmNvbXB1dGVDaGFyYWN0ZXJEaWZmc18oYmVmb3JlVGV4dCwgYWZ0ZXJUZXh0KTsKICBpZiAoY29kZXMgPT0gbnVsbCkgcmV0dXJuOwogIGJlZm9yZU91dCA9IGNvZGVzWzBdOwogIGFmdGVyT3V0ID0gY29kZXNbMV07CgogIC8vIFNwbGljZSBpbiAiaW5zZXJ0IiwgImRlbGV0ZSIgYW5kICJyZXBsYWNlIiB0YWdzLgogIC8vIFRoaXMgaXMgbWFkZSBtb3JlIGRpZmZpY3VsdCBieSB0aGUgcHJlc2VuY2Ugb2Ygc3ludGF4IGhpZ2hsaWdodGluZywgd2hpY2gKICAvLyBoYXMgaXRzIG93biBzZXQgb2YgdGFncy4gVGhlIHR3byBjYW4gY28tZXhpc3RzIGlmIHdlJ3JlIGNhcmVmdWwgdG8gb25seQogIC8vIHdyYXAgY29tcGxldGUgKGJhbGFuY2VkKSBET00gdHJlZXMuCiAgdmFyIGJlZm9yZUh0bWwgPSAkKGJlZm9yZUNlbGwpLmh0bWwoKSwKICAgICAgYWZ0ZXJIdG1sID0gJChhZnRlckNlbGwpLmh0bWwoKTsKICB2YXIgYmVmb3JlTWFwcGVyID0gbmV3IGRpZmZlci5odG1sVGV4dE1hcHBlcihiZWZvcmVUZXh0LCBiZWZvcmVIdG1sKTsKICB2YXIgYWZ0ZXJNYXBwZXIgPSBuZXcgZGlmZmVyLmh0bWxUZXh0TWFwcGVyKGFmdGVyVGV4dCwgYWZ0ZXJIdG1sKTsKCiAgJChiZWZvcmVDZWxsKS5lbXB0eSgpLmh0bWwoZGlmZmVyLmNvZGVzVG9IdG1sXyhiZWZvcmVNYXBwZXIsIGJlZm9yZU91dCkpOwogICQoYWZ0ZXJDZWxsKS5lbXB0eSgpLmh0bWwoZGlmZmVyLmNvZGVzVG9IdG1sXyhhZnRlck1hcHBlciwgYWZ0ZXJPdXQpKTsKfTsKCi8vIGNvZGVzIGFyZSAoc3BhbiBjbGFzcywgc3RhcnQsIGVuZCkgdHJpcGxlcy4KLy8gVGhpcyBtZXJnZXMgY29uc2VjdXRpdmUgcnVucyB3aXRoIHRoZSBzYW1lIGNsYXNzLCB3aGljaCBzaW1wbGlmaWVzIHRoZSBIVE1MLgpkaWZmZXIuc2ltcGxpZnlDb2Rlc18gPSBmdW5jdGlvbihjb2RlcykgewogIHZhciBuZXdDb2RlcyA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBjb2RlID0gY29kZXNbaV07CiAgICBpZiAoaSA9PSAwKSB7CiAgICAgIG5ld0NvZGVzLnB1c2goY29kZSk7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIHZhciBsYXN0SW5kZXggPSBuZXdDb2Rlcy5sZW5ndGggLSAxOwogICAgdmFyIGxhc3RDb2RlQ2xhc3MgPSBuZXdDb2Rlc1tsYXN0SW5kZXhdWzBdOwogICAgaWYgKGxhc3RDb2RlQ2xhc3MgPT0gY29kZVswXSkgewogICAgICBuZXdDb2Rlc1tsYXN0SW5kZXhdWzJdID0gY29kZVsyXTsgIC8vIGV4dGVuZCBsYXN0IHJ1bi4KICAgIH0gZWxzZSB7CiAgICAgIG5ld0NvZGVzLnB1c2goY29kZSk7CiAgICB9CiAgfQoKICByZXR1cm4gbmV3Q29kZXM7Cn07CgovLyBjb2RlcyBhcmUgKHNwYW4gY2xhc3MsIHN0YXJ0LCBlbmQpIHRyaXBsZXMuCi8vIFRoaXMgd3JhcHMgaHRtbFtzdGFydC4uZW5kXSBpbiBhcHByb3ByaWF0ZSA8c3Bhbj4uLjwvc3Bhbj5zLgpkaWZmZXIuY29kZXNUb0h0bWxfID0gZnVuY3Rpb24obWFwcGVyLCBjb2RlcykgewogIHZhciBodG1sID0gJyc7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2Rlcy5sZW5ndGg7IGkrKykgewogICAgdmFyIGNvZGUgPSBjb2Rlc1tpXSwKICAgICAgICB0eXBlID0gY29kZVswXSwKICAgICAgICBzdGFydCA9IGNvZGVbMV0sCiAgICAgICAgbGltaXQgPSBjb2RlWzJdOwogICAgdmFyIHRoaXNIdG1sID0gbWFwcGVyLmdldEh0bWxTdWJzdHJpbmcoc3RhcnQsIGxpbWl0KTsKICAgIGlmICh0eXBlID09IG51bGwpIHsKICAgICAgaHRtbCArPSB0aGlzSHRtbDsKICAgIH0gZWxzZSB7CiAgICAgIGh0bWwgKz0gJzxzcGFuIGNsYXNzPSJjaGFyLScgKyB0eXBlICsgJyI+JyArIHRoaXNIdG1sICsgJzwvc3Bhbj4nOwogICAgfQogIH0KICByZXR1cm4gaHRtbDsKfQoKCmRpZmZlci5idWlsZFZpZXcgPSBmdW5jdGlvbihiZWZvcmVUZXh0LCBhZnRlclRleHQsIHVzZXJQYXJhbXMpIHsKICB2YXIgZCA9IG5ldyBkaWZmZXIoYmVmb3JlVGV4dCwgYWZ0ZXJUZXh0LCB1c2VyUGFyYW1zKTsKICByZXR1cm4gZC5idWlsZFZpZXdfKCk7Cn07CgovKioKICogUmV0dXJucyBhIHZhbGlkIEhpZ2hsaWdodEpTIGxhbmd1YWdlIGJhc2VkIG9uIGEgZmlsZSBuYW1lL3BhdGguCiAqIElmIGl0IGNhbid0IGd1ZXNzIGEgbGFuZ3VhZ2UsIHJldHVybnMgbnVsbC4KICovCmRpZmZlci5ndWVzc0xhbmd1YWdlVXNpbmdGaWxlTmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHsKICB2YXIgbGFuZyA9IChmdW5jdGlvbigpIHsKICAgIHZhciBtID0gL1wuKFteLl0rKSQvLmV4ZWMobmFtZSk7CiAgICBpZiAobSkgewogICAgICB2YXIgZXh0ID0gbVsxXTsKICAgICAgaWYgKGV4dCA9PSAncHknKSByZXR1cm4gJ3B5dGhvbic7CiAgICAgIGlmIChleHQgPT0gJ3NoJykgcmV0dXJuICdiYXNoJzsKICAgICAgaWYgKGV4dCA9PSAnbWQnKSByZXR1cm4gJ21hcmtkb3duJzsKICAgICAgcmV0dXJuIG1bMV0udG9Mb3dlckNhc2UoKTsKICAgIH07CgogICAgLy8gSGlnaGxpZ2h0aW5nIGJhc2VkIHB1cmVseSBvbiBmaWxlIG5hbWUsIGUuZy4gIk1ha2VmaWxlIi4KICAgIG0gPSAvKD86LipcLyk/KFteXC9dKikkLy5leGVjKG5hbWUpOwogICAgaWYgKG0gJiYgbVsxXSA9PSAnTWFrZWZpbGUnKSB7CiAgICAgIHJldHVybiAnbWFrZWZpbGUnOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfSkoKTsKICBpZiAoIWxhbmcgfHwgIWhsanMuZ2V0TGFuZ3VhZ2UobGFuZykpIHsKICAgIHJldHVybiBudWxsOwogIH0gZWxzZSB7CiAgICByZXR1cm4gbGFuZzsKICB9Cn07CgovKioKICogR3Vlc3MgYSBsYW5ndWFnZSBiYXNlZCBvbiBhIGZpbGUncyBjb250ZW50cy4KICogVGhpcyBhbHdheXMgcmV0dXJucyBhIHZhbGlkIEhpZ2hsaWdodEpTIGxhbmd1YWdlLiBJdCBjb25zaWRlcnMgdGhlIHNoZWJhbmcKICogbGluZSAoaWYgcHJlc2VudCkgYW5kIHRoZW4gZmFsbHMgYmFjayB0byBIaWdobGlnaHRKUydzIGtleXdvcmQtYmFzZWQKICogZ3Vlc3NpbmcuCiAqLwpkaWZmZXIuZ3Vlc3NMYW5ndWFnZVVzaW5nQ29udGVudHMgPSBmdW5jdGlvbihjb250ZW50cykgewogIC8vIEZpcnN0IGNoZWNrIGZvciBhIHNoZWJhbmcgbGluZS4KICB2YXIgZmlyc3RMaW5lID0gY29udGVudHMuc3Vic3RyaW5nKDAsIGNvbnRlbnRzLmluZGV4T2YoJ1xuJykpOwogIGlmIChmaXJzdExpbmUuc3Vic3RyaW5nKDAsIDIpID09ICcjIScpIHsKICAgIHZhciBwcm9jZXNzb3IgPSBmaXJzdExpbmUuc3Vic3RyaW5nKDIpOwogICAgaWYgKHByb2Nlc3NvciA9PSAnL2Jpbi9iYXNoJykgcmV0dXJuICdiYXNoJzsKICAgIGlmIChwcm9jZXNzb3IgPT0gJy9iaW4vc2gnKSByZXR1cm4gJ2Jhc2gnOwoKICAgIHZhciBvcHRpb25zID0gewogICAgICAgICdweXRob24nOiAncHl0aG9uJywKICAgICAgICAncGVybCc6ICdwZXJsJywKICAgICAgICAncnVieSc6ICdydWJ5JywKICAgICAgICAnbm9kZSc6ICdqYXZhc2NyaXB0JwogICAgfTsKICAgIGZvciAodmFyIGludGVycHJldGVyIGluIG9wdGlvbnMpIHsKICAgICAgdmFyIGxhbmcgPSBvcHRpb25zW2ludGVycHJldGVyXTsKICAgICAgaWYgKHByb2Nlc3Nvci5pbmRleE9mKGludGVycHJldGVyKSA+PSAwKSB7CiAgICAgICAgcmV0dXJuIGxhbmc7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIE5vdyBsZXQgSGlnaGxpZ2h0SlMgZ3Vlc3MuCiAgdmFyIGd1ZXNzID0gaGxqcy5oaWdobGlnaHRBdXRvKGNvbnRlbnRzKTsKICB2YXIgbGFuZyA9IGd1ZXNzLmxhbmd1YWdlOwogIHJldHVybiBsYW5nOwp9OwoKcmV0dXJuIGRpZmZlcjsKCn0pKCk7Cg==\"></script>\n",
"<link href=\"data:text/css;charset-utf-8;base64,LmRpZmYgewogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCmRpdi5kaWZmIHsKICBtYXgtd2lkdGg6IDEwMCU7CiAgZGlzcGxheTogdGFibGU7Cn0KCnRhYmxlLmRpZmYgewogIHdpZHRoOiAxMDAlOwogIGJvcmRlci1zcGFjaW5nOiAwOwp9Cgp0ZC5jb2RlIHsKICAvKiB0aGlzIGlzIHRoZSBtYXggd2lkdGggb2YgZWFjaCBjb2x1bW4gb2YgY29kZS4gKi8KICAvKiBmb3IgdGFibGUgY2VsbHMsIGB3aWR0aGAgYmVoYXZlcyBtb3JlIGxpa2UgYG1heC13aWR0aGAuICovCiAgd2lkdGg6IDYxY2g7CiAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogIHdvcmQtd3JhcDogYnJlYWstd29yZDsKfQoKdGFibGUuZGlmZiB0ZCB7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKLyogTGluZSBudW1iZXJzIHdpdGggdGhpbiB2ZXJ0aWNhbCBiYXJzIHRvIGluZGljYXRlIHdyYXBwZWQgbGluZXMuICovCi5saW5lLW5vIHsKICBjb2xvcjogIzk5OTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3Owp9Ci5saW5lLW5vOmZpcnN0LWNoaWxkIHsKICBiYWNrZ3JvdW5kLWltYWdlOgogICAgICBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgI2Y3ZjdmNywgI2Y3ZjdmNyAzcHgsIHRyYW5zcGFyZW50LCB0cmFuc3BhcmVudCA2cHgsICNmN2Y3ZjcgNnB4KSwKICAgICAgbGluZWFyLWdyYWRpZW50KCNmN2Y3ZjcsICNmN2Y3ZjcgMS40ZW0sICNhYWEgMS40ZW0pOwp9Ci5saW5lLW5vOmxhc3QtY2hpbGQgewogIGJhY2tncm91bmQtaW1hZ2U6CiAgICAgIGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2Y3ZjdmNywgI2Y3ZjdmNyAzcHgsIHRyYW5zcGFyZW50LCB0cmFuc3BhcmVudCA2cHgsICNmN2Y3ZjcgNnB4KSwKICAgICAgbGluZWFyLWdyYWRpZW50KCNmN2Y3ZjcsICNmN2Y3ZjcgMS40ZW0sICNhYWEgMS40ZW0pOwp9Cgp0YWJsZS5kaWZmIC5saW5lLW5vOmZpcnN0LWNoaWxkIHsKICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZGRkOwogIHRleHQtYWxpZ246IHJpZ2h0Owp9CnRhYmxlLmRpZmYgLmxpbmUtbm86bGFzdC1jaGlsZCB7CiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGRkOwogIHRleHQtYWxpZ246IGxlZnQ7Cn0KdGFibGUuZGlmZiB0ZDpudGgtY2hpbGQoMikgewogIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7Cn0KCi5saW5lLW5vLCAuY29kZSB7CiAgcGFkZGluZzogMnB4OwogIGhlaWdodDogMS4xMWVtOwogIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cn0KLmRpZmYgLnNraXAgewogIHRleHQtYWxpZ246IGNlbnRlcjsKICBiYWNrZ3JvdW5kOiAjZjdmN2Y3Owp9CgouZGlmZiAuZGVsZXRlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVlOwp9Ci5kaWZmIC5pbnNlcnQgewogIGJhY2tncm91bmQtY29sb3I6ICNlZmU7Cn0KCi5iZWZvcmUucmVwbGFjZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZTsKfQouYWZ0ZXIucmVwbGFjZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VmZTsKfQoKLmJlZm9yZSAuY2hhci1yZXBsYWNlLCAuYmVmb3JlIC5jaGFyLWRlbGV0ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjYzsKfQoKLmFmdGVyIC5jaGFyLXJlcGxhY2UsIC5hZnRlciAuY2hhci1pbnNlcnQgewogIGJhY2tncm91bmQtY29sb3I6ICNjZmM7Cn0KCi8qIFNpbmdsZSBjb2x1bW4gc2VsZWN0aW9uICovCi5zZWxlY3RpbmctbGVmdCAgdGQsCi5zZWxlY3RpbmctbGVmdCAgdGQgKiwKLnNlbGVjdGluZy1yaWdodCB0ZCwKLnNlbGVjdGluZy1yaWdodCB0ZCAqCnsKICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogIHVzZXItc2VsZWN0OiBub25lOwp9Cgouc2VsZWN0aW5nLWxlZnQgIHRkLmxpbmUtbm86OnNlbGVjdGlvbiwKLnNlbGVjdGluZy1sZWZ0ICB0ZC5saW5lLW5vICo6OnNlbGVjdGlvbiwKLnNlbGVjdGluZy1yaWdodCB0ZC5saW5lLW5vOjpzZWxlY3Rpb24sCi5zZWxlY3RpbmctcmlnaHQgdGQubGluZS1ubyAqOjpzZWxlY3Rpb24sCi5zZWxlY3RpbmctbGVmdCAgdGQuYWZ0ZXI6OnNlbGVjdGlvbiwKLnNlbGVjdGluZy1sZWZ0ICB0ZC5hZnRlciAqOjpzZWxlY3Rpb24sCi5zZWxlY3RpbmctcmlnaHQgdGQuYmVmb3JlOjpzZWxlY3Rpb24sCi5zZWxlY3RpbmctcmlnaHQgdGQuYmVmb3JlICo6OnNlbGVjdGlvbgp7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5zZWxlY3RpbmctbGVmdCAgdGQubGluZS1ubzo6LW1vei1zZWxlY3Rpb24sCi5zZWxlY3RpbmctbGVmdCAgdGQubGluZS1ubyAqOjotbW96LXNlbGVjdGlvbiwKLnNlbGVjdGluZy1yaWdodCB0ZC5saW5lLW5vOjotbW96LXNlbGVjdGlvbiwKLnNlbGVjdGluZy1yaWdodCB0ZC5saW5lLW5vICo6Oi1tb3otc2VsZWN0aW9uLAouc2VsZWN0aW5nLWxlZnQgIHRkLmFmdGVyOjotbW96LXNlbGVjdGlvbiwKLnNlbGVjdGluZy1sZWZ0ICB0ZC5hZnRlciAqOjotbW96LXNlbGVjdGlvbiwKLnNlbGVjdGluZy1yaWdodCB0ZC5iZWZvcmU6Oi1tb3otc2VsZWN0aW9uLAouc2VsZWN0aW5nLXJpZ2h0IHRkLmJlZm9yZSAqOjotbW96LXNlbGVjdGlvbgp7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5zZWxlY3RpbmctbGVmdCAgdGQuYmVmb3JlLAouc2VsZWN0aW5nLWxlZnQgIHRkLmJlZm9yZSAqLAouc2VsZWN0aW5nLXJpZ2h0IHRkLmFmdGVyLAouc2VsZWN0aW5nLXJpZ2h0IHRkLmFmdGVyICogewogIC1tb3otdXNlci1zZWxlY3Q6IHRleHQ7CiAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKICAtbXMtdXNlci1zZWxlY3Q6IHRleHQ7CiAgdXNlci1zZWxlY3Q6IHRleHQ7Cn0K\" rel=\"stylesheet\" />\n",
"<link href=\"data:text/css;charset-utf-8;base64,LyoKCkdvb2dsZSBDb2RlIHN0eWxlIChjKSBBYWhhbiBLcmlzaCA8Z2Vla3BhbnRoM3JAZ21haWwuY29tPgoKKi8KCi5obGpzIHsKICBkaXNwbGF5OiBibG9jazsgcGFkZGluZzogMC41ZW07CiAgYmFja2dyb3VuZDogd2hpdGU7IGNvbG9yOiBibGFjazsKfQoKLmhsanMtY29tbWVudCwKLmhsanMtdGVtcGxhdGVfY29tbWVudCwKLmhsanMtamF2YWRvYywKLmhsanMtY29tbWVudCAqIHsKICBjb2xvcjogIzgwMDsKfQoKLmhsanMta2V5d29yZCwKLm1ldGhvZCwKLmhsanMtbGlzdCAuaGxqcy10aXRsZSwKLmNsb2p1cmUgLmhsanMtYnVpbHRfaW4sCi5uZ2lueCAuaGxqcy10aXRsZSwKLmhsanMtdGFnIC5obGpzLXRpdGxlLAouc2V0dGluZyAuaGxqcy12YWx1ZSwKLmhsanMtd2ludXRpbHMsCi50ZXggLmhsanMtY29tbWFuZCwKLmh0dHAgLmhsanMtdGl0bGUsCi5obGpzLXJlcXVlc3QsCi5obGpzLXN0YXR1cyB7CiAgY29sb3I6ICMwMDg7Cn0KCi5obGpzLWVudnZhciwKLnRleCAuaGxqcy1zcGVjaWFsIHsKICBjb2xvcjogIzY2MDsKfQoKLmhsanMtc3RyaW5nLAouaGxqcy10YWcgLmhsanMtdmFsdWUsCi5obGpzLWNkYXRhLAouaGxqcy1maWx0ZXIgLmhsanMtYXJndW1lbnQsCi5obGpzLWF0dHJfc2VsZWN0b3IsCi5hcGFjaGUgLmhsanMtY2JyYWNrZXQsCi5obGpzLWRhdGUsCi5obGpzLXJlZ2V4cCwKLmNvZmZlZXNjcmlwdCAuaGxqcy1hdHRyaWJ1dGUgewogIGNvbG9yOiAjMDgwOwp9CgouaGxqcy1zdWIgLmhsanMtaWRlbnRpZmllciwKLmhsanMtcGksCi5obGpzLXRhZywKLmhsanMtdGFnIC5obGpzLWtleXdvcmQsCi5obGpzLWRlY29yYXRvciwKLmluaSAuaGxqcy10aXRsZSwKLmhsanMtc2hlYmFuZywKLmhsanMtcHJvbXB0LAouaGxqcy1oZXhjb2xvciwKLmhsanMtcnVsZXMgLmhsanMtdmFsdWUsCi5jc3MgLmhsanMtdmFsdWUgLmhsanMtbnVtYmVyLAouaGxqcy1saXRlcmFsLAouaGxqcy1zeW1ib2wsCi5ydWJ5IC5obGpzLXN5bWJvbCAuaGxqcy1zdHJpbmcsCi5obGpzLW51bWJlciwKLmNzcyAuaGxqcy1mdW5jdGlvbiwKLmNsb2p1cmUgLmhsanMtYXR0cmlidXRlIHsKICBjb2xvcjogIzA2NjsKfQoKLmhsanMtY2xhc3MgLmhsanMtdGl0bGUsCi5oYXNrZWxsIC5obGpzLXR5cGUsCi5zbWFsbHRhbGsgLmhsanMtY2xhc3MsCi5obGpzLWphdmFkb2N0YWcsCi5obGpzLXlhcmRvY3RhZywKLmhsanMtcGhwZG9jLAouaGxqcy10eXBlbmFtZSwKLmhsanMtdGFnIC5obGpzLWF0dHJpYnV0ZSwKLmhsanMtZG9jdHlwZSwKLmhsanMtY2xhc3MgLmhsanMtaWQsCi5obGpzLWJ1aWx0X2luLAouc2V0dGluZywKLmhsanMtcGFyYW1zLAouaGxqcy12YXJpYWJsZSwKLmNsb2p1cmUgLmhsanMtdGl0bGUgewogIGNvbG9yOiAjNjA2Owp9CgouY3NzIC5obGpzLXRhZywKLmhsanMtcnVsZXMgLmhsanMtcHJvcGVydHksCi5obGpzLXBzZXVkbywKLmhsanMtc3Vic3QgewogIGNvbG9yOiAjMDAwOwp9CgouY3NzIC5obGpzLWNsYXNzLAouY3NzIC5obGpzLWlkIHsKICBjb2xvcjogIzlCNzAzRjsKfQoKLmhsanMtdmFsdWUgLmhsanMtaW1wb3J0YW50IHsKICBjb2xvcjogI2ZmNzcwMDsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLmhsanMtcnVsZXMgLmhsanMta2V5d29yZCB7CiAgY29sb3I6ICNDNUFGNzU7Cn0KCi5obGpzLWFubm90YXRpb24sCi5hcGFjaGUgLmhsanMtc3FicmFja2V0LAoubmdpbnggLmhsanMtYnVpbHRfaW4gewogIGNvbG9yOiAjOUI4NTlEOwp9CgouaGxqcy1wcmVwcm9jZXNzb3IsCi5obGpzLXByZXByb2Nlc3NvciAqLAouaGxqcy1wcmFnbWEgewogIGNvbG9yOiAjNDQ0Owp9CgoudGV4IC5obGpzLWZvcm11bGEgewogIGJhY2tncm91bmQtY29sb3I6ICNFRUU7CiAgZm9udC1zdHlsZTogaXRhbGljOwp9CgouZGlmZiAuaGxqcy1oZWFkZXIsCi5obGpzLWNodW5rIHsKICBjb2xvcjogIzgwODA4MDsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLmRpZmYgLmhsanMtY2hhbmdlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjQkNDRkY5Owp9CgouaGxqcy1hZGRpdGlvbiB7CiAgYmFja2dyb3VuZC1jb2xvcjogI0JBRUVCQTsKfQoKLmhsanMtZGVsZXRpb24gewogIGJhY2tncm91bmQtY29sb3I6ICNGRkM4QkQ7Cn0KCi5obGpzLWNvbW1lbnQgLmhsanMteWFyZG9jdGFnIHsKICBmb250LXdlaWdodDogYm9sZDsKfQo=\" rel=\"stylesheet\" />\n",
"<script title=\"diffr-binding\" src=\"data:application/javascript;base64,SFRNTFdpZGdldHMud2lkZ2V0KHsKCiAgbmFtZTogJ2RpZmZyJywKCiAgdHlwZTogJ291dHB1dCcsCgogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CgogICAgcmV0dXJuIHsKICAgICAgLy8gVE9ETzogYWRkIGluc3RhbmNlIGZpZWxkcyBhcyByZXF1aXJlZAogICAgfQoKICB9LAoKICByZW5kZXJWYWx1ZTogZnVuY3Rpb24oZWwsIHgsIGluc3RhbmNlKSB7CiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImF1dG8iOwogICAgLyoKICAgIGVsLmlubmVyVGV4dCA9IHgubWVzc2FnZTsKICAgIGVsLmlubmVyVGV4dCA9IHguZmlsZTE7CiAgICBlbC5vdXRlclRleHQgPSB4LmZpbGUyOwogICAgKi8KICAgIGNvbnNvbGUubG9nKGVsLmlkKTsKICAgIHZhciBteWlkID0gJyMnICsgZWwuaWQ7CiAgICBjb25zb2xlLmxvZyhteWlkKTsKICAgIGNvbnNvbGUubG9nKHgpOwogICAgY29uc29sZS5sb2coeC53b3JkV3JhcCk7CiAgICAvL2VsLmh0bWwoCiAgICAgICQobXlpZCkuaHRtbCgKICAgICAgICBjb2RlZGlmZi5idWlsZFZpZXcoeC5mMSwgeC5mMiwgewogICAgICAgICAgYmVmb3JlTmFtZTogeC5maWxlMSwKICAgICAgICAgIGFmdGVyTmFtZTogeC5maWxlMiwKICAgICAgICAgIGNvbnRleHRTaXplOiB4LmNvbnRleHRTaXplLAogICAgICAgICAgbWluSnVtcFNpemU6IHgubWluSnVtcFNpemUsCiAgICAgICAgICB3b3JkV3JhcDogeC53b3JkV3JhcAogICAgICAgIH0pCiAgICAgICkKICAgIC8vKQogICAgOwovKgokKGVsKS5hcHBlbmQoCiAgICAgICAgY29kZWRpZmYuYnVpbGRWaWV3KHguZjEsIHguZjIsIHsKICAgICAgICBiZWZvcmVOYW1lOiB4LmZpbGUxLAogICAgICAgIGFmdGVyTmFtZTogeC5maWxlMiwKICAgICAgICBjb250ZXh0U2l6ZTogOCwKICAgICAgICBtaW5KdW1wU2l6ZTogNSwKICAgICAgICB3b3JkV3JhcDogdHJ1ZQogICAgfSkpOwogICAgKi8KCiAgfSwKCiAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKCiAgfQoKfSk7Cg==\"></script>\n",
"\t</head>\n",
"\t<body>\n",
"\t\t<div id=\"htmlwidget-6377698ad8ad48ac9145\" style=\"width:960px;height:500px;\" class=\"diffr html-widget\"></div>\n",
"<script type=\"application/json\" data-for=\"htmlwidget-6377698ad8ad48ac9145\">{\"x\":{\"message\":[\"function (..., domain = NULL, appendLF = TRUE) \",\"{\",\" args <- list(...)\",\" cond <- if (length(args) == 1L && inherits(args[[1L]], \\\"condition\\\")) {\",\" if (nargs() > 1L) \",\" warning(\\\"additional arguments ignored in message()\\\")\",\" args[[1L]]\",\" }\",\" else {\",\" msg <- .makeMessage(..., domain = domain, appendLF = appendLF)\",\" call <- sys.call()\",\" simpleMessage(msg, call)\",\" }\",\" defaultHandler <- function(c) {\",\" cat(conditionMessage(c), file = stderr(), sep = \\\"\\\")\",\" }\",\" withRestarts({\",\" signalCondition(cond)\",\" defaultHandler(cond)\",\" }, muffleMessage = function() NULL)\",\" invisible()\",\"}\"],\"contextSize\":3,\"minJumpSize\":10,\"wordWrap\":true,\"file1\":\"f1\",\"file2\":\"f2\",\"f1\":\"// generated with brms 2.7.2\\nfunctions {\\n}\\ndata {\\n int<lower=1> N; // total number of observations\\n int Y[N]; // response variable\\n int lb[N]; // lower truncation bounds;\\n int prior_only; // should the likelihood be ignored?\\n}\\ntransformed data {\\n}\\nparameters {\\n real temp_Intercept; // temporary intercept\\n}\\ntransformed parameters {\\n}\\nmodel {\\n vector[N] mu = temp_Intercept + rep_vector(0, N);\\n for (n in 1:N) {\\n mu[n] = exp(mu[n]);\\n }\\n // priors including all constants\\n target += student_t_lpdf(temp_Intercept | 3, 1, 10);\\n // likelihood including all constants\\n if (!prior_only) {\\n for (n in 1:N) {\\n target += poisson_lpmf(Y[n] | mu[n]) -\\n poisson_lccdf(lb[n] | mu[n]);\\n }\\n }\\n}\\ngenerated quantities {\\n // actual population-level intercept\\n real b_Intercept = temp_Intercept;\\n}\\n\",\"f2\":\"// generated with brms 2.7.2\\nfunctions {\\n\\n /* hurdle poisson log-PDF of a single response \\n * Args: \\n * y: the response value \\n * lambda: mean parameter of the poisson distribution\\n * hu: hurdle probability\\n * Returns: \\n * a scalar to be added to the log posterior \\n */ \\n real hurdle_poisson_lpmf(int y, real lambda, real hu) { \\n if (y == 0) { \\n return bernoulli_lpmf(1 | hu); \\n } else { \\n return bernoulli_lpmf(0 | hu) + \\n poisson_lpmf(y | lambda) - \\n log1m_exp(-lambda); \\n } \\n }\\n /* hurdle poisson log-PDF of a single response \\n * logit parameterization of the hurdle part\\n * Args: \\n * y: the response value \\n * lambda: mean parameter of the poisson distribution\\n * hu: linear predictor for hurdle part \\n * Returns: \\n * a scalar to be added to the log posterior \\n */ \\n real hurdle_poisson_logit_lpmf(int y, real lambda, real hu) { \\n if (y == 0) { \\n return bernoulli_logit_lpmf(1 | hu); \\n } else { \\n return bernoulli_logit_lpmf(0 | hu) + \\n poisson_lpmf(y | lambda) - \\n log1m_exp(-lambda); \\n } \\n }\\n /* hurdle poisson log-PDF of a single response \\n * log parameterization for the poisson part\\n * Args: \\n * y: the response value \\n * eta: linear predictor for poisson part \\n * hu: hurdle probability\\n * Returns: \\n * a scalar to be added to the log posterior \\n */ \\n real hurdle_poisson_log_lpmf(int y, real eta, real hu) { \\n if (y == 0) { \\n return bernoulli_lpmf(1 | hu); \\n } else { \\n return bernoulli_lpmf(0 | hu) + \\n poisson_log_lpmf(y | eta) - \\n log1m_exp(-exp(eta)); \\n } \\n }\\n /* hurdle poisson log-PDF of a single response \\n * log parameterization for the poisson part\\n * logit parameterization of the hurdle part\\n * Args: \\n * y: the response value \\n * eta: linear predictor for poisson part \\n * hu: linear predictor for hurdle part \\n * Returns: \\n * a scalar to be added to the log posterior \\n */ \\n real hurdle_poisson_log_logit_lpmf(int y, real eta, real hu) { \\n if (y == 0) { \\n return bernoulli_logit_lpmf(1 | hu); \\n } else { \\n return bernoulli_logit_lpmf(0 | hu) + \\n poisson_log_lpmf(y | eta) - \\n log1m_exp(-exp(eta)); \\n } \\n }\\n // hurdle poisson log-CCDF and log-CDF functions\\n real hurdle_poisson_lccdf(int y, real lambda, real hu) { \\n return bernoulli_lpmf(0 | hu) + poisson_lccdf(y | lambda) - \\n log1m_exp(-lambda);\\n }\\n real hurdle_poisson_lcdf(int y, real lambda, real hu) { \\n return log1m_exp(hurdle_poisson_lccdf(y | lambda, hu));\\n }\\n}\\ndata {\\n int<lower=1> N; // total number of observations\\n int Y[N]; // response variable\\n real<lower=0,upper=1> hu; // hurdle probability\\n int prior_only; // should the likelihood be ignored?\\n}\\ntransformed data {\\n}\\nparameters {\\n real temp_Intercept; // temporary intercept\\n}\\ntransformed parameters {\\n}\\nmodel {\\n vector[N] mu = temp_Intercept + rep_vector(0, N);\\n // priors including all constants\\n target += student_t_lpdf(temp_Intercept | 3, 1, 10);\\n // likelihood including all constants\\n if (!prior_only) {\\n for (n in 1:N) {\\n target += hurdle_poisson_log_lpmf(Y[n] | mu[n], hu);\\n }\\n }\\n}\\ngenerated quantities {\\n // actual population-level intercept\\n real b_Intercept = temp_Intercept;\\n}\\n\"},\"evals\":[],\"jsHooks\":[]}</script>\n",
"\t</body>\n",
"</html>\n"
],
"text/plain": [
"HTML widgets cannot be represented in plain text (need html)"
]
},
"metadata": {
"text/html": {
"isolated": true
}
},
"output_type": "display_data"
}
],
"source": [
"file1 = tempfile()\n",
"writeLines(stancode.truncpois, con = file1)\n",
"file2 = tempfile()\n",
"writeLines(stancode.hpois, con = file2)\n",
"diffr(file1, file2, before = \"f1\", after = \"f2\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "R",
"language": "R",
"name": "ir"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment